經典shell運維實用腳本~

以下腳本可謂日常工作常用到的經典腳本案例。希望可以幫助大家提升提升自動化能力!

1、監控100臺服務器磁盤利用率腳本

#!/bin/bashHOST_INFO=host.infofor IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do    USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)    PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)    TMP_FILE=/tmp/disk.tmp    ssh -p $PORT $USER@$IP 'df -h' > $TMP_FILE    USE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $NF,int($5)}' $TMP_FILE)    for USE_RATE in $USE_RATE_LIST; do        PART_NAME=${USE_RATE%=*}        USE_RATE=${USE_RATE#*=}        if [ $USE_RATE -ge 80 ]; then            echo "Warning: $PART_NAME Partition usage $USE_RATE%!"        fi    donedone

2、監控MySQL主從同步狀態是否異常腳本

#!/bin/bash  HOST=localhostUSER=rootPASSWD=123.comIO_SQL_STATUS=$(mysql -h$HOST -u$USER -p$PASSWD -e '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 status is $THREAD_STATUS!" |mail -s "Master-Slave Staus" xxx@163.com    fidone

3、MySQL數據庫備份單循環

#!/bin/bashDATE=$(date +%F_%H-%M-%S)HOST=localhostUSER=backupPASS=123.comBACKUP_DIR=/data/db_backupDB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
for DB in $DB_LIST; do    BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql    if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null; then        echo "$BACKUP_NAME 備份失敗!"    fidone

4、MySQL數據庫備份多循環

#!/bin/bashDATE=$(date +%F_%H-%M-%S)HOST=localhostUSER=backupPASS=123.comBACKUP_DIR=/data/db_backupDB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
for DB in $DB_LIST; do    BACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}    [ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/null    TABLE_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "use $DB;show tables;" 2>/dev/null)    for TABLE in $TABLE_LIST; do        BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql         if ! mysqldump -h$HOST -u$USER -p$PASS $DB $TABLE > $BACKUP_NAME 2>/dev/null; then            echo "$BACKUP_NAME 備份失敗!"        fi    donedone

5、Dos攻擊防范(自動屏蔽攻擊IP)

#!/bin/bashDATE=$(date +%d/%b/%Y:%H:%M)LOG_FILE=/usr/local/nginx/logs/demo2.access.logABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; do    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then        iptables -I INPUT -s $IP -j DROP        echo "$(date +'%F_%T') $IP" >> /tmp/drop_ip.log    fidone

6、Linux系統發送告警腳本

# yum install mailx# vi /etc/mail.rc  set from=baojingtongzhi@163.com smtp=smtp.163.comset smtp-auth-user=baojingtongzhi@163.com smtp-auth-password=123456set smtp-auth=login

7、nginx 訪問訪問日志按天切割

#!/bin/bashLOG_DIR=/usr/local/nginx/logsYESTERDAY_TIME=$(date -d "yesterday" +%F)LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")LOG_FILE_LIST="default.access.log"
for LOG_FILE in $LOG_FILE_LIST; do    [ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIR    mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}done
kill -USR1 $(cat /var/run/nginx.pid)

8、nginx訪問日志分析腳本

#!/bin/bash# 日志格式: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"LOG_FILE=$1echo "統計訪問最多的10個IP"awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}' $LOG_FILE |sort -k2 -nr |head -10echo "----------------------"
echo "統計時間段訪問最多的IP"awk '$4>="[01/Dec/2018:13:20:25" && $4<="[27/Nov/2018:16:20:49"{a[$1]++}END{for(v in a)print v,a[v]}' $LOG_FILE |sort -k2 -nr|head -10echo "----------------------"
echo "統計訪問最多的10個頁面"awk '{a[$7]++}END{print "PV:",length(a);for(v in a){if(a[v]>10)print v,a[v]}}' $LOG_FILE |sort -k2 -nrecho "----------------------"
echo "統計訪問頁面狀態碼數量"awk '{a[$7" "$9]++}END{for(v in a){if(a[v]>5)print v,a[v]}}' $LOG_FILE |sort -k3 -nr

9、查看網卡實時流量腳本

#!/bin/bashNIC=$1echo -e " In ------ Out"while true; do    OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)    OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)    sleep 1    NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)    NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)    IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")    OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")    echo "$IN $OUT"    sleep 1done

10、服務器系統配置初始化腳本

