您的位置:

Linux运维工程师的7个实用的Shell脚本

Shell脚本作为Linux运维工程师必须掌握的技能之一,能够通过编写Shell脚本来提升工作效率和减小出错率。下面我们来介绍几个实用的Shell脚本。

一、文件备份脚本

#!/bin/bash
# 备份目录
backup_dir=/var/backup/
# 要备份的文件列表
files="/etc/passwd /etc/group /etc/shadow"
# 备份文件名
backup_file="backup-$(date +%Y%m%d%H%M%S).tar.gz"
# 备份命令
tar -zcvf ${backup_dir}${backup_file} ${files}

以上脚本将要备份的文件列表存放在一个变量中,将备份文件命名为当前时间,并将备份文件保存在/var/backup/目录下。

二、日志分析脚本

#!/bin/bash
# 要分析的日志文件
logfile=/var/log/messages
# 分析脚本
awk '/error/' ${logfile} > error.log
awk '/warning/' ${logfile} > warning.log

以上脚本将/var/log/messages中包含error和warning的日志行分别提取到error.log和warning.log文件中。

三、查找并删除指定文件脚本

#!/bin/bash
# 要查找和删除的目录
search_dir=/home/
# 要查找和删除的文件名
filename=temp
# 是否确认删除
confirm=true
# 查找命令
find ${search_dir} -name ${filename} -type f -print0 | while read -d $'\0' file
do
  if [ ${confirm} = true ]; then
      echo "Delete file ${file}? (y/n)"
      read answer
  else
      answer=y
  fi
  if [ ${answer} = "y" ]; then
      rm -f ${file}
      echo "File ${file} deleted."
  fi
done

以上脚本将搜索/home/目录下所有名为temp的文件,并提示用户确认是否删除。如果确认删除,则将文件删除。

四、文件上传脚本

#!/bin/bash
# 要上传的文件
filename=test.txt
# 上传地址
upload_url=http://example.com/upload/
# 上传命令
curl -F "file=@${filename}" ${upload_url}

以上脚本将test.txt文件上传到指定的上传地址。

五、CPU负载监控脚本

#!/bin/bash
# CPU负载阈值
threshold=2
# 检查间隔
interval=5
# 监控命令
while true
do
    load=$(uptime | awk '{print $NF}' | cut -d. -f1)
    if [ ${load} -ge ${threshold} ]; then
        echo "$(date) CPU load exceeded threshold ${threshold}: ${load}"
        alert-command
    fi
    sleep ${interval}
done

以上脚本每隔5秒钟检查CPU负载情况,如果负载超过阈值2,则输出警告信息并执行警告命令。

六、TCP连接数监控脚本

#!/bin/bash
# TCP连接数阈值
threshold=1000
# 检查间隔
interval=10
# 监控命令
while true
do
    count=$(netstat -an | grep :80 | wc -l)
    if [ ${count} -ge ${threshold} ]; then
        echo "$(date) TCP connection count exceeded threshold ${threshold}: ${count}"
        alert-command
    fi
    sleep ${interval}
done    

以上脚本每隔10秒钟检查80端口的TCP连接数,如果超过阈值1000,则输出警告信息并执行警告命令。

七、磁盘使用情况监控脚本

#!/bin/bash
# 磁盘使用率阈值
threshold=90
# 监控命令
while true
do
    usage=$(df -h | grep /dev/sda1 | awk '{print $5}' | cut -d% -f1)
    if [ ${usage} -ge ${threshold} ]; then
        echo "$(date) Disk usage exceeded threshold ${threshold}: ${usage}%"
        alert-command
    fi
    sleep 300
done    

以上脚本每隔5分钟检查/dev/sda1分区的磁盘使用率,如果超过阈值90,则输出警告信息并执行警告命令。