一、脚本编程的步骤
1.需求分析
根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等。
2.命令测试
将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等。
3.编程
将测试好的命令写入脚本文件中,并通过各种语句将命令执行的结果保存、判断或者发出报警等。
4.调试优化
对脚本进行测试,并根据结果进行优化,建议一边编程一边调试,以减少错误的发生。
二、案例脚本
1.欢迎脚本的编程
企业环境说明: 为了集中查看 Linux 服务器各方面的运行情况,管理员(root)希望制定自己的登录环境,以便登录时自动显示监控信息。
需求描述: 为 root 用户编写登录欢迎脚本,成功登录报告当前主机中的进程数、已登录用户数、登录的用户名、根文件系统的磁盘使用率。
涉及命令: ps 命令
who 命令
wc 命令
df 命令
grep 命令
awk 命令
2.MAC 记录与端口扫描脚本
企业环境说明: 随着业务的不断发展,某公司所使用的 Linux 服务器也越来越多。在系统管理和系统维护过程中,经常需要编写一些实用的小脚本,以辅助运维工作,提高工作效率。
需求描述: 编写名为 system.sh 的小脚本,记录局域网中各主机的 MAC 地址,保存到 /etc/ethers 文件中若此文件已存在,应先转移进行备份;每一行记录,第 1 列为 IP 地址,第 2 列为对应的 MAC 地址。 检查有哪些主机开启了匿名 FTP 服务,扫描对象为 /etc/ethers 文件中的所有 IP 地址,扫描端口为 21。
知识点补充:
arping 命令,在指定网卡上发送 ARP 请求指定地址
-A ARP 回复模式,更新邻居
-b 保持广播
-D 复制地址检测模式
-f 得到第一个恢复就退出
-q 不显示警告信息
-U 主动的 ARP 模式,更新邻居
-c <数据包的数目> 发送的数据包的数目
-w <超时时间> 设置超时时间
-I <网卡> 使用指定的以太网设备,默认情况下使用 eth0
-s 指定源 IP 地址
-h 显示帮助信息
-V 显示版本信息
arp 命令,管理系的 arp 缓存
-d IP 地址,删除一个 arp 表项,例:arp -d 192.168.1.104
-s IP 地址 MAC地址 设置一个 arp 表项,例:arp -s 192.168.1.108 00:0c:29:11:22:33
-a 使用 bsd 形式输出。(没有固定的列)
-n 使用数字形式显示 ip 地址,而不是默认的主机名形式
-D 不是指定硬件地址而是指定一个网络接口的名称,表项将使用相应接口的MAC地址。一般用来设置 ARP 代理。
-i 指定设置哪个网络接口上面的 ARP 表项,例:arp
-i eth1
-f filename 作用同 “-s”,不过它通过文件来指定 IP 地址和 MAC 地址的绑定。文件中每行分别时主机和 MAC,中间以空格分隔。如果没有指定文件名称,则使用 /etc/ethers 文件
wget 命令
-t,--tries+NUMBER 尝试重试次数为 NUMBER(0 代表无限制)
-T,--timeout=SECONDS 将所有超时设为 SECONDS 秒
-O,--output-document=FILE 将文档写入 FILE
-Q,--quota+NUMBER 设置获取配额为 NUMBER 字节
--limit-rate=RATE 限制下载速率为 RATE
-c,--continue 断点续传下载文件
-q,--quiet 安静模式(无信息输出)
-r,--recursive 指定递归下载
-l,--level=NUMBER 最大递归深度(inf 或 0 代表无限制,即全部下载)
--ftp-user=USER 设置 ftp 用户名为 USER
--ftp-password=PASS 设置 ftp 密码为 PASS
-A,--accept=LIST 逗号分隔的可接受的扩展名列表
-R,--reject=LIST 逗号分隔的要拒绝的扩展名列表
3.开发系统监控脚本
企业环境说明: 某公司随着业务的不断发展,所使用的 Linux 服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各个服务器中,当监控指标出现异常时发送告警邮件。
需求描述: 编写名为 sysmon.sh 的 shell 脚本。监控内容包括:CPU 使用率、内存使用率、根分区磁盘占用率(百分比精确到个位)。出现以下任一情况时报警:磁盘占用率超过 90%、CPU 使用率超过 80%、内存使用率超过 90%,告警邮件通过 mail 命令发送到指定邮箱。结合 crond 服务,每半小时执行一次控制脚本。
涉及命令: df 命令、awk 命令、mpstat 命令(由 sysstat 包安装)、free 命令、crontab 命令。
知识点补充:
mpstat 命令
格式:mpstat [-P{|ALL}] [internal [count]]
每隔 1 秒统计一次,共统计三次 字段函意:
%user 在 internal 时间段里,用户态的 CPU 时间(%),不包含 nice 值为负进程 (usr/total)*100
%nice 在 internal 时间段里,nice 值为负进程的 CPU 时间(%) (nice/total)*100
%sys 在 internal 时间段里,内核时间(%) (system/total)*100
%iowait 在 internal 时间段里,硬盘 IO 等待时间(%) (iowait/total)*100
%irq 在 internal 时间段里,硬中断时间(%) (irq/total)*100
%soft 在 internal 时间段里,软中断时间(%) (softirq/total)*100
%idle 在 internal 时间段里,CPU 除去等待磁盘 IO 操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100
free 命令
-b 显示内存的单位为字节
-k 显示内存的单位为 KB
-m 显示内存的单位为M
-o 忽略缓冲区调节列
-t 总和信息
-s <时间> 每隔指定时间执行一次命令,单位为 s
-h 以可读形式显示容量,需要free -V 显示版本大于 3.3
-V 版本信息
三、脚本编写知识点补充:
若编写一个较为复杂庞大的 shell 脚本时,为了方便后期排错,需要建立日志文件记录 错误发生的信息,可以使用 tee 命令。
tee 命令:用来将标准输入的内容输出到标准输出并可以保存为文件
-a 附加到文件
-i 无视中断
--help 显示帮助信息
--version 显示版本信息