#/bin/bash# 設置時區并同步時間ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeif ! crontab -l |grep ntpdate &>/dev/null ; then    (echo "* 1 * * * ntpdate time.windows.com >/dev/null 2>&1";crontab -l) |crontab fi
# 禁用selinuxsed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinux/config
# 關閉防火墻if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then    systemctl stop firewalld    systemctl disable firewalldelif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then    service iptables stop    chkconfig iptables offfi
# 歷史命令顯示操作時間if ! grep HISTTIMEFORMAT /etc/bashrc; then    echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrcfi
# SSH超時時間if ! grep "TMOUT=600" /etc/profile &>/dev/null; then    echo "export TMOUT=600" >> /etc/profilefi
# 禁止root遠程登錄sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 禁止定時任務向發送郵件sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab 
# 設置最大打開文件數if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then    cat >> /etc/security/limits.conf << EOF    * soft nofile 65535    * hard nofile 65535    EOFfi
# 系統內核優化cat >> /etc/sysctl.conf << EOFnet.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_tw_buckets = 20480net.ipv4.tcp_max_syn_backlog = 20480net.core.netdev_max_backlog = 262144net.ipv4.tcp_fin_timeout = 20  EOF
# 減少SWAP使用echo "0" > /proc/sys/vm/swappiness
# 安裝系統性能分析工具及其他yum install gcc make autoconf vim sysstat net-tools iostat iftop iotp lrzsz -y

11、目錄文件變化監控和實時文件同步

#!/bin/bash
MON_DIR=/optinotifywait -mqr --format %f -e create $MON_DIR |\while read files; do   rsync -avz /opt /tmp/opt   #echo "$(date +'%F %T') create $files" | mail -s "dir monitor" xxx@163.comdone

12、批量創建100用戶并設置密碼腳本

#!/bin/bashDATE=$@USER_FILE=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" >> $USER_FILE        echo "$USER User create successful."    else        echo "$USER User already exists!"    fidone

13、批量檢測網站是否異常腳本

#!/bin/bash  URL_LIST="www.baidu.com www.ctnrs.com"for URL in $URL_LIST; do    FAIL_COUNT=0    for ((i=1;i<=3;i++)); do        HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)        if [ $HTTP_CODE -eq 200 ]; then            echo "$URL OK"            break        else            echo "$URL retry $FAIL_COUNT"            let FAIL_COUNT++        fi    done    if [ $FAIL_COUNT -eq 3 ]; then        echo "Warning: $URL Access failure!"    fidone

14、批量主機遠程執行命令腳本

#!/bin/bashCOMMAND=$*HOST_INFO=host.infofor IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do    USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)    PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)    PASS=$(awk -v ip=$IP 'ip==$1{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

15、一鍵部署LNMP網站平臺腳本

