一些实用的bash脚本

1. vim编写bash,起始行自动加注释

在用户家目录新建文件.vimrc,输入以下内容:

[root@ali01 ~]# cat ~/.vimrc
set ignorecase
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"

func SetTitle()
        if expand("%:e") == 'sh'
                call setline(1, "#!/bin/bash")
                call setline(2, "############################################################")
                call setline(3, "# File Name:".expand("%"))
                call setline(4, "# Version:V1.0")
                call setline(5, "# Author: yurq")
                call setline(6, "# Organizaion: mx")
                call setline(7, "# Desc: ...")
                call setline(8, "############################################################")
        endif
endfunc

以后每次使用vim编辑sh脚本的时候,会自动在文件起始位置加入以下内容

[root@ali01 ~]# vim test.sh
[root@ali01 ~]# cat test.sh
#!/bin/bash
############################################################
# File Name:test.sh
# Version:V1.0
# Author: yurq
# Organizaion: mx
# Desc: ...
############################################################

2. 服务器信息收集

服务器信息收集内容,包括:

大分类小分类详细信息
系统基本信息服务器名称ali01
系统基本信息系统发行版本CentOS Linux
系统基本信息系统内核版本3.10.0-1160.119.1.el7.x86_64
系统基本信息ipv4地址172.19.91.7
系统基本信息公网地址182.92.84.211
系统基本信息系统语言字符集en_US.UTF-8
CPU信息CPU型号Intel® Xeon® Platinum
CPU信息CPU架构x86_64
CPU信息CPU颗数1
CPU信息CPU核心数1
CPU信息CPU线程数2
CPU信息CPU空闲率94.30%
CPU信息CPU用户态使用率0.00%
CPU信息CPU系统态使用率0.00%
CPU信息CPU iowait使用率0.00%
CPU信息系统负载0.01
内存信息总内存1.7G
内存信息可用内存1.4G
内存信息已用内存150M
内存信息SWAP信息无SWAP
磁盘信息磁盘/dev/vdasize 42.9 GB
磁盘信息分区名/分区大小40G
用户信息可登录用户数量1
用户信息可登录用户root
用户信息虚拟用户数量0
用户信息虚拟用户
服务信息selinux状态Disabled
服务信息防火墙状态inactive
服务信息防火墙规则
服务信息僵尸进程数量0 zombie
服务信息挂起进程数量0 stopped
服务信息nginx运行中12992 12993 12994
服务信息mysql未运行无进程信息
服务信息php未运行无进程信息
服务信息smb未运行无进程信息
其他信息未配置备份服务
其他信息未配置时间同步

脚本内容:

[root@ali01 ~]# cat sys_statistics.sh
#!/bin/bash
############################################################
# File Name:sys_statistics.sh
# Version:V1.0
# Author: yurq
# Organizaion: mx
# Desc: 系统巡检
############################################################

###################
#1.变量定义
##################
# man console_codes 查看选色
RED="\E[1;31m"
GREEN="\E[1;32m"
END="\E[0m"

file_result=my_sys_info.csv
service_list="nginx mysql php smb"
web_url="10.0.0.61/status"

. /etc/os-release

##################
#2. 处理文件结果
##################
res_file_process() {
  date_=`date +%F`
  [ -f $file_result ] && {
    iconv -f utf-8 -t gbk $file_result -o gbk-${file_result}
    mv gbk-${file_result} ${date_}-gbk-${file_result}
  }
}

####################
#3. 是否可以访问公网
####################
check_pub_network() {
  ping -W 1 -c 1 www.baidu.com &>/dev/null
  if [ $? -eq 0 ];then
    return 0
  else
    return 1
  fi
}

####################
#4. 获取系统基本信息
####################
sys_basic() {
  name="系统基本信息"
  echo -e "${GREEN}$name收集开始 $END"

  hostname=`hostname`
  ipv4=`hostname -I`
  system_release_ver=$NAME
  system_kernel_ver=`uname -r`
  system_lang=$LANG
#  rc=`check_pub_network`
  ping -W 1 -c 1 www.baidu.com &>/dev/null
  if [ "$?x" = "0x" ];then
    ipv4_pub=`curl ifconfig.io 2>/dev/null`
  else
    ipv4_pub="无公网地址"
  fi
  cat >> $file_result <<-EOF
$name,服务器名称,$hostname
$name,系统发行版本,$system_release_ver
$name,系统内核版本,$system_kernel_ver
$name,ipv4地址,$ipv4
$name,公网地址,$ipv4_pub
$name,系统语言字符集,$system_lang
EOF
  sleep 1
  echo -e "${GREEN}$name收集完成 $END"
  #echo -e "\E[1;31m haha \E[0m"
}

