您的位置:

Linux运维工程师必备的Shell脚本实例

一、文件管理

文件管理是Linux运维工作中的重要一环,Shell脚本可以快速方便地完成文件的管理。以下为文件管理方面的Shell脚本实例:

1. 查找文件

    
    #!/bin/bash
    # 查找当前目录以及子目录下所有扩展名为.c的文件
    find . -name "*.c"
    

上述脚本使用find命令查找当前目录下以及子目录下所有扩展名为.c的文件。find命令可以快速定位某个特定类型的文件,并且可以使用通配符进行模糊匹配。可以根据需要调整查找路径和文件类型。

2. 删除指定文件

    
    #!/bin/bash
    # 删除当前目录下所有扩展名为.log的文件
    rm -f *.log
    

上述脚本使用rm命令删除当前目录下所有扩展名为.log的文件。rm命令可以快速方便地删除某个特定类型的文件。

3. 文件备份

    
    #!/bin/bash
    # 将当前目录下所有扩展名为.c的文件备份到bak目录,并在备份文件名后面加上日期时间戳
    bakdir="./bak"
    if [ ! -d $bakdir ]; then
        mkdir $bakdir
    fi
    for file in `ls *.c`
    do
        cp $file $bakdir/${file}_$(date +%Y%m%d%H%M%S)
    done
    

上述脚本将当前目录下所有扩展名为.c的文件备份到bak目录,并在备份文件名后面加上日期时间戳。使用if判断备份目录是否存在,如果不存在则创建目录。使用for循环遍历符合条件的文件,然后使用cp命令进行备份。可以根据需要调整备份路径和备份文件名格式。

二、进程管理

进程管理是Linux运维工作中的另一个重要方面,Shell脚本可以方便地管理Linux系统中的进程。以下为进程管理方面的Shell脚本实例:

1. 查看指定进程的CPU和内存占用情况

    
    #!/bin/bash
    # 查看指定进程的CPU和内存占用情况
    pid=`ps -ef | grep nginx | grep -v grep | awk '{print $2}'`
    top -p $pid
    

上述脚本使用ps命令和awk命令查找nginx进程的PID,然后使用top命令查看该进程的CPU和内存占用情况。可以根据需要修改进程名称。

2. 杀死指定进程

    
    #!/bin/bash
    # 杀死指定进程
    pid=`ps -ef | grep nginx | grep -v grep | awk '{print $2}'`
    if [ -n "$pid" ]; then
        kill $pid
    fi
    

上述脚本使用ps命令和awk命令查找nginx进程的PID,然后使用kill命令杀死该进程。使用if判断进程是否存在,如果存在则杀死进程。

3. 监控指定进程的状态

    
    #!/bin/bash
    # 监控指定进程的状态,如果进程挂掉则自动重启
    while true
    do
        pid=`ps -ef | grep nginx | grep -v grep | awk '{print $2}'`
        if [ -z "$pid" ]; then
            /usr/local/nginx/sbin/nginx
            sleep 1
        fi
    done
    

上述脚本使用while循环监控nginx进程的状态,如果进程挂掉则自动重启。使用ps命令和awk命令查找nginx进程的PID,如果PID为空则重启nginx进程。使用sleep命令等待1秒钟。

三、系统监控

系统监控是Linux运维工作中的重要方面,Shell脚本可以方便地监控系统的状态。以下为系统监控方面的Shell脚本实例:

1. 监控系统负载

    
    #!/bin/bash
    # 监控系统负载,如果负载高于指定阈值(2),则报警
    while true
    do
        loads=`uptime | awk '{print $NF}' | cut -d',' -f1`
        if [ `echo "$loads > 2" | bc` -eq 1 ]; then
            echo "System load average is too high: $loads"
            # 发送报警邮件或短信
        fi
        sleep 60
    done
    

上述脚本使用while循环监控系统负载,如果负载高于指定阈值(2)则报警。使用uptime命令和awk命令查找系统负载,如果负载高于指定阈值(2)则输出报警信息。可以根据需要调整阈值和报警方式。

2. 监控磁盘空间

    
    #!/bin/bash
    # 监控磁盘空间,如果剩余空间低于指定阈值(10GB),则报警
    while true
    do
        free_space=`df -h / | awk '{print $4}' | tail -1`
        if [ `echo "$free_space < 10" | bc` -eq 1 ]; then
            echo "Disk space is too low: $free_space"
            # 发送报警邮件或短信
        fi
        sleep 60
    done
    

上述脚本使用while循环监控磁盘空间,如果剩余空间低于指定阈值(10GB)则报警。使用df命令和awk命令查找磁盘剩余空间,如果剩余空间低于指定阈值则输出报警信息。可以根据需要调整阈值和报警方式。

3. 监控连接数

    
    #!/bin/bash
    # 监控当前连接数,如果连接数高于指定阈值(1000),则报警
    while true
    do
        connections=`netstat -na | grep ESTABLISHED | wc -l`
        if [ `echo "$connections > 1000" | bc` -eq 1 ]; then
            echo "Too many connections: $connections"
            # 发送报警邮件或短信
        fi
        sleep 60
    done
    

上述脚本使用while循环监控当前连接数,如果连接数高于指定阈值(1000)则报警。使用netstat命令和grep命令查找已建立的连接数,如果连接数高于指定阈值则输出报警信息。可以根据需要调整阈值和报警方式。