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/vda | size 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源,可自行更改