####################
#5. cpu信息
###################
cpu_info() {
  name="CPU信息"
  echo -e "${GREEN}$name收集开始 $END"

  #cpu_arch=`lscpu|awk 'NR==1&&/Architecture/{print $2}'`
  cpu_arch=`lscpu|awk '/Arch.*/{print $2}'`
  cpu_model_name=`lscpu|awk -F: '/Model name/ ,gsub(/^[ ]+/,"",$2){print $2}'`
  cpu_sockets=`lscpu |awk '/Socket\(s\)/{print $2}'`
  cpu_kernels=`lscpu|awk -F: '/^Core\(s\)/{print $2}'|sed -r 's#^[ ]+##g'`
  cpu_threads=`lscpu |awk '/^CPU\(s\)/{print $2}'`
  load_average=`uptime|sed -r 's#.*average: ##g'`
  cpu_idel_percent=`top -bn1|grep %Cpu|sed -r 's#^.*ni,\ (.*)\ id.*$#\1#g'`
  cpu_user_percent=`top -bn1|grep %Cpu|sed -r 's#^.*: +(.*)\ us.*$#\1#g'`
  cpu_sys_percent=`top -bn1|grep %Cpu|sed -r 's#^.*us, +(.*) sy.*$#\1#g'`
  cpu_iowait_percent=`top -bn1|grep %Cpu|sed -r 's#^.*id, +(.*) wa.*$#\1#g'`

  cat >> $file_result <<-EOF
$name,CPU型号,${cpu_model_name}
$name,CPU架构,$cpu_arch
$name,CPU颗数,$cpu_sockets
$name,CPU核心数,$cpu_kernels
$name,CPU线程数,$cpu_threads
$name,CPU空闲率,${cpu_idel_percent}%
$name,CPU用户态使用率,${cpu_user_percent}%
$name,CPU系统态使用率,${cpu_sys_percent}%
$name,CPU iowait使用率,${cpu_iowait_percent}%
$name,系统负载,${load_average}
EOF
  sleep 1

  echo -e "${GREEN}$name收集完成 $END"
}

######################
#6. 内存信息
######################
mem_info() {
  name="内存信息"
  echo -e "${GREEN}$name收集开始 $END"
  mem_total=`free -h|awk 'NR==2 {print $2}'`
  mem_available=`free -h|awk 'NR==2 {print $NF}'`
  mem_used=`free -h|awk 'NR==2 {print $3}'`

  cat >> $file_result <<-EOF
$name,总内存,$mem_total
$name,可用内存,$mem_available
$name,已用内存,$mem_used
EOF

  swap_total=`free |awk 'NR==3 {print $2}'`

  if [ $swap_total -eq 0 ];then
         has_swap=1
         cat >> $file_result <<-EOF
$name,SWAP信息,无SWAP
EOF
  else
         has_swap=0
         swap_used=`free -h|awk 'NR==3 {print $3}'`
         swap_free=`free -h|awk 'NR==3 {print $NF}'`
         swap_all=`free -h|awk 'NR==3 {print $2}'`
         cat >> $file_result <<-EOF
$name,SWAP共计,$swap_all
$name,已用SWAP,$swap_used
$name,可用SWAP,$swap_free
EOF
  fi


  sleep 1

  echo -e "${GREEN}$name收集完成 $END"
}

#####################
#7. 磁盘信息
####################
disk_info() {

  name="磁盘信息"
  echo -e "${GREEN}$name收集开始 $END"

  disk_cnt=`fdisk -l|grep -c -E "Disk /dev/nvme.*|Disk /dev/sd[a-z]|Disk /dev/vd[a-z]"`

  disk=`fdisk -l|grep -E "Disk /dev/nvme.*|Disk /dev/sd[a-z]|Disk /dev/vd[a-z]"`
  disk_name=`echo "$disk" |awk -F":| " '{print $2}'`
  for d in $disk_name
  do
          d_size=`fdisk -l|grep $d|awk -F": |," '{print $2}'`
          cat >> $file_result <<-EOF
$name,磁盘$d,size $d_size
EOF
  done

  for part in `grep -v -E '^#|swap|^$' /etc/fstab|awk '{print $2}'`
  do
          partion=`df -h $part|awk 'NR==2{print $NF}'`
          partion_size=`df -h $part|awk 'NR==2{print $2}'`
          partion_percent=`df -h $part|awk 'NR==2{print $(NF-1)}'`
          partion_inode_percent=`df -i $part|awk 'NR==2{print $(NF-1)}'`

          cat >> $file_result <<-EOF
$name,分区名$partion,分区大小$partion_size,分区使用率$partion_percent,inode使用率$partion_inode_percent
EOF
  done

  sleep 1

  echo -e "${GREEN}$name收集完成 $END"
}

user_info() {

  name="用户信息"
  echo -e "${GREEN}$name收集开始 $END"

  login_user_cnt=`cat /etc/passwd|grep -c /bin/bash`
  login_users=`cat /etc/passwd|grep  /bin/bash|awk -F: '{print $1}'|xargs`
  nologin_user_cnt=`cat /etc/passwd|grep  /usr/sbin/nologin|awk -F: '{print $1}'|wc -l`
  nologin_users=`cat /etc/passwd|grep  /usr/sbin/nologin|awk -F: '{print $1}'|xargs`


  cat >> $file_result <<-EOF
$name,可登录用户数量,$login_user_cnt
$name,可登录用户,$login_users
$name,虚拟用户数量,$nologin_user_cnt
$name,虚拟用户,$nologin_users
EOF
  sleep 1

  echo -e "${GREEN}$name收集完成 $END"
}


