1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Linux實(shí)用運(yùn)維腳本分享

        共 24439字,需瀏覽 49分鐘

         ·

        2022-06-21 12:18

        #查看僵尸進(jìn)程ps -al | gawk '{print $2,$4}' | grep Z

        # 匹配電子郵件的地址cat index.html | egrep -o "[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}" > ans.txt
        #匹配http URLcat index.html | egrep -o "http://[A-Za-z0-9.]+\.[a-zA-Z]{2,3}" > ans.txt
        #純文本形式下載網(wǎng)頁(yè)lynx -dump www.baidu.com > plain.txt
        #只打印HTTP頭部信息,無(wú)須遠(yuǎn)程下載文件curl --head www.baidu.com
        #使用POST提交數(shù)據(jù)curl -d "param2=nickwolfe?m2=12345" http://www.linuxidc.com/login.cgi
        #顯示分組途經(jīng)的網(wǎng)關(guān)traceroute www.baidu.com
        #列出系統(tǒng)中的開(kāi)放端口以及運(yùn)行在端口上的服務(wù)lsof -i
        #nc命令建立socket連接
        #設(shè)置監(jiān)聽(tīng) nc -l 5555#連接到套接字 nc 192.0.0.1 5555
        #快速文件傳輸#接收端 nc -l 5555 > destination_filename#發(fā)送端 nc 192.0.0.1 5555 < source_filename
        #找出指定目錄最大的n個(gè)文件du -ak target_dir | sort -nrk 1 | head -n 4# du中a為遞歸,k為kb;sort中n為數(shù)字,r為降序,k指定列
        #向終端中的所有登陸用戶(hù)發(fā)送廣播信息cat message.txt | wall
        #創(chuàng)建新的screen窗口screen
        #打印所有的.txt和.pdf文件find . \( -name "*.txt" -o -name "*.pdf" \) -print
        # -exec command {} \;是連用的,所有符合的都會(huì)放置在{}中,去執(zhí)行command
        #將文件分割成多個(gè)大小為10kb的文件split -b 10k data.file
        #打印兩個(gè)文件的交集comm A.txt B.txt -3 | sed 's/^\t//'
        #sed移除空白行sed '/^$/d' file

        mysql備份

        #!/bin/bash
        set -e
        USER="backup"PASSWORD="backup"# 數(shù)據(jù)庫(kù)數(shù)據(jù)目錄 #DATA_DIR="/data/mysql"BIN_INDEX=$DATA_DIR"/mysql-bin.index"# 備份目錄 #BACKUP_DIR="/data/backup/mysql"BACKUP_LOG="/var/log/mysql/backup.log"
        DATE=`date +"%Y%m%d"`TIME=`date +"%Y%m%d%H"`
        LOG_TIME=`date +"%Y-%m-%d %H:%M:%S"`DELETE_BINLOG_TIME="7 day"INCREMENT_INTERVAL="3 hour"
        note() { printf "[$LOG_TIME] note: $*\n" >> $BACKUP_LOG;}
        warning() { printf "[$LOG_TIME] warning: $*\n" >> $BACKUP_LOG;}
        error() { printf "[$LOG_TIME] error: $*\n" >> $BACKUP_LOG; exit 1;}
        full_backup() { local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`
        for db in $dbs do local backup_dir=$BACKUP_DIR"/full/"$db local filename=$db"."$DATE local backup_file=$backup_dir"/"$filename".sql"
        if [ ! -d $backup_dir ] then mkdir -p $backup_dir || { error "創(chuàng)建數(shù)據(jù)庫(kù) $db 全量備份目錄 $backup_dir 失敗"; continue; } note "數(shù)據(jù)庫(kù) $db 全量備份目錄 $backup_dir 不存在,創(chuàng)建完成"; fi
        note "full backup $db start ..." mysqldump --user=${USER} --password=${PASSWORD} --flush-logs --skip-lock-tables --quick $db > $backup_file || { warning "數(shù)據(jù)庫(kù) $db 備份失敗"; continue; }
        cd $backup_dir tar -cPzf $filename".tar.gz" $filename".sql" rm -f $backup_file chown -fR mysql:mysql $backup_dir
        note "數(shù)據(jù)庫(kù) $db 備份成功"; note "full backup $db end." done}
        increment_backup() { local StartTime=`date "-d $INCREMENT_INTERVAL ago" +"%Y-%m-%d %H:%M:%S"` local DELETE_BINLOG_END_TIME=`date "-d $DELETE_BINLOG_TIME ago" +"%Y-%m-%d %H:%M:%S"` local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`
        mysql -u$USER -p$PASSWORD -e "purge master logs before '$DELETE_BINLOG_END_TIME'" && note "delete $DELETE_BINLOG_TIME days before log";
        filename=`cat $BIN_INDEX | awk -F "/" '{print $2}'` for i in $filename do for db in $dbs do local backup_dir=$BACKUP_DIR"/increment/"$db local filename=$db"."$TIME local backup_file=$backup_dir"/"$filename".sql"
        if [ ! -d $backup_dir ] then mkdir -p $backup_dir || { error "創(chuàng)建數(shù)據(jù)庫(kù) $db 增量備份目錄 $backup_dir 失敗"; continue; } note "數(shù)據(jù)庫(kù) $db 增量備份目錄 $backup_dir 不存在,創(chuàng)建完成"; fi
        note "increment backup $db form time $StartTime start ..."
        mysqlbinlog -d $db --start-datetime="$StartTime" $DATA_DIR/$i >> $backup_file || { warning "數(shù)據(jù)庫(kù) $db 備份失敗"; continue; }
        note "increment backup $db end." done done
        for db in $dbs do local backup_dir=$BACKUP_DIR"/increment/"$db local filename=$db"."$TIME local backup_file=$backup_dir"/"$filename".sql"
        cd $backup_dir tar -cPzf $filename".tar.gz" $filename".sql" rm -f $backup_file
        note "數(shù)據(jù)庫(kù) $db 備份成功"; done}
        case "$1" in full) full_backup ;; increment) increment_backup ;; *) exit 2 ;;esac
        exit 1

        目錄備份

        #!/bin/bash### 時(shí)間DATE=$(date '+%Y-%m-%d_%H_%M_%S')# 備份目錄 BACKUPDIR="/home/backups"# 需要備份的目錄SORFILE=/opt# 目標(biāo)文件名DESFILE=/home/backups/$SORFILE.$(date '+%Y-%m-%d_%H_%M_%S').zip
        [ ! -d $BACKUPDIR ] && mkdir -p $BACKUPDIRcd $BACKUPDIR
        echo "start backup $SORFILE ..."sleep 3#echo "$DESFILE"

        #tar cvf $DESFILE $SORFILE#gzip -f .zip $DESFILEzip -r $DESFILE $SORFILE &>/dev/nullif [ "$?" == "0" ]then echo $(date +%Y-%m-%d)" zip sucess">>backup.logelse echo $(date +%Y-%m-%d)" zip failed">>backup.log exit 0fi
        # 刪除3天前的備份find $BACKUPDIR -type f -ctime +3 | xargs rm -rf


        PING查詢(xún)

        #!/bin/bash#用途:根據(jù)網(wǎng)絡(luò)配置對(duì)網(wǎng)絡(luò)地址192.168.0進(jìn)行修改,檢查是否是活動(dòng)狀態(tài)
        #{start..end}shell擴(kuò)展生成一組地址for ip in 192.168.0.{1..255}do ( ping $ip -c 2 &> /dev/null # > 標(biāo)準(zhǔn)輸出重定向,和1>一致 # 2>&1 將標(biāo)準(zhǔn)錯(cuò)誤輸出 重定向 到標(biāo)準(zhǔn)輸出 # &>file 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都重定向到文件filename中
        if [ $? -eq 0 ];then echo $ip is alive fi )&donewait#并行ping,加速

        磁盤(pán)IO檢查

        ##iostat是查看磁盤(pán)活動(dòng)統(tǒng)計(jì)情況
        ##顯示所有設(shè)備負(fù)載情況 r/s: 每秒完成的讀 I/O 設(shè)備次數(shù)。即 rio/s;w/s: 每秒完成的寫(xiě) I/O 設(shè)備次數(shù)。即 wio/s等iostat
        ##每隔2秒刷新磁盤(pán)IO信息,并且每次顯示3次iostat 2 3
        #顯示某個(gè)磁盤(pán)的IO信息iostat -d sda1
        ##顯示tty和cpu信息iostat -t
        ##以M為單位顯示磁盤(pán)IO信息iostat -m
        ##查看TPS和吞吐量信息 kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量;kB_wrtn/s:每秒向設(shè)備(drive expressed)寫(xiě)入的數(shù)據(jù)量;kB_read:讀取的總數(shù)據(jù)量;kB_wrtn:寫(xiě)入的總數(shù)量數(shù)據(jù)量;iostat -d -k 1 1
        #查看設(shè)備使用率(%util)、響應(yīng)時(shí)間(await)iostat -d -x -k 1 1
        #查看CPU狀態(tài)iostat -c 1 3
        #統(tǒng)計(jì)進(jìn)程(pid)的stat,進(jìn)程的stat自然包括進(jìn)程的IO狀況pidstat
        #只顯示IOpidstat -d 1
        #-d IO 信息,-r 缺頁(yè)及內(nèi)存信息-u CPU使用率-t 以線程為統(tǒng)計(jì)單位1 1秒統(tǒng)計(jì)一次pidstat -u -r -d -t 1
        #文件級(jí)IO分析,查看當(dāng)前文件由哪些進(jìn)程打開(kāi)lsof ls /proc/pid/fd
        #利用 sar 報(bào)告磁盤(pán) I/O 信息DEV 正在監(jiān)視的塊設(shè)備 tps 每秒鐘物理設(shè)備的 I/O 傳輸總量 rd_sec/s 每秒從設(shè)備讀取的扇區(qū)數(shù)量 wr_sec/s 每秒向設(shè)備寫(xiě)入的扇區(qū)數(shù)量 avgrq-sz I/O 請(qǐng)求的平均扇區(qū)數(shù)#avgqu-sz I/O 請(qǐng)求的平均隊(duì)列長(zhǎng)度 await I/O 請(qǐng)求的平均等待時(shí)間,單位為毫秒 svctm I/O 請(qǐng)求的平均服務(wù)時(shí)間,單位為毫秒 %util I/O 請(qǐng)求所占用的時(shí)間的百分比,即設(shè)備利用率sar -pd 10 3
        #iotop top的io版iotop
        #查看頁(yè)面緩存信息 其中的Cached 指用于pagecache的內(nèi)存大?。╠iskcache-SwapCache)。隨著寫(xiě)入緩存頁(yè),Dirty 的值會(huì)增加 一旦開(kāi)始把緩存頁(yè)寫(xiě)入硬盤(pán),Writeback的值會(huì)增加直到寫(xiě)入結(jié)束。cat /proc/meminfo
        #查看有多少個(gè)pdflush進(jìn)程 Linux 用pdflush進(jìn)程把數(shù)據(jù)從緩存頁(yè)寫(xiě)入硬盤(pán)#pdflush的行為受/proc/sys/vm中的參數(shù)的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多長(zhǎng)時(shí)間喚醒pdflush將緩存頁(yè)數(shù)據(jù)寫(xiě)入硬盤(pán)。默認(rèn)5秒喚醒2個(gè)(更多個(gè))線程。如果wrteback的時(shí)間長(zhǎng)于dirty_writeback_centisecs的時(shí)間,可能會(huì)出問(wèn)題cat /proc/sys/vm/nr_pdflush_threads
        #查看I/O 調(diào)度器#調(diào)度算法#noop anticipatory deadline [cfq] #deadline : deadline 算法保證對(duì)既定的IO請(qǐng)求以最小的延遲時(shí)間。#anticipatory:有個(gè)IO發(fā)生后,如果又有進(jìn)程請(qǐng)求IO,則產(chǎn)生一個(gè)默認(rèn)6ms猜測(cè)時(shí)間,猜測(cè)下一個(gè)進(jìn)程請(qǐng)求IO是干什么。這對(duì)于隨機(jī)讀取會(huì)造成較大的延時(shí)。對(duì)數(shù)據(jù)庫(kù)應(yīng)用很糟糕,而對(duì)于Web Server等則會(huì)表現(xiàn)不錯(cuò)。#cfq: 對(duì)每個(gè)進(jìn)程維護(hù)一個(gè)IO隊(duì)列,各個(gè)進(jìn)程發(fā)來(lái)的IO請(qǐng)求會(huì)被cfq以輪循方式處理,對(duì)每一個(gè)IO請(qǐng)求都是公平。適合離散讀的應(yīng)用。#noop: 對(duì)所有IO請(qǐng)求都用FIFO隊(duì)列形式處理。默認(rèn)IO不會(huì)存在性能問(wèn)題。cat /sys/block/[disk]/queue/scheduler

        #改變IO調(diào)度器$ echo deadline > /sys/block/sdX/queue/scheduler#提高調(diào)度器請(qǐng)求隊(duì)列的$ echo 4096 > /sys/block/sdX/queue/nr_requests


        性能相關(guān)

        #查看當(dāng)前系統(tǒng)loaduptime
        #查看系統(tǒng)狀態(tài)和每個(gè)進(jìn)程的系統(tǒng)資源使用狀況top
        #可視化顯示CPU的使用狀況htop
        #查看每個(gè)CPU的負(fù)載信息mpstat -P ALL 1
        #每隔1秒查看磁盤(pán)IO的統(tǒng)計(jì)信息iostat -xkdz 1
        #每隔一秒查看虛擬內(nèi)存的使用信息vmstat 1
        #查看內(nèi)存使用統(tǒng)計(jì)信息free
        #查看網(wǎng)絡(luò)使用信息nicstat -z 1
        #類(lèi)似vmstat的顯示優(yōu)化的工具dstat 1
        #查看系統(tǒng)活動(dòng)狀態(tài),比如系統(tǒng)分頁(yè)統(tǒng)計(jì),塊設(shè)備IO統(tǒng)計(jì)等sar
        #網(wǎng)絡(luò)連接狀態(tài)查看netstat -s
        #進(jìn)程資源使用信息查看pidstat 1pidstat -d 1
        #查看某個(gè)進(jìn)程的系統(tǒng)調(diào)用信息 -p后面是進(jìn)程id,-tttT 進(jìn)程系統(tǒng)后的系統(tǒng)調(diào)用時(shí)間strace -tttT -p 12670#統(tǒng)計(jì)IO設(shè)備輸入輸出的系統(tǒng)調(diào)用信息strace -c dd if=/dev/zero of=/dev/null bs=512 count=1024k

        #tcpdump 查看網(wǎng)絡(luò)數(shù)據(jù)包tcpdump -nr /tmp/out.tcpdump
        #塊設(shè)備的讀寫(xiě)事件信息統(tǒng)計(jì)btrace /dev/sdb
        #iotop查看某個(gè)進(jìn)程的IO操作統(tǒng)計(jì)信息iotop -bod5
        #slabtop 查看內(nèi)核 slab內(nèi)存分配器的使用信息slabtop -sc
        #系統(tǒng)參數(shù)設(shè)置sysctl -a
        #系統(tǒng)性能指標(biāo)統(tǒng)計(jì)信息perf stat gzip file1#系統(tǒng)cpu活動(dòng)狀態(tài)查看perf record -a -g -F 997 sleep 10

        進(jìn)程相關(guān)

        ## processes  進(jìn)程管理
        ##ps查看當(dāng)前系統(tǒng)執(zhí)行的線程列表,進(jìn)行瞬間狀態(tài),不是連續(xù)狀態(tài),連續(xù)狀態(tài)需要使用top名稱(chēng)查看 更多常用參數(shù)請(qǐng)使用 man ps查看ps
        ##顯示所有進(jìn)程詳細(xì)信息ps aux
        ##-u 顯示某個(gè)用戶(hù)的進(jìn)程列表ps -f -u www-data
        ## -C 通過(guò)名字或者命令搜索進(jìn)程ps -C apache2
        ## --sort 根據(jù)進(jìn)程cpu使用率降序排列,查看前5個(gè)進(jìn)程 -pcpu表示降序 pcpu升序ps aux --sort=-pcpu | head -5
        ##-f 用樹(shù)結(jié)構(gòu)顯示進(jìn)程的層次關(guān)系,父子進(jìn)程情況下ps -f --forest -C apache2
        ##顯示一個(gè)父進(jìn)程的所有子進(jìn)程ps -o pid,uname,comm -C apache2ps --ppid 2359
        ##顯示一個(gè)進(jìn)程的所有線程 -L 參數(shù)ps -p 3150 -L
        ##顯示進(jìn)程的執(zhí)行時(shí)間 -o參數(shù)ps -e -o pid,comm,etime
        ##watch命令可以用來(lái)實(shí)時(shí)捕捉ps顯示進(jìn)程watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
        ##jobs 查看后臺(tái)運(yùn)行的進(jìn)程 jobs命令執(zhí)行的結(jié)果,+表示是一個(gè)當(dāng)前的作業(yè),減號(hào)表是是一個(gè)當(dāng)前作業(yè)之后的一個(gè)作業(yè),jobs -l選項(xiàng)可顯示所有任務(wù)的PID,jobs的狀態(tài)可以是running, stopped, Terminated,但是如果任務(wù)被終止了(kill),shell 從當(dāng)前的shell環(huán)境已知的列表中刪除任務(wù)的進(jìn)程標(biāo)識(shí);也就是說(shuō),jobs命令顯示的是當(dāng)前shell環(huán)境中所起的后臺(tái)正在運(yùn)行或者被掛起的任務(wù)信息jobs
        ##查看后臺(tái)運(yùn)營(yíng)的進(jìn)程號(hào)jobs -p
        ##查看現(xiàn)在被終止或者退出的進(jìn)程號(hào)jobs -n

        ##kill命令 終止一個(gè)前臺(tái)進(jìn)程可以使用Ctrl+C鍵 kill 通過(guò)top或者ps獲取進(jìn)程id號(hào) kill [-s 信號(hào) | -p ] [ -a ] 進(jìn)程號(hào) ...##發(fā)送指定的信號(hào)到相應(yīng)進(jìn)程。不指定型號(hào)將發(fā)送SIGTERM(15)終止指定進(jìn)程。關(guān)閉進(jìn)程號(hào)12的進(jìn)程kill 12

        ##等同于在前臺(tái)運(yùn)行PID為123的進(jìn)程時(shí)按下Ctrl+C鍵kill -2 123
        ##如果任無(wú)法終止該程序可用“-KILL” 參數(shù),其發(fā)送的信號(hào)為SIGKILL(9) ,將強(qiáng)制結(jié)束進(jìn)程 kill -9 123
        ##列出所有信號(hào)名稱(chēng)##HUP 1 終端斷線##INT 2 中斷(同 Ctrl + C)##QUIT 3 退出(同 Ctrl + \)##TERM 15 終止##KILL 9 強(qiáng)制終止##CONT 18 繼續(xù)(與STOP相反, fg/bg命令)##STOP 19 暫停(同 Ctrl + Z)kill -l
        ##得到指定信號(hào)的數(shù)值kill -l KILL
        ##殺死指定用戶(hù)所有進(jìn)程kill -u peidalinuxkill -9 $(ps -ef | grep peidalinux)
        ##將后臺(tái)中的命令調(diào)至前臺(tái)繼續(xù)運(yùn)行 將進(jìn)程123調(diào)至前臺(tái)執(zhí)行fg 123
        ##將一個(gè)在后臺(tái)暫停的命令,變成繼續(xù)執(zhí)行bg 123
        ##該命令可以在你退出帳戶(hù)/關(guān)閉終端之后繼續(xù)運(yùn)行相應(yīng)的進(jìn)程。nohup就是不掛起的意思 下面輸出被重定向到myout.file文件中nohup command > myout.file 2>&1 &
        ##at:計(jì)劃任務(wù),在特定的時(shí)間執(zhí)行某項(xiàng)工作,在特定的時(shí)間執(zhí)行一次。## 格式:at HH:MM YYYY-MM-DD //HH(小時(shí)):MM(分鐘) YYYY(年)-MM(月份)-DD(日)##HH[am pm]+D(天) days //HH(小時(shí))[am(上午)pm(下午)]+days(天)at 12:00(時(shí)間) //at命令設(shè)定12:00執(zhí)行一項(xiàng)操作#at>useradd aaa //在at命令里設(shè)定添加用戶(hù)aaa#ctrl+d //退出at命令#tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一個(gè)用戶(hù)aaa
        ##計(jì)劃任務(wù)設(shè)定后,在沒(méi)有執(zhí)行之前我們可以用atq命令來(lái)查看系統(tǒng)沒(méi)有執(zhí)行工作任務(wù)。atq
        ##啟動(dòng)計(jì)劃任務(wù)后,如果不想啟動(dòng)設(shè)定好的計(jì)劃任務(wù)可以使用atrm命令刪除。atrm 1 //刪除計(jì)劃任務(wù)1
        ##pstree命令:列出當(dāng)前的進(jìn)程,以及它們的樹(shù)狀結(jié)構(gòu) 格式:pstree [選項(xiàng)] [pid|user]pstree
        ##nice命令:改變程序執(zhí)行的優(yōu)先權(quán)等級(jí) 應(yīng)用程序優(yōu)先權(quán)值的范圍從-20~19,數(shù)字越小,優(yōu)先權(quán)就越高。一般情況下,普通應(yīng)用程序的優(yōu)先權(quán)值(CPU使用權(quán)值)都是0,如果讓常用程序擁有較高的優(yōu)先權(quán)等級(jí),自然啟動(dòng)和運(yùn)行速度都會(huì)快些。需要注意的是普通用戶(hù)只能在0~19之間調(diào)整應(yīng)用程序的優(yōu)先權(quán)值,只有超級(jí)用戶(hù)有權(quán)調(diào)整更高的優(yōu)先權(quán)值(從-20~19)。nice [-n <優(yōu)先等級(jí)>][--help][--version][命令]nice -n 5 ls
        ##sleep命令:使進(jìn)程暫停執(zhí)行一段時(shí)間date;sleep 1m;date

        ##renice命令 renice命令允許用戶(hù)修改一個(gè)正在運(yùn)行進(jìn)程的優(yōu)先權(quán)。利用renice命令可以在命令執(zhí)行時(shí)調(diào)整其優(yōu)先權(quán)。##其中,參數(shù)number與nice命令的number意義相同。(1) 用戶(hù)只能對(duì)自己所有的進(jìn)程使用renice命令。(2) root用戶(hù)可以在任何進(jìn)程上使用renice命令。(3) 只有root用戶(hù)才能提高進(jìn)程的優(yōu)先權(quán)renice -5 -p 5200 #PID為5200的進(jìn)程nice設(shè)為-5
        ##pmap命令用于顯示一個(gè)或多個(gè)進(jìn)程的內(nèi)存狀態(tài)。其報(bào)告進(jìn)程的地址空間和內(nèi)存狀態(tài)信息 #pmap PID pmap 20367

        javadump.sh

        #!/bin/sh
        DUMP_PIDS=`ps --no-heading -C java -f --width 1000 |awk '{print $2}'`if [ -z "$DUMP_PIDS" ]; then echo "The server $HOST_NAME is not started!" exit 1;fi
        DUMP_ROOT=~/dumpif [ ! -d $DUMP_ROOT ]; then mkdir $DUMP_ROOTfi
        DUMP_DATE=`date +%Y%m%d%H%M%S`DUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATEif [ ! -d $DUMP_DIR ]; then mkdir $DUMP_DIRfi
        for PID in $DUMP_PIDS ; do#Full thread dump 用來(lái)查線程占用,死鎖等問(wèn)題 $JAVA_HOME/bin/jstack $PID > $DUMP_DIR/jstack-$PID.dump 2>&1 echo -e ".\c"#打印出一個(gè)給定的Java進(jìn)程、Java core文件或遠(yuǎn)程Debug服務(wù)器的Java配置信息,具體包括Java系統(tǒng)屬性和JVM命令行參數(shù)。 $JAVA_HOME/bin/jinfo $PID > $DUMP_DIR/jinfo-$PID.dump 2>&1 echo -e ".\c"#jstat能夠動(dòng)態(tài)打印jvm(Java Virtual Machine Statistics Monitoring Tool)的相關(guān)統(tǒng)計(jì)信息。如young gc執(zhí)行的次數(shù)、full gc執(zhí)行的次數(shù),各個(gè)內(nèi)存分區(qū)的空間大小和可使用量等信息。 $JAVA_HOME/bin/jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil-$PID.dump 2>&1 echo -e ".\c" $JAVA_HOME/bin/jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity-$PID.dump 2>&1 echo -e ".\c"#未指定選項(xiàng)時(shí),jmap打印共享對(duì)象的映射。對(duì)每個(gè)目標(biāo)VM加載的共享對(duì)象,其起始地址、映射大小及共享對(duì)象文件的完整路徑將被打印出來(lái), $JAVA_HOME/bin/jmap $PID > $DUMP_DIR/jmap-$PID.dump 2>&1 echo -e ".\c"#-heap打印堆情況的概要信息,包括堆配置,各堆空間的容量、已使用和空閑情況 $JAVA_HOME/bin/jmap -heap $PID > $DUMP_DIR/jmap-heap-$PID.dump 2>&1 echo -e ".\c"#-dump將jvm的堆中內(nèi)存信息輸出到一個(gè)文件中,然后可以通過(guò)eclipse memory analyzer進(jìn)行分析#注意:這個(gè)jmap使用的時(shí)候jvm是處在假死狀態(tài)的,只能在服務(wù)癱瘓的時(shí)候?yàn)榱私鉀Q問(wèn)題來(lái)使用,否則會(huì)造成服務(wù)中斷。 $JAVA_HOME/bin/jmap -dump:format=b,file=$DUMP_DIR/jmap-dump-$PID.dump $PID 2>&1 echo -e ".\c"#顯示被進(jìn)程打開(kāi)的文件信息if [ -r /usr/sbin/lsof ]; then /usr/sbin/lsof -p $PID > $DUMP_DIR/lsof-$PID.dump echo -e ".\c" fidone#主要負(fù)責(zé)收集、匯報(bào)與存儲(chǔ)系統(tǒng)運(yùn)行信息的。if [ -r /usr/bin/sar ]; then/usr/bin/sar > $DUMP_DIR/sar.dumpecho -e ".\c"fi#主要負(fù)責(zé)收集、匯報(bào)與存儲(chǔ)系統(tǒng)運(yùn)行信息的。if [ -r /usr/bin/uptime ]; then/usr/bin/uptime > $DUMP_DIR/uptime.dumpecho -e ".\c"fi#內(nèi)存查看if [ -r /usr/bin/free ]; then/usr/bin/free -t > $DUMP_DIR/free.dumpecho -e ".\c"fi#可以得到關(guān)于進(jìn)程、內(nèi)存、內(nèi)存分頁(yè)、堵塞IO、traps及CPU活動(dòng)的信息。if [ -r /usr/bin/vmstat ]; then/usr/bin/vmstat > $DUMP_DIR/vmstat.dumpecho -e ".\c"fi#報(bào)告與CPU相關(guān)的一些統(tǒng)計(jì)信息if [ -r /usr/bin/mpstat ]; then/usr/bin/mpstat > $DUMP_DIR/mpstat.dumpecho -e ".\c"fi#報(bào)告與IO相關(guān)的一些統(tǒng)計(jì)信息if [ -r /usr/bin/iostat ]; then/usr/bin/iostat > $DUMP_DIR/iostat.dumpecho -e ".\c"fi#報(bào)告與網(wǎng)絡(luò)相關(guān)的一些統(tǒng)計(jì)信息if [ -r /bin/netstat ]; then/bin/netstat > $DUMP_DIR/netstat.dumpecho -e ".\c"fiecho "OK!"

        常用工具安裝

        #!/usr/bin/env bash
        # ---------------------------------------------------------------------------------# 控制臺(tái)顏色BLACK="\033[1;30m"RED="\033[1;31m"GREEN="\033[1;32m"YELLOW="\033[1;33m"BLUE="\033[1;34m"PURPLE="\033[1;35m"CYAN="\033[1;36m"RESET="$(tput sgr0)"# ---------------------------------------------------------------------------------
        printf "${BLUE}\n"cat << EOF#################################################################################### 安裝常用命令工具# 命令工具清單如下:# 核心工具:df、du、chkconfig# 網(wǎng)絡(luò)工具:ifconfig、netstat、route、iptables# IP工具:ip、ss、ping、tracepath、traceroute# DNS工具:dig、host、nslookup、whois# 端口工具:lsof、nc、telnet# 下載工具:curl、wget# 編輯工具:emacs、vim# 流量工具:iftop、nethogs# 抓包工具:tcpdump# 壓縮工具:unzip、zip# 版本控制工具:git、subversion####################################################################################EOFprintf "${RESET}\n"
        printf "\n${GREEN}>>>>>>>>> 安裝常用命令工具開(kāi)始${RESET}\n"
        # 核心工具printf "\n${CYAN}>>>> install coreutils(df、du)${RESET}\n"yum install -y coreutilsprintf "\n${CYAN}>>>> install chkconfig${RESET}\n"yum install -y chkconfig
        # 網(wǎng)絡(luò)工具printf "\n${CYAN}>>>> install net-tools(ifconfig、netstat、route)${RESET}\n"yum install -y net-toolsprintf "\n${CYAN}>>>> install iptables${RESET}\n"yum install -y iptables
        # IP工具printf "\n${CYAN}>>>> install iputils(ping、tracepath)${RESET}\n"yum install -y iputilsprintf "\n${CYAN}>>>> install traceroute${RESET}\n"yum install -y tracerouteprintf "\n${CYAN}>>>> install iproute(ip、ss)${RESET}\n"yum install -y iproute
        # 端口工具printf "\n${CYAN}>>>> install lsof${RESET}\n"yum install -y lsofprintf "\n${CYAN}>>>> install nc${RESET}\n"yum install -y ncprintf "\n${CYAN}>>>> install netstat${RESET}\n"yum install -y netstat
        # DNS工具printf "\n${CYAN}>>>> install bind-utils(dig、host、nslookup)${RESET}\n"yum install -y bind-utilsprintf "\n${CYAN}>>>> install whois${RESET}\n"yum install -y whois
        # 下載工具printf "\n${CYAN}>>>> install curl${RESET}\n"yum install -y curlprintf "\n${CYAN}>>>> install wget${RESET}\n"yum install -y wget
        # 編輯工具printf "\n${CYAN}>>>> install emacs${RESET}\n"yum install -y emacsprintf "\n${CYAN}>>>> install vim${RESET}\n"yum install -y vim
        # 流量工具printf "\n${CYAN}>>>> install iftop${RESET}\n"yum install -y iftopprintf "\n${CYAN}>>>> install nethogs${RESET}\n"yum install -y nethogs
        # 抓包工具printf "\n${CYAN}>>>> install tcpdump${RESET}\n"yum install -y tcpdump
        # 壓縮工具printf "\n${CYAN}>>>> install unzip${RESET}\n"yum install -y unzip
        # 版本控制工具printf "\n${CYAN}>>>> install git${RESET}\n"yum install -y gitprintf "\n${CYAN}>>>> install subversion${RESET}\n"yum install -y subversion
        printf "\n${GREEN}<<<<<<<< 安裝常用命令工具結(jié)束${RESET}\n"

        常用lib庫(kù)安裝

        #!/usr/bin/env bash
        # ---------------------------------------------------------------------------------# 控制臺(tái)顏色BLACK="\033[1;30m"RED="\033[1;31m"GREEN="\033[1;32m"YELLOW="\033[1;33m"BLUE="\033[1;34m"PURPLE="\033[1;35m"CYAN="\033[1;36m"RESET="$(tput sgr0)"# ---------------------------------------------------------------------------------
        printf "${BLUE}\n"cat << EOF#################################################################################### 安裝常見(jiàn) lib# 如果不知道命令在哪個(gè) lib,可以使用 yum search xxx 來(lái)查找# lib 清單如下:# gcc gcc-c++ kernel-devel libtool# openssl openssl-devel# zlib zlib-devel# pcre###################################################################################EOFprintf "${RESET}\n"
        printf "\n${GREEN}>>>>>>>>> 安裝常見(jiàn) lib 開(kāi)始${RESET}\n"
        printf "\n${CYAN}>>>> install gcc gcc-c++ kernel-devel libtool${RESET}\n"yum -y install make gcc gcc-c++ kernel-devel libtool
        printf "\n${CYAN}>>>> install openssl openssl-devel${RESET}\n"yum -y install make openssl openssl-devel
        printf "\n${CYAN}>>>> install zlib zlib-devel${RESET}\n"yum -y install make zlib zlib-devel
        printf "\n${CYAN}>>>> install pcre${RESET}\n"yum -y install pcre
        printf "\n${GREEN}<<<<<<<< 安裝常見(jiàn) lib 結(jié)束${RESET}\n"

        系統(tǒng)檢查腳本

        #!/usr/bin/env bash
        ############################################################################### console colorC_RESET="$(tput sgr0)"C_BLACK="\033[1;30m"C_RED="\033[1;31m"C_GREEN="\033[1;32m"C_YELLOW="\033[1;33m"C_BLUE="\033[1;34m"C_PURPLE="\033[1;35m"C_CYAN="\033[1;36m"C_WHITE="\033[1;37m"##############################################################################
        printf "${C_PURPLE}"cat << EOF#################################################################################### 系統(tǒng)信息檢查腳本###################################################################################EOFprintf "${C_RESET}"
        [[ $(id -u) -gt 0 ]] && echo "請(qǐng)用root用戶(hù)執(zhí)行此腳本!" && exit 1sysversion=$(rpm -q centos-release | cut -d- -f3)double_line="==============================================================="line="----------------------------------------------"
        # 打印頭部信息printHeadInfo() { cat << EOF+---------------------------------------------------------------------------------+| 歡迎使用 【系統(tǒng)信息檢查腳本】 |+---------------------------------------------------------------------------------+EOF}
        # 打印尾部信息printFootInfo() { cat << EOF+---------------------------------------------------------------------------------+| 腳本執(zhí)行結(jié)束,感謝使用!|+---------------------------------------------------------------------------------+EOF}
        options=( "獲取系統(tǒng)信息" "獲取服務(wù)信息" "獲取CPU信息" "獲取系統(tǒng)網(wǎng)絡(luò)信息" "獲取系統(tǒng)內(nèi)存信息" "獲取系統(tǒng)磁盤(pán)信息" "獲取CPU/內(nèi)存占用TOP10" "獲取系統(tǒng)用戶(hù)信息" "輸出所有信息" "退出" )printMenu() { printf "${C_BLUE}" printf "主菜單:\n" for i in "${!options[@]}"; do index=`expr ${i} + 1` val=`expr ${index} % 2` printf "\t(%02d) %-30s" "${index}" "${options[$i]}" if [[ ${val} -eq 0 ]]; then printf "\n" fi done printf "${C_BLUE}請(qǐng)輸入需要執(zhí)行的指令:\n" printf "${C_RESET}"}
        # 獲取系統(tǒng)信息get_systatus_info() { sys_os=$(uname -o) sys_release=$(cat /etc/redhat-release) sys_kernel=$(uname -r) sys_hostname=$(hostname) sys_selinux=$(getenforce) sys_lang=$(echo $LANG) sys_lastreboot=$(who -b | awk '{print $3,$4}') sys_runtime=$(uptime | awk '{print $3,$4}' | cut -d, -f1) sys_time=$(date) sys_load=$(uptime | cut -d: -f5)
        cat << EOF【系統(tǒng)信息】系統(tǒng): ${sys_os}發(fā)行版本: ${sys_release}系統(tǒng)內(nèi)核: ${sys_kernel}主機(jī)名: ${sys_hostname}selinux狀態(tài): ${sys_selinux}系統(tǒng)語(yǔ)言: ${sys_lang}系統(tǒng)當(dāng)前時(shí)間: ${sys_time}系統(tǒng)最后重啟時(shí)間: ${sys_lastreboot}系統(tǒng)運(yùn)行時(shí)間: ${sys_runtime}系統(tǒng)負(fù)載: ${sys_load}EOF}
        # 獲取CPU信息get_cpu_info() { Physical_CPUs=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l) Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l) CPU_Kernels=$(grep "cores" /proc/cpuinfo | uniq | awk -F ': ' '{print $2}') CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq) CPU_Arch=$(uname -m) cat << EOF【CPU信息】物理CPU個(gè)數(shù):$Physical_CPUs邏輯CPU個(gè)數(shù):$Virt_CPUs每CPU核心數(shù):$CPU_KernelsCPU型號(hào):$CPU_TypeCPU架構(gòu):$CPU_ArchEOF}
        # 獲取服務(wù)信息get_service_info() { port_listen=$(netstat -lntup | grep -v "Active Internet") kernel_config=$(sysctl -p 2> /dev/null) if [[ ${sysversion} -gt 6 ]]; then service_config=$(systemctl list-unit-files --type=service --state=enabled | grep "enabled") run_service=$(systemctl list-units --type=service --state=running | grep ".service") else service_config=$(/sbin/chkconfig | grep -E ":on|:啟用" | column -t) run_service=$(/sbin/service --status-all | grep -E "running") fi cat << EOF【服務(wù)信息】${service_config} ${line}運(yùn)行的服務(wù):${run_service} ${line}監(jiān)聽(tīng)端口:${port_listen} ${line}內(nèi)核參考配置:${kernel_config}EOF}
        # 獲取系統(tǒng)內(nèi)存信息get_mem_info() { check_mem=$(free -m) MemTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}') #KB MemFree=$(grep MemFree /proc/meminfo | awk '{print $2}') #KB let MemUsed=MemTotal-MemFree MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}") report_MemTotal="$((MemTotal/1024))" "MB" #內(nèi)存總?cè)萘?MB) report_MemFree="$((MemFree/1024))" "MB" #內(nèi)存剩余(MB) report_MemUsedPercent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
        cat << EOF【內(nèi)存信息】內(nèi)存總?cè)萘?MB): ${report_MemTotal}內(nèi)存剩余量(MB):${report_MemFree}內(nèi)存使用率: ${report_MemUsedPercent}EOF}
        # 獲取系統(tǒng)網(wǎng)絡(luò)信息get_net_info() { pri_ipadd=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}') pub_ipadd=$(curl ifconfig.me -s) gateway=$(ip route | grep default | awk '{print $3}') mac_info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}') dns_config=$(egrep -v "^$|^#" /etc/resolv.conf) route_info=$(route -n) cat << EOF【網(wǎng)絡(luò)信息】系統(tǒng)公網(wǎng)地址:${pub_ipadd}系統(tǒng)私網(wǎng)地址:${pri_ipadd}網(wǎng)關(guān)地址:${gateway}MAC地址:${mac_info}路由信息:${route_info}DNS 信息:${dns_config}EOF}
        # 獲取系統(tǒng)磁盤(pán)信息get_disk_info() { disk_info=$(fdisk -l | grep "Disk /dev" | cut -d, -f1) disk_use=$(df -hTP | awk '$2!="tmpfs"{print}') disk_percent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/') disk_inode=$(df -hiP | awk '$1!="tmpfs"{print}')
        cat << EOF【磁盤(pán)信息】${disk_info}磁盤(pán)使用: ${disk_use}磁盤(pán)使用百分比: ${disk_percent}inode信息: ${disk_inode}EOF}
        # 獲取系統(tǒng)用戶(hù)信息get_sys_user() { login_user=$(awk -F: '{if ($NF=="/bin/bash") print $0}' /etc/passwd) ssh_config=$(egrep -v "^#|^$" /etc/ssh/sshd_config) sudo_config=$(egrep -v "^#|^$" /etc/sudoers | grep -v "^Defaults") host_config=$(egrep -v "^#|^$" /etc/hosts) crond_config=$(for cronuser in /var/spool/cron/*; do ls ${cronuser} 2> /dev/null | cut -d/ -f5; egrep -v "^$|^#" ${cronuser} 2> /dev/null; echo ""; done) cat << EOF【用戶(hù)信息】系統(tǒng)登錄用戶(hù):${login_user} ${line}ssh 配置信息:${ssh_config} ${line}sudo 配置用戶(hù):${sudo_config} ${line}定時(shí)任務(wù)配置:${crond_config} ${line}hosts 信息:${host_config}EOF}
        # 獲取CPU/內(nèi)存占用TOP10get_process_top_info() {
        top_title=$(top -b n1 | head -7 | tail -1) cpu_top10=$(top -b n1 | head -17 | tail -11) mem_top10=$(top -b n1 | head -17 | tail -10 | sort -k10 -r)
        cat << EOF【TOP10】CPU占用TOP10:${cpu_top10}內(nèi)存占用TOP10:${top_title} ${mem_top10}EOF}
        show_dead_process() { printf "僵尸進(jìn)程:\n" ps -al | gawk '{print $2,$4}' | grep Z}
        get_all_info() { get_systatus_info echo ${double_line} get_service_info echo ${double_line} get_cpu_info echo ${double_line} get_net_info echo ${double_line} get_mem_info echo ${double_line} get_disk_info echo ${double_line} get_process_top_info echo ${double_line} get_sys_user}
        main() { while [[ 1 ]] do printMenu read option local index=$[ ${option} - 1 ] case ${options[${index}]} in "獲取系統(tǒng)信息") get_systatus_info ;; "獲取服務(wù)信息") get_service_info ;; "獲取CPU信息") get_cpu_info ;; "獲取系統(tǒng)網(wǎng)絡(luò)信息") get_net_info ;; "獲取系統(tǒng)內(nèi)存信息") get_mem_info ;; "獲取系統(tǒng)磁盤(pán)信息") get_disk_info ;; "獲取CPU/內(nèi)存占用TOP10") get_process_top_info ;; "獲取系統(tǒng)用戶(hù)信息") get_sys_user ;; "輸出所有信息") get_all_info > sys.log printf "${C_GREEN}信息已經(jīng)輸出到 sys.log 中。${C_RESET}\n\n" ;; "退出") exit ;; *) clear echo "抱歉,不支持此選項(xiàng)" ;; esac done}
        ######################################## MAIN ########################################printHeadInfomainprintFootInfoprintf "${C_RESET}"


        sed進(jìn)階

        #!/bin/bash
        #多個(gè)空格只保留一個(gè)#sed '/./,/^$/!d' test
        #刪除開(kāi)頭的空白行#sed '/./,$!d' test
        #刪除結(jié)尾的空白行sed '{:start/^\n*$/{$d; N; b start}}' test
        #刪除html標(biāo)簽#有問(wèn)題#s/<.*>//g
        #sed 's/<[^>]*>//g' test1
        #sed 's/<[^>]*>//g;/^$/d' test1

        #and符號(hào),代表替換命令中的匹配模式,不管預(yù)定義模式是什么文本,都可以用and符號(hào)替換,and符號(hào)會(huì)提取匹配替換命令中指定替換模式中的所有字符串echo "The cat sleeps in his hat" | sed 's/.at/"&"/g'
        #替換單獨(dú)的單詞echo "The System Administrator manual" | sed 's/\(System\) Administrator/\1 user/'
        #在長(zhǎng)數(shù)字中插入逗號(hào)echo "1234567" | sed '{:start; s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/; t start}'
        #給文件中的行編號(hào)sed '=' test | sed 'N; s/\n/ /'

        10T 技術(shù)資源大放送!包括但不限于:Linux、虛擬化、容器、云計(jì)算、網(wǎng)絡(luò)、Python、Go 等。在開(kāi)源Linux公眾號(hào)內(nèi)回復(fù)「10T」,即可免費(fèi)獲取!

        推薦閱讀:

        shell編程100例(附PDF下載)
        IPv6技術(shù)白皮書(shū)(附PDF下載)
        Linux主流發(fā)行版本配置IP總結(jié)(Ubuntu、CentOS、Redhat、Suse)
        批量安裝Windows系統(tǒng)
        無(wú)人值守批量安裝服務(wù)器
        運(yùn)維必備的《網(wǎng)絡(luò)端口大全》,看這一份就夠了。
        收藏:服務(wù)器和存儲(chǔ)知識(shí)入門(mén)
        什么叫SSH?原理詳解,看這一篇就夠了!
        Nginx面試40問(wèn)(收藏吃灰)
        20 個(gè) Linux 服務(wù)器性能調(diào)優(yōu)技巧
        超詳細(xì)!一文帶你了解LVS四層負(fù)載均衡企業(yè)級(jí)實(shí)踐!
        收藏 | Linux系統(tǒng)日志位置及包含的日志內(nèi)容介紹
        100 道 Linux 常見(jiàn)面試題,建議收藏,慢慢讀~
        服務(wù)器12種基本故障+排查方法
        IT運(yùn)維管理常用工具大全,讓你成為真正的高手
        什么是QoS?

        Linux學(xué)習(xí)指南

        有收獲,點(diǎn)個(gè)在看 

        瀏覽 52
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产另类久久 | 操逼网大全| 国产成人无码视频观看免费 | 国产美女特级嫩嫩嫩BBB | 成人无码一级A片在线观看 | 免费又黄又爽视频 | 国产成人精品一区二三区熟女在线 | www一级片 | 精品国产女主播 | 中国老妇人性爱网站 |