#!/bin/bashNGINX_V=1.15.6PHP_V=5.6.36TMP_DIR=/tmp
INSTALL_DIR=/usr/local
PWD_C=$PWD
echoecho -e "\tMenu\n"echo -e "1. Install Nginx"echo -e "2. Install PHP"echo -e "3. Install MySQL"echo -e "4. Deploy LNMP"echo -e "9. Quit"
function command_status_check() {  if [ $? -ne 0 ]; then    echo $1    exit  fi }
function install_nginx() {    cd $TMP_DIR    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    command_status_check "Nginx - 平臺環境檢查失敗!"    make -j 4     command_status_check "Nginx - 編譯失敗!"    make install    command_status_check "Nginx - 安裝失敗!"    mkdir -p $INSTALL_DIR/nginx/conf/vhost    alias cp=cp ; cp -rf $PWD_C/nginx.conf $INSTALL_DIR/nginx/conf    rm -rf $INSTALL_DIR/nginx/html/*    echo "ok" > $INSTALL_DIR/nginx/html/status.html    echo '<?php echo "ok"?>' > $INSTALL_DIR/nginx/html/status.php    $INSTALL_DIR/nginx/sbin/nginx    command_status_check "Nginx - 啟動失敗!"}
function install_php() {  cd $TMP_DIR    yum install -y gcc gcc-c++ make gd-devel libxml2-devel \        libcurl-devel libjpeg-devel libpng-devel openssl-devel \        libmcrypt-devel libxslt-devel libtidy-devel    wget http://docs.php.net/distributions/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    command_status_check "PHP - 平臺環境檢查失敗!"    make -j 4     command_status_check "PHP - 編譯失敗!"    make install    command_status_check "PHP - 安裝失敗!"    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    command_status_check "PHP - 啟動失敗!"}
read -p "請輸入編號:" numbercase $number in    1)        install_nginx;;    2)        install_php;;    3)        install_mysql;;    4)        install_nginx        install_php        ;;    9)        exit;;esac

16、一鍵查看服務器資源利用率

#!/bin/bashfunction cpu() {    NUM=1    while [ $NUM -le 3 ]; do        util=`vmstat |awk '{if(NR==3)print 100-$15"%"}'`        user=`vmstat |awk '{if(NR==3)print $13"%"}'`        sys=`vmstat |awk '{if(NR==3)print $14"%"}'`        iowait=`vmstat |awk '{if(NR==3)print $16"%"}'`        echo "CPU - 使用率: $util , 等待磁盤IO響應使用率: $iowait"        let NUM++        sleep 1    done}
function memory() {    total=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}'`    used=`free -m |awk '{if(NR==2) printf "%.1f",($2-$NF)/1024}'`    available=`free -m |awk '{if(NR==2) printf "%.1f",$NF/1024}'`    echo "內存 - 總大小: ${total}G , 使用: ${used}G , 剩余: ${available}G"}
function disk() {    fs=$(df -h |awk '/^\/dev/{print $1}')    for p in $fs; do        mounted=$(df -h |awk '$1=="'$p'"{print $NF}')        size=$(df -h |awk '$1=="'$p'"{print $2}')        used=$(df -h |awk '$1=="'$p'"{print $3}')        used_percent=$(df -h |awk '$1=="'$p'"{print $5}')        echo "硬盤 - 掛載點: $mounted , 總大小: $size , 使用: $used , 使用率: $used_percent"    done}
function tcp_status() {    summary=$(ss -antp |awk '{status[$1]++}END{for(i in status) printf i":"status[i]" "}')    echo "TCP連接狀態 - $summary"}
cpumemorydisktcp_status

17、找出占用CPU 內存過高的進程腳本???????

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

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39489.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JS】純web端使用ffmpeg實現的視頻編輯器-視頻合并

純前端實現的視頻合并 接上篇ffmpeg文章 【JS】純web端使用ffmpeg實現的視頻編輯器 這次主要添加了一個函數&#xff0c;實現了視頻合并的操作。 static mergeArgs(timelineList) {const cmd []console.log(時間軸數據,timelineList)console.log("文件1",this.readD…

常用目標檢測的格式轉換腳本文件txt,json等

常用目標檢測的格式轉換腳本文件txt,json等 文章目錄 常用目標檢測的格式轉換腳本文件txt,json等前言一、json格式轉yolo的txt格式二、yolov8的關鍵點labelme打的標簽json格式轉可訓練的txt格式三、yolo的目標檢測txt格式轉coco數據集標簽的json格式四、根據yolo的目標檢測訓練…

Vue+ElementUi實現錄音播放上傳及處理getUserMedia報錯問題

1.Vue安裝插件 npm install --registryhttps://registry.npmmirror.com 2.Vue頁面使用 <template><div class"app-container"><!-- header --><el-header class"procedureHeader" style"height: 20px;"><el-divid…

vue2 接口文檔

const assetmanagementIndex (params) > getAction("/asset/assetmanagementsystem/page", params); //資產管理制度表分頁列表 const assetmanagementPost (params) > postAction("/asset/assetmanagementsystem", params); //資產管理制度表新增…

維護Nginx千字經驗總結

Hello , 我是恒 。 維護putty和nginx兩個項目好久了&#xff0c;用面向底層的思路去接觸 在nginx社區的收獲不少&#xff0c;在這里談談我的感悟 Nginx的奪冠不是偶然 高速:一方面&#xff0c;在正常情況下&#xff0c;單次請求會得到更快的響應&#xff1b;另一方面&#xff0…

從零開始學量化~Ptrade使用教程——安裝與登錄

PTrade交易系統是一款高凈值和機構投資者專業投資軟件&#xff0c;為用戶提供普通交易、籃子交易、日內回轉交易、算法交易、量化投研/回測/實盤等各種交易工具&#xff0c;滿足用戶的各種交易需求和交易場景&#xff0c;幫助用戶提高交易效率。 運行環境及安裝 操作系統&…

昇思25天學習打卡營第3天 | 數據集 Dataset

數據是深度學習的基礎&#xff0c;高質量的數據輸入將在整個深度神經網絡中起到積極作用。MindSpore提供基于Pipeline的數據引擎&#xff0c;通過數據集&#xff08;Dataset&#xff09;和數據變換&#xff08;Transforms&#xff09;實現高效的數據預處理。其中Dataset是Pipel…

將數據切分成N份,采用NCCL異步通信,讓all_gather+matmul盡量Overlap

將數據切分成N份,采用NCCL異步通信,讓all_gathermatmul盡量Overlap 一.測試數據二.測試環境三.普通實現四.分塊實現 本文演示了如何將數據切分成N份,采用NCCL異步通信,讓all_gathermatmul盡量Overlap 一.測試數據 1.測試規模:8192*8192 world_size22.單算子:all_gather:0.035…

代理IP的10大誤區:區分事實與虛構

在當今的數字時代&#xff0c;代理已成為在線環境不可或缺的一部分。它們的用途廣泛&#xff0c;從增強在線隱私到繞過地理限制。然而&#xff0c;盡管代理無處不在&#xff0c;但仍存在許多圍繞代理的誤解。在本博客中&#xff0c;我們將探討和消除一些最常見的代理誤解&#…

人腦網絡的多層建模與分析

摘要 了解人類大腦的結構及其與功能的關系&#xff0c;對于各種應用至關重要&#xff0c;包括但不限于預防、處理和治療腦部疾病(如阿爾茨海默病或帕金森病)&#xff0c;以及精神疾病(如精神分裂癥)的新方法。結構和功能神經影像學方面的最新進展&#xff0c;以及計算機科學等…

OBS 免費的錄屏軟件

一、下載 obs 【OBS】OBS Studio 的安裝、參數設置和錄屏、攝像頭使用教程-CSDN博客 二、使用 obs & 輸出無黑屏 【OBS任意指定區域錄屏的方法-嗶哩嗶哩】 https://b23.tv/aM0hj8A OBS任意指定區域錄屏的方法_嗶哩嗶哩_bilibili 步驟&#xff1a; 1&#xff09;獲取區域…

012-GeoGebra基礎篇-構造圓的切線

前邊文章對于基礎內容已經悉數覆蓋了&#xff0c;這一篇我就不放具體的細節&#xff0c;若有需要可以復刻一下 目錄 一、成品展示二、算式內容三、正確性檢查五、文章最后 一、成品展示 二、算式內容 A(0,0) B(3,0) c: Circle(A,B) C(5,4) sSegment(A,C) DMidpoint(s) d: Circ…

k8s部署單節點redis

一、configmap # cat redis-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-single-confignamespace: redis data:redis.conf: |daemonize nobind 0.0.0.0port 6379tcp-backlog 511timeout 0tcp-keepalive 300pidfile /data/redis-server.pidlogfile /d…

全網小視頻去水印接口使用說明

一、請求地址&#xff1a; https://www.lytcreate.com/api/qsy/ 二、請求方式&#xff1a;POST 三、請求體&#xff1a;JSON body {"token": "個人中心的token","url": "視頻分享地址"} token獲取地址&#xff0c;訪問&#xff…

uniapp微信小程序使用xr加載模型

1.在根目錄與pages同級創建如下目錄結構和文件&#xff1a; // index.js Component({properties: {modelPath: { // vue頁面傳過來的模型type: String,value: }},data: {},methods: {} }) { // index.json"component": true,"renderer": "xr-frame&q…

Element-plus點擊當前行之后獲取數據顯示跟隨行數據

要實現點擊當前行后&#xff0c;在當前行的下方顯示數據&#xff0c;可以通過以下步驟來實現&#xff1a; 在表格的行點擊事件中獲取當前點擊行的位置信息。根據位置信息動態計算并設置需要顯示數據區域的位置。 下面是一個更新后的示例代碼&#xff0c;演示如何在 Element-P…

Unity 引擎收費模式變革:游戲開發者的挑戰與機遇

Unity 引擎作為游戲開發領域中的重要工具&#xff0c;近日宣布將在 2024 年 1 月 1 日起根據游戲安裝量對開發者進行收費。這一決定引起了業界的廣泛關注和討論。據 Unity 技術博客發布的《Unity 收費模式和配套服務更新》一文&#xff0c;他們選擇這種計費方式是基于每次游戲被…

PHP和phpSpider:如何應對網站變動導致的數據爬取失敗?

php和phpspider&#xff1a;如何應對網站變動導致的數據爬取失敗&#xff1f; 導語&#xff1a; 網絡爬蟲是一種自動化程序&#xff0c;用于從網站上獲取數據并進行處理。PHP是一種廣泛使用的編程語言&#xff0c;而phpSpider是一個基于PHP的開源網絡爬蟲框架。然而&#xff0…

軟降工程學系統實現

一、程序編碼 程序編碼是設計的繼續&#xff0c;將軟件設計的結果翻譯成用某種程序設計語言描述的源代碼。 程序編碼涉及到方法、工具和過程。 程序設計風格和程序設計語言的特性會深刻地影響軟件的質量和可維護性。 要求源程序具有良好的結構性和設計風格。 程序設計風格…

開啟IT世界的探索之旅——致有志于踏入IT領域的高考少年們

高考已成過去&#xff0c;而前方是無限可能的未來。對于那些有志于進入IT領域的高考生來說&#xff0c;這個暑假是你們開啟探索IT世界的絕佳時機。作為一名從事C#軟件開發的專業人員&#xff0c;我希望能通過這篇文章&#xff0c;分享一些學習路線圖和經驗心得&#xff0c;幫助…