service_info() {

  name="服务信息"
  echo -e "${GREEN}$name收集开始 $END"
  rc=`getenforce 2>/dev/null`
  if [ "${rc}x" = "x"  ];then
          selinux_status="未安装"
  else
          selinux_status=`getenforce 2>/dev/null`
  fi
  if [ `systemctl is-active iptables` = "active" ];then
          iptables_status="active"
          iptables_rules=`iptables-save`
  else
          iptables_status="inactive"
          iptables_rules="无"
  fi

  zombie_cnt=`top -b -n1|awk -F"," 'NR==2{print $NF}'|awk '{print $1,$2}'`
  stopped_cnt=`top -b -n1|awk -F"," 'NR==2{print $(NF-1)}'|awk '{print $1,$2}'`

  cat >> $file_result <<-EOF
$name,selinux状态,$selinux_status
$name,防火墙状态,$iptables_status
$name,防火墙规则,$iptables_rules
$name,僵尸进程数量,$zombie_cnt
$name,挂起进程数量,$stopped_cnt
EOF

  for svr in $service_list
  do
          rc=`ps -ef|grep  $svr|grep -v grep|awk '{print $2}'`
          if [ "${rc}x" = "x" ];then
                  svr_status="${svr}未运行"
                  svr_process="无进程信息"
          else

                  svr_status="${svr}运行中"
                  svr_process=`ps -ef|grep  ${svr}|grep -v grep|awk '{print $2}'|xargs`
          fi
          cat >> $file_result <<-EOF
$name,$svr_status,$svr_process
EOF
  done



  sleep 1

  echo -e "${GREEN}$name收集完成 $END"
}




other_info() {

  name="其他信息"
  echo -e "${GREEN}$name收集开始 $END"

  backup_cron=`crontab -l 2&>/dev/null|grep -E 'backup|back|bak'`
  ntp_cron=`crontab -l 2&>/dev/null|grep -E 'ntp|ntpdate'`
  sleep 1

  if [ -z `crontab -l 2&>/dev/null|grep -E 'backup|back|bak'` ];then
          cat >>$file_result <<-EOF
$name,未配置备份服务,无
EOF
  else
          backup_task=`crontab -l 2&>/dev/null|grep -E 'backup|back|bak'`
          cat >>$file_result <<-EOF
$name,已配置备份服务,$backup_task
EOF
  fi

  if [ -z `crontab -l 2&>/dev/null|grep -E 'ntp|ntpdate'` ];then
          cat >>$file_result <<-EOF
$name,未配置时间同步,无
EOF
  else
          ntp_sync=`crontab -l 2&>/dev/null|grep -E 'ntp|ntpdate'`
          cat >>$file_result <<-EOF
$name,已配置时间同步,$ntp_sync
EOF
  fi

  echo -e "${GREEN}$name收集完成 $END"
}





main() {
  [ -f $file_result ] && rm -f $file_result
  sys_basic
  cpu_info
  mem_info
  disk_info
  user_info
  service_info
  other_info

  res_file_process

}

main

运行
在这里插入图片描述
执行结果

[root@ali01 ~]# cat my_sys_info.csv
系统基本信息,服务器名称,ali01
系统基本信息,系统发行版本,CentOS Linux
系统基本信息,系统内核版本,3.10.0-1160.119.1.el7.x86_64
系统基本信息,ipv4地址,172.19.91.7
系统基本信息,公网地址,182.92.84.211
系统基本信息,系统语言字符集,en_US.UTF-8
CPU信息,CPU型号,Intel(R) Xeon(R) Platinum
CPU信息,CPU架构,x86_64
CPU信息,CPU颗数,1
CPU信息,CPU核心数,1
CPU信息,CPU线程数,2
CPU信息,CPU空闲率,%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%
CPU信息,CPU用户态使用率,3.1%
CPU信息,CPU系统态使用率,3.1%
CPU信息,CPU iowait使用率,0.0%
CPU信息,系统负载,0.00, 0.04, 0.05
内存信息,总内存,1.7G
内存信息,可用内存,1.4G
内存信息,已用内存,150M
内存信息,SWAP信息,无SWAP
磁盘信息,磁盘/dev/vda,size 42.9 GB
磁盘信息,分区名/,分区大小40G,分区使用率9%,inode使用率3%
用户信息,可登录用户数量,1
用户信息,可登录用户,root
用户信息,虚拟用户数量,0
用户信息,虚拟用户,
服务信息,selinux状态,Disabled
服务信息,防火墙状态,inactive
服务信息,防火墙规则,无
服务信息,僵尸进程数量,0 zombie
服务信息,挂起进程数量,0 stopped
服务信息,nginx运行中,12992 12993 12994
服务信息,mysql未运行,无进程信息
服务信息,php未运行,无进程信息
服务信息,smb未运行,无进程信息
其他信息,未配置备份服务,无
其他信息,未配置时间同步,无

这个脚本目前不区分系统,如Centos或者Ubuntu,如果后续要收集yum源或者apt源,可自行更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值