案例
基础
uptime #查看CPU负载
ifconfig eth0 #查看网卡流量
free #查看内存信息
df #查看磁盘空间
wc -l /etc/passwd #查看计算机账户数量
who |wc -l #查看登录账户数量
rpm -qa |wc -l #查看已安装软件包数量
expect
expect 可以实现shell实现不了的用户交互需求 .
expect 可以写在脚本上 ,自动化完成 ssh ftp等需要交互任务
需要安装包 yum -y install expect
[ spawn ] 调用要执行的可交互命令, 启动新的进程
[ expect ] 从进程接收字符串
[ send ] 用于向进程发送字符串
[ interact ] 允许用户交互
[ exp_continue ] 在expect中多次匹配
[ exit ] 推出expect脚本
[ eof ] expect执行结束 , 推出
[ set ] 设置变量 , 例如 : set time 30
EOF
[ << EOF ] 开头 [ EOF ] 结尾 中间内容表示一个整体输出
常用于 交互式输出
结尾的 [ EOF ]要从行头开始
ssh远程登陆脚本
#!/bin/bash
passwd='123456'
/usr/bin/expect << EOF
set time 30
spawn shh root@192.168.88.240 df -Th
expect{
"*yes/no" { send "yes\r"; exp_continue }
"*password;" { send "$passwd\r" }
}
expect eof
EOF
远程安装其他主机httpd软件
#!/bin/bash
expect << EOF
spawn ssh 192.168.88.240
expect "*yes/no" { send "yes\r" }
expect "password" { send "123456789\r" }
expect "#" { send "yum -y install httpd\r" }
expect "#" { send "exit" }
EOF
1. 系统初始化
需求分析
-
公司某项目中有N台服务器 ,刚安装了Linux系统 , 其中包含 7, 8版本
-
编写初始化系统脚本 , 可自动适应 7 , 8 版本实现相关需求
需要配置
防火墙服务 和 SELinux
确认用户信息 , 所有服务器永久关闭防火墙服务和SELinux
***确认用户信息***
[ $UID -ne 0 ] && echo "NOT root" && exit
***永久关闭防火墙***
systemctl stop firewalld
systemctl disable firewalld
***永久关闭SELinux***
setenforce 0
sed -i '/^SELINUX/s/enforcing/disabled' /etc/selinux/config
命令历史记录数量与时间戳
判断版本
关闭7版本喜用的命令历史记录
修改8版本的命令历史记录最多保存2000条并加上时间戳
***判断版本***
egrep -q "\s+8\.[0-9]" /etc/redhat-release #判断系统版本
if [ $? -ne 0 ];then
***修改/ect/profile 中的 histsize=0 , 记录历史命令数量为0***
sed -ri 's/HISTSIZE=[0-9]+/HISTSIZE=0/' /etc/profile
else
***命令历史记录最多保存2000条并加上时间戳***
sed -ri '/^HISTSIZE/s/[0-9]+/2000/' /etc/profile
sed -i '/^export /i HISTTIMEFORMAT="%F %T "' /etc/profile #历史命令时间戳 ,在 export打头的上面添加 HIS..MAT , %F是time , %T是date
sed -i '/^export /s/$/ HISTTIMEFORMAT/' /etc/profile #export的尾巴'$'替换为新添加的环境变量 HISTTIMEFORMAT ,可以在子进程中也显示时间戳
关闭交换分区
关闭8版本的交换分区
***找到交换分区 , 循环关闭交换分区 , 关闭开机自启动***
swap=$(swapon | awk 'NR!=1{print $1}')
for i in $swap
do
swapoff $i
done
sed -i '/swap/s/^/#/' /etc/fstab
fi
ssh保持时间
定义root远程登陆系统后的ssh保持时间为 300秒
***定义ssh超时退出时间***
echo "export TMOUT=300" >> ~/.bash_profile #定义ssh超时退出时间
设置时间同步
设置时间同步 , ntp服务器地址是192.168.88.240
***设置时间同步客户端 , 服务器是192.168.88.240***
2. 文档处理
[ < ]
< 符号,输入重定向,可以在后面需要跟文件名,这样让程序不再从键盘读取数据,而是从文件中读取数据.
mail -s test root < /opt/mail.txt
[ << ]
<< 符号也称Here Document,代表你需要的内容在这里,某指令导入字符串时使用,而无需文件
mail -s test root << EOF
hello
test mail~
EOF
[ read ]
使用read指令配合输入重定向可同时定义多个变量
read a b
abc xyz #同时为变量a赋值abc,变量b赋值xyz
read a b < abc.txt #利用abc.txt文档内容赋值,仅读取第一行
结合while循环批量读取数据并通过read命令给变量赋值
while read a b
do
echo $a $b
done < abc.txt #利用abc.txt文档内容赋值,读取所有行
创建随机数字
tr -cd '_a-zA-Z0-9' < /dev/urandom | head -c 10
#-c是取反 -d是删除,对_a-zA-Z0-9取反删除,剩下就只是_a-zA-Z0-9这个范围内的字符串,head -c 10 可以得到10位字符
[ column ]
[ column -t 文件 ] # 用默认分隔符tab来整齐输出文件
[ column -x 文件 ] # 更改默认的排列顺序. 默认顺序是 上->下 , 修改为 左->右
[ column -s “文字符” -t ] # 指定 “文字符” 为 “-t” 的分隔符
[ column -c 字符数 ] # 指定显示宽度
引用其他文件中的函数
引用 user 文件中的 abc函数
. user #引出 user 文件内容
abc
read
read -n 3 c #-n 3是输入足够3个字符就自动进行下一步,c是存储字符的变量