博客
关于我
10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了
阅读量:787 次
发布时间:2023-01-24

本文共 7002 字,大约阅读时间需要 23 分钟。

10个实用 Linux/Unix 脚本示例

本文汇总了 10 个经典的 Linux/Unix 脚本示例,涵盖系统监控、文件同步、用户管理、网站检测等多个场景,简单解释每个脚本的功能和用途。

##脚本 1: 监控 MySQL 主从同步状态

#!/bin/bashHOST=localhostUSER=rootPASSWD=123.comIO_SQL_STATUS=$(mysql -h $HOST -u $USER -p --execute "show slave status\G" 2>/dev/null |awk '/Slave_.*_Running:/{print $1$2}')for i in $IO_SQL_STATUS; do    THREAD_STATUS_NAME=${i%:*}    THREAD_STATUS=${i#*:}    if [ "$THREAD_STATUS" != "Yes" ]; then        echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME状态异常!" \        | mail -s "Master-Slave 状态警报" xxx@163.com    fidone

功能说明:

  • 该脚本用于监控 MySQL 主从实例的同步状态。
  • 当检测到主从实例同步状态异常时,通过邮件通知管理员。

##脚本 2: 目录文件变化监控与实时同步

#!/bin/bashMON_DIR=/optwhile read files; do    rsync -avz /opt /tmp/opt    echo "$(date +'%F %T') 创lovak文件:$files" \    | mail -s "目录监控通知" xxx@163.comdone < <(inotifywait -mqr --format %f -e create $MON_DIR)

功能说明:

  • 监控指定目录(如 /opt)的文件变化。
  • 收到文件创建通知后,立即同步文件至 /tmpfifo 目录。
  • 并将操作日志通过邮件发送给管理员。

##脚本 3: 批量创建用户并设置密码

#!/bin/bashDATE=$@USER_LIST=user.txtfor USER in $USER_LIST; do    if ! id $USER &>/dev/null; then        PASS=$(echo $RANDOM | md5sum | cut -c 1-8)        useradd $USER        echo $PASS | passwd --stdin $USER &>/dev/null        echo "用户:$USER,密码:$PASS已创建成功。" \        | tee -a $USER_FILE    else        echo "用户:$USER 已存在!" &>        /dev/null    fidone

功能说明:

  • 批量创建多个用户,不重复用户存在时提示。
  • 密码通过 md5 加密生成,长度为 8 字符。
  • 操作记录保存至文件 user.txt。

##脚本 4: 批量检测网站异常

#!/bin/bashURL_LIST="www.baidu.com,www.ctnrs.com"FAIL_COUNT=0for URL in $URL_LIST; do    HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w 1 "$URL" 2>/dev/null)    if [ $HTTP_CODE -eq 200 ]; then        echo "URL:$URL 正常访问!"        break    else        echo "URL:$URL 正在重试(错误次数:$FAIL_COUNT)"        FAIL_COUNT+=1        if [ $FAIL_COUNT -eq 3 ]; then            echo "警告:URL 吗 lxml cccess failure!"            fi    donefi

功能说明:

  • detect多个网址的访问状态。
  • 当前 URL 访问异常时,定(limit 三次)后发送警告邮件。
  • URL 访问成功可直接终止脚本。

##脚本 5: 批量主机远程执行命令

#!/bin/bashCOMMAND=$*HOST_INFO=host.infofor IP in $(awk '{print $1}' $HOST_INFO); do    USER=$(awk -v ip=$IP '{print $2}' $HOST_INFO)    PORT=$(awk -v ip=$IP '{print $3}' $HOST_INFO)    PASS=$(awk -v ip=$IP '{print $4}' $HOST_INFO)    # 远程登录并执行命令    expect -c "    spawn ssh -p $PORT $USER@$IP    expect {        \"(yes/no)\" { send 'yes\r' ; exp_continue }        \"password:\" { send '$PASS\r' ; exp_continue }        \"\$USER@\$*\" { send '$COMMAND\r exit\r' ; exp_continue }    }"     echo "-------------------"done

功能说明:

  • 支持批量在多台主机上执行命令。
  • 可透过 expect 工具自动处理认证信息。
  • 适用于需要进行大量服务器操作的场景。

##脚本 6: 一键部署 LNMP 网站平台

#!/bin/bashNGINX_V=1.15.6PHP_V=5.6.36TMP_DIR=/tmpINSTALL_DIR=/usr/local# 安装 Nginxfunction install_nginx() {    yum install -y gcc gcc-c++ make openssl-devel pcre-devel wget    wget http://nginx.org/download/nginx-${NGINX_V}.tar.gz    tar zxf nginx-${NGINX_V}.tar.gz    cd nginx-${NGINX_V}    ./configure --prefix=$INSTALL_DIR/nginx --with-http_ssl_module \              --with-http_stub_status_module --with-stream    make -j 4    make install    mkdir -p $INSTALL_DIR/nginx/conf/vhost    cp -rf $PWD/nginx.conf $INSTALL_DIR/nginx/conf/    rm -rf $INSTALL_DIR/nginx/html/*    echo "ok" > $INSTALL_DIR/nginx/html/status.html    echo '
' > $INSTALL_DIR/nginx/html/status.php $INSTALL_DIR/nginx/sbin/nginx}# 安装 PHPfunction install_php() { cd $TMP_DIR yum install -y gcc gcc-c++ gd-devel libxml2-devel \ libcurl-devel libjpeg-devel libpng-devel \ openssl-devel libmcrypt-devel libxslt-devel libtidy-devel wget http://www.php.info/download/Php/${PHP_V}.tar.gz tar zxf php-${PHP_V}.tar.gz cd php-${PHP_V} ./configure --prefix=$INSTALL_DIR/php \ --with-config-file-path=$INSTALL_DIR/php/etc \ --enable-fpm --enable-opcache \ --with-mysql --with-mysqli --with-pdo-mysql \ --with-openssl --with-zlib --with-curl --with-gd \ --with-jpeg-dir --with-png-dir --with-freetype-dir \ --enable-mbstring --enable-hash make -j 4 make install cp php.ini-production $INSTALL_DIR/php/etc/php.ini cp sapi/fpm/php-fpm.conf $INSTALL_DIR/php/etc/php-fpm.conf cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm /etc/init.d/php-fpm start}# EntryPointread -p "请输入编号(1-9):" numbercase $number in1) install_nginx;;2) install_php;;3) install_mysql;;4) install_nginx install_php;;9) exitesac

功能说明:

  • 一键部署 LNMP(Linux、Nginx、MySQL、PHP)服务器环境。
  • 支持自动配置和安装,操作简便。

##脚本 7: 查看服务器资源利用率

#!/bin/bashfunction cpu() {    NUM=1    while [ $NUM -le 3 ]; do        util=$(vmstat | awk '{if(NR==3)print 100-$15"%"}')        iowait=$(vmstat | awk '{if(NR==3)print $16"%"}')        echo "CPU - 使用率:$util (%),磁盘IO等待率:$iowait (%)"        sleep 1        NUM=[$NUM+1]    done}function memory() {    total=$(free -m | awk '{if(NR==2)printf "%dG",$2/1024}')    used=$(free -m | awk '{if(NR==2)printf "%dG",(($2-2)/1024)}')    available=$(free -m | awk '{if(NR==2)printf "%dG",$NF/1024}')    echo "内存 - 总大小:$totalG,使用:$usedG,剩余:$availableG"}function disk() {    echo "硬盘 - 挂载点: $(df -h | awk '/^/dev/ {print $1}')"    echo "总大小:$(df -h | awk '{if(NR==1)print $2}')G"    echo "使用:$(df -h | awk '{if(NR==2)print $2}'G"    echo "使用率:$(df -h | awk '{if(NR==2)print $5}'%""}function tcp_status() {    echo "TCP连接状态:$(ss -antp | awk '{status[$1]++}END{for(i in status) print i":"status[i]""}'}# 执行各个函数的检测cpumemorydisktcp_status

功能说明:

  • 显示实时服务器资源使用情况,包括 CPU、内存、磁盘和 TCP 连接状态。
  • 适合监控服务器性能和网络状态。

##脚本 8: 找出占用 CPU/内存过高的进程

ps -eo user,pid,pcpu,pmem,args --sort=-pcpu | head -n 10ps -eo user,pid,pcpu,pmem,args --sort=-pmem | head -n 10

功能说明:

  • 显示前 10 个 CPU 和内存占用最高的进程列表。
  • 可通过排序 Alison 根据 CPU 或内存占用调整结果。

##脚本 9: 自动发布 Java 项目(Tomcat)

#!/bin/bashDATE=$(date +%F_%T)TOMCAT_NAME=$1TOMCAT_DIR=/usr/local/$TOMCAT_NAMEROOT=$TOMCAT_DIR/webapps/ROOTBACKUP_DIR=/data/backupWORK_DIR=/tmpPROJECT_NAME=tomcat-java-demo# 克隆或拉取代码cd $WORK_DIRif [ ! -d $PROJECT_NAME ]; then    git clone https://github.com/lizhenliang/tomcat-java-demo.git    cd $PROJECT_NAMEelse    cd $PROJECT_NAME    git pullfi# 构建项目mvn clean package -Dmaven.test.skip=trueif [ $? -ne 0 ]; then    echo "Maven 构建失败!"    exit 1fi# 部署TOMCAT_PID=$(ps -ef | grep "$TOMCAT_NAME" | egrep -v "grep|$$" | awk '{NR==1; print $2}')[[ -n "$TOMCAT_PID" ]] && kill -9 $TOMCAT_PID[[ -d $ROOT ]] && mv $ROOT $BACKUP_DIR/$TOMCAT_NAME_${DATE}unzip $WORK_DIR/$PROJECT_NAME/target/*.war -d $ROOT$TOMCAT_DIR/bin/startup.sh

功能说明:

  • 自动拉取代码、构建、部署到 Tomcat 目录中。
  • 将 projects 目录备份并重命名,避免覆盖。

##脚本 10: 自动发布 PHP 项目

#!/bin/bashDATE=$(date +%F_%T)WWWROOT=/usr/local/nginx/html/$1BACKUP_DIR=/data/backupWORK_DIR=/tmpPROJECT_NAME=php-demo# 克隆或拉取代码cd $WORK_DIRif [ ! -d $PROJECT_NAME ]; then    git clone https://github.com/lizhenliang/php-demo.git    cd $PROJECT_NAMEelse    cd $PROJECT_NAME    git pullfi# 部署if [ ! -d $WWWROOT ]; then    mkdir -p $WWWROOT    rsync -avz --exclude=.git $WORK_DIR/$PROJECT_NAME/* $WWWROOTelse    rsync -avz --exclude=.git $WORK_DIR/$PROJECT_NAME/* $WWWROOTfi

功能说明:

  • syncing指定项目目录至 nginx/html 目录。
  • 支持自动创建目标目录。
  • 过滤 .git 若素重要 rõum 的文件,避免传输大量无用文件。

转载地址:http://treyk.baihongyu.com/

你可能感兴趣的文章
响应的HTTP协议格式+常见的响应码
查看>>
遇到问题之-yum update无法连接镜像问题解决
查看>>
pycharm如何设置(错误、警告类的标准提醒)
查看>>
python入门到秃顶(10):异常
查看>>
百度背景换肤案例
查看>>
输出对象的值——踩坑
查看>>
在苹果Mac上如何更改AirDrop名称?
查看>>
springboot redis key乱码
查看>>
idea thymeleaf页面变量报错解决
查看>>
Vue.js学习-15-v-for循环数组内容
查看>>
kafka超时错误或者发送消息失败等错误,排错方式
查看>>
sockjs-node/info?t=1462183700002 报错解决方案
查看>>
Latex 错误集合
查看>>
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
查看>>
github 入门
查看>>
温故知新,.Net Core遇见Consul(HashiCorp),实践分布式服务注册与发现
查看>>
HTML 表单验证
查看>>
python解释器环境问题
查看>>
uni-app快速导入自己需要的插件
查看>>
编写xor_shellcode.py
查看>>