網(wǎng)站建設進度表怎么做看廣告收益最高的軟件
Linux實用運維腳本分享🍃
MySQL備份
目錄備份
PING查詢
磁盤IO檢查
性能相關
進程相關
javadump.sh
常用工具安裝
常用lib庫安裝
系統(tǒng)檢查腳本
sed進階
MySQL備份
#!/bin/bashset -eUSER="backup" PASSWORD="backup" # 數(shù)據(jù)庫數(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 $dbsdolocal backup_dir=$BACKUP_DIR"/full/"$dblocal filename=$db"."$DATElocal backup_file=$backup_dir"/"$filename".sql"if [ ! -d $backup_dir ]thenmkdir -p $backup_dir || { error "創(chuàng)建數(shù)據(jù)庫 $db 全量備份目錄 $backup_dir 失敗"; continue; }note "數(shù)據(jù)庫 $db 全量備份目錄 $backup_dir 不存在,創(chuàng)建完成";finote "full backup $db start ..."mysqldump --user=${USER} --password=${PASSWORD} --flush-logs --skip-lock-tables --quick $db > $backup_file || { warning "數(shù)據(jù)庫 $db 備份失敗"; continue; }cd $backup_dirtar -cPzf $filename".tar.gz" $filename".sql"rm -f $backup_filechown -fR mysql:mysql $backup_dirnote "數(shù)據(jù)庫 $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 $filenamedofor db in $dbsdolocal backup_dir=$BACKUP_DIR"/increment/"$dblocal filename=$db"."$TIMElocal backup_file=$backup_dir"/"$filename".sql"if [ ! -d $backup_dir ]thenmkdir -p $backup_dir || { error "創(chuàng)建數(shù)據(jù)庫 $db 增量備份目錄 $backup_dir 失敗"; continue; }note "數(shù)據(jù)庫 $db 增量備份目錄 $backup_dir 不存在,創(chuàng)建完成";finote "increment backup $db form time $StartTime start ..."mysqlbinlog -d $db --start-datetime="$StartTime" $DATA_DIR/$i >> $backup_file || { warning "數(shù)據(jù)庫 $db 備份失敗"; continue; }note "increment backup $db end."donedonefor db in $dbsdolocal backup_dir=$BACKUP_DIR"/increment/"$dblocal filename=$db"."$TIMElocal backup_file=$backup_dir"/"$filename".sql"cd $backup_dirtar -cPzf $filename".tar.gz" $filename".sql"rm -f $backup_filenote "數(shù)據(jù)庫 $db 備份成功";done }case "$1" infull)full_backup;;increment)increment_backup;;*)exit 2;; esacexit 1
目錄備份
#!/bin/bash # # # 時間 DATE=$(date '+%Y-%m-%d_%H_%M_%S') # 備份目錄 BACKUPDIR="/home/backups" # 需要備份的目錄 SORFILE=/opt # 目標文件名 DESFILE=/home/backups/$SORFILE.$(date '+%Y-%m-%d_%H_%M_%S').zip[ ! -d $BACKUPDIR ] && mkdir -p $BACKUPDIR cd $BACKUPDIRecho "start backup $SORFILE ..." sleep 3 #echo "$DESFILE"#tar cvf $DESFILE $SORFILE #gzip -f .zip $DESFILE zip -r $DESFILE $SORFILE &>/dev/null if [ "$?" == "0" ] thenecho $(date +%Y-%m-%d)" zip sucess">>backup.log elseecho $(date +%Y-%m-%d)" zip failed">>backup.logexit 0 fi# 刪除3天前的備份 find $BACKUPDIR -type f -ctime +3 | xargs rm -rf
PING查詢
#!/bin/bash #用途:根據(jù)網(wǎng)絡配置對網(wǎng)絡地址192.168.0進行修改,檢查是否是活動狀態(tài)#{start..end}shell擴展生成一組地址 for ip in 192.168.0.{1..255} do (ping $ip -c 2 &> /dev/null # > 標準輸出重定向,和1>一致# 2>&1 將標準錯誤輸出 重定向 到標準輸出# &>file 將標準輸出和標準錯誤輸出都重定向到文件filename中if [ $? -eq 0 ];thenecho $ip is alivefi)& done wait #并行ping,加速
磁盤IO檢查
##iostat是查看磁盤活動統(tǒng)計情況##顯示所有設備負載情況 r/s:??每秒完成的讀 I/O 設備次數(shù)。即 rio/s;w/s:??每秒完成的寫 I/O 設備次數(shù)。即 wio/s等
iostat?##每隔2秒刷新磁盤IO信息,并且每次顯示3次
iostat?2?3#顯示某個磁盤的IO信息
iostat?-d?sda1##顯示tty和cpu信息
iostat?-t##以M為單位顯示磁盤IO信息
iostat?-m##查看TPS和吞吐量信息? kB_read/s:每秒從設備(drive expressed)讀取的數(shù)據(jù)量;kB_wrtn/s:每秒向設備(drive expressed)寫入的數(shù)據(jù)量;kB_read:讀取的總數(shù)據(jù)量;kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量;
iostat?-d?-k?1?1#查看設備使用率(%util)、響應時間(await)
iostat?-d?-x?-k?1?1#查看CPU狀態(tài)
iostat?-c?1?3#統(tǒng)計進程(pid)的stat,進程的stat自然包括進程的IO狀況
pidstat#只顯示IO
pidstat?-d??1?#-d?IO?信息,-r?缺頁及內(nèi)存信息-u?CPU使用率-t?以線程為統(tǒng)計單位1??1秒統(tǒng)計一次
pidstat?-u?-r?-d?-t?1#文件級IO分析,查看當前文件由哪些進程打開
lsof???
ls?/proc/pid/fd#利用?sar?報告磁盤?I/O?信息DEV?正在監(jiān)視的塊設備?tps?每秒鐘物理設備的?I/O?傳輸總量?rd_sec/s?每秒從設備讀取的扇區(qū)數(shù)量?wr_sec/s?每秒向設備寫入的扇區(qū)數(shù)量?avgrq-sz?I/O?請求的平均扇區(qū)數(shù)
#avgqu-sz?I/O?請求的平均隊列長度?await?I/O?請求的平均等待時間,單位為毫秒?svctm?I/O?請求的平均服務時間,單位為毫秒?%util?I/O?請求所占用的時間的百分比,即設備利用率
sar?-pd?10?3?#iotop??top的io版
iotop#查看頁面緩存信息?其中的Cached 指用于pagecache的內(nèi)存大小(diskcache-SwapCache)。隨著寫入緩存頁,Dirty 的值會增加?一旦開始把緩存頁寫入硬盤,Writeback的值會增加直到寫入結(jié)束。
cat?/proc/meminfo?#查看有多少個pdflush進程?Linux?用pdflush進程把數(shù)據(jù)從緩存頁寫入硬盤
#pdflush的行為受/proc/sys/vm中的參數(shù)的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多長時間喚醒pdflush將緩存頁數(shù)據(jù)寫入硬盤。默認5秒喚醒2個(更多個)線程。如果wrteback的時間長于dirty_writeback_centisecs的時間,可能會出問題
cat?/proc/sys/vm/nr_pdflush_threads#查看I/O?調(diào)度器
#調(diào)度算法
#noop?anticipatory?deadline?[cfq]?
#deadline :??? deadline 算法保證對既定的IO請求以最小的延遲時間。
#anticipatory:有個IO發(fā)生后,如果又有進程請求IO,則產(chǎn)生一個默認6ms猜測時間,猜測下一個進程請求IO是干什么。這對于隨機讀取會造成較大的延時。對數(shù)據(jù)庫應用很糟糕,而對于Web Server等則會表現(xiàn)不錯。
#cfq:????????對每個進程維護一個IO隊列,各個進程發(fā)來的IO請求會被cfq以輪循方式處理,對每一個IO請求都是公平。適合離散讀的應用。
#noop:????????對所有IO請求都用FIFO隊列形式處理。默認IO不會存在性能問題。
cat?/sys/block/[disk]/queue/scheduler#改變IO調(diào)度器
$?echo?deadline?>?/sys/block/sdX/queue/scheduler
#提高調(diào)度器請求隊列的
$?echo?4096?>?/sys/block/sdX/queue/nr_requests
性能相關
#查看當前系統(tǒng)load
uptime#查看系統(tǒng)狀態(tài)和每個進程的系統(tǒng)資源使用狀況
top#可視化顯示CPU的使用狀況
htop#查看每個CPU的負載信息
mpstat?-P?ALL?1#每隔1秒查看磁盤IO的統(tǒng)計信息
iostat?-xkdz?1#每隔一秒查看虛擬內(nèi)存的使用信息
vmstat?1#查看內(nèi)存使用統(tǒng)計信息
free#查看網(wǎng)絡使用信息
nicstat?-z?1#類似vmstat的顯示優(yōu)化的工具
dstat?1#查看系統(tǒng)活動狀態(tài),比如系統(tǒng)分頁統(tǒng)計,塊設備IO統(tǒng)計等
sar#網(wǎng)絡連接狀態(tài)查看
netstat?-s#進程資源使用信息查看
pidstat?1
pidstat?-d?1#查看某個進程的系統(tǒng)調(diào)用信息?-p后面是進程id,-tttT?進程系統(tǒng)后的系統(tǒng)調(diào)用時間
strace?-tttT?-p?12670
#統(tǒng)計IO設備輸入輸出的系統(tǒng)調(diào)用信息
strace?-c?dd?if=/dev/zero?of=/dev/null?bs=512?count=1024k#tcpdump?查看網(wǎng)絡數(shù)據(jù)包
tcpdump?-nr?/tmp/out.tcpdump#塊設備的讀寫事件信息統(tǒng)計
btrace?/dev/sdb?#iotop查看某個進程的IO操作統(tǒng)計信息
iotop?-bod5#slabtop?查看內(nèi)核?slab內(nèi)存分配器的使用信息
slabtop?-sc#系統(tǒng)參數(shù)設置
sysctl?-a#系統(tǒng)性能指標統(tǒng)計信息
perf?stat?gzip?file1
#系統(tǒng)cpu活動狀態(tài)查看
perf?record?-a?-g?-F?997?sleep?10
進程相關
##?processes??進程管理##ps查看當前系統(tǒng)執(zhí)行的線程列表,進行瞬間狀態(tài),不是連續(xù)狀態(tài),連續(xù)狀態(tài)需要使用top名稱查看??更多常用參數(shù)請使用?man?ps查看
ps##顯示所有進程詳細信息
ps?aux##-u?顯示某個用戶的進程列表
ps?-f?-u?www-data?##?-C?通過名字或者命令搜索進程
ps?-C?apache2##?--sort??根據(jù)進程cpu使用率降序排列,查看前5個進程??-pcpu表示降序??pcpu升序
ps?aux?--sort=-pcpu?|?head?-5?##-f?用樹結(jié)構(gòu)顯示進程的層次關系,父子進程情況下
ps?-f?--forest?-C?apache2?##顯示一個父進程的所有子進程
ps?-o?pid,uname,comm?-C?apache2
ps?--ppid?2359?##顯示一個進程的所有線程??-L?參數(shù)
ps?-p?3150?-L?##顯示進程的執(zhí)行時間?-o參數(shù)
ps?-e?-o?pid,comm,etime?##watch命令可以用來實時捕捉ps顯示進程
watch?-n?1?'ps?-e?-o?pid,uname,cmd,pmem,pcpu?--sort=-pmem,-pcpu?|?head?-15'?##jobs 查看后臺運行的進程? jobs命令執(zhí)行的結(jié)果,+表示是一個當前的作業(yè),減號表是是一個當前作業(yè)之后的一個作業(yè),jobs -l選項可顯示所有任務的PID,jobs的狀態(tài)可以是running, stopped, Terminated,但是如果任務被終止了(kill),shell 從當前的shell環(huán)境已知的列表中刪除任務的進程標識;也就是說,jobs命令顯示的是當前shell環(huán)境中所起的后臺正在運行或者被掛起的任務信息
jobs##查看后臺運營的進程號
jobs?-p##查看現(xiàn)在被終止或者退出的進程號
jobs?-n##kill命令?終止一個前臺進程可以使用Ctrl+C鍵???kill??通過top或者ps獲取進程id號??kill?[-s?信號?|?-p?]?[?-a?]?進程號?...
##發(fā)送指定的信號到相應進程。不指定型號將發(fā)送SIGTERM(15)終止指定進程。關閉進程號12的進程
kill?12##等同于在前臺運行PID為123的進程時按下Ctrl+C鍵
kill?-2?123##如果任無法終止該程序可用“-KILL”?參數(shù),其發(fā)送的信號為SIGKILL(9)?,將強制結(jié)束進程??
kill?-9?123##列出所有信號名稱
##HUP????1????終端斷線
##INT?????2????中斷(同?Ctrl?+?C)
##QUIT????3????退出(同?Ctrl?+?\)
##TERM???15????終止
##KILL????9????強制終止
##CONT???18????繼續(xù)(與STOP相反,?fg/bg命令)
##STOP????19????暫停(同?Ctrl?+?Z)
kill?-l##得到指定信號的數(shù)值
kill?-l?KILL##殺死指定用戶所有進程
kill?-u?peidalinux
kill?-9?$(ps?-ef?|?grep?peidalinux)?##將后臺中的命令調(diào)至前臺繼續(xù)運行??將進程123調(diào)至前臺執(zhí)行
fg?123##將一個在后臺暫停的命令,變成繼續(xù)執(zhí)行
bg??123##該命令可以在你退出帳戶/關閉終端之后繼續(xù)運行相應的進程。nohup就是不掛起的意思??下面輸出被重定向到myout.file文件中
nohup?command?>?myout.file?2>&1?&##at:計劃任務,在特定的時間執(zhí)行某項工作,在特定的時間執(zhí)行一次。
##?格式:at HH:MM YYYY-MM-DD //HH(小時):MM(分鐘) YYYY(年)-MM(月份)-DD(日)
##HH[am?pm]+D(天)?days?//HH(小時)[am(上午)pm(下午)]+days(天)
at?12:00(時間)?//at命令設定12:00執(zhí)行一項操作
#at>useradd?aaa?//在at命令里設定添加用戶aaa
#ctrl+d?//退出at命令
#tail?-f?/etc/passwd?//查看/etc/passwd文件后十行是否增加了一個用戶aaa##計劃任務設定后,在沒有執(zhí)行之前我們可以用atq命令來查看系統(tǒng)沒有執(zhí)行工作任務。
atq##啟動計劃任務后,如果不想啟動設定好的計劃任務可以使用atrm命令刪除。
atrm?1?//刪除計劃任務1##pstree命令:列出當前的進程,以及它們的樹狀結(jié)構(gòu)??格式:pstree [選項]?[pid|user]
pstree##nice命令:改變程序執(zhí)行的優(yōu)先權(quán)等級?應用程序優(yōu)先權(quán)值的范圍從-20~19,數(shù)字越小,優(yōu)先權(quán)就越高。一般情況下,普通應用程序的優(yōu)先權(quán)值(CPU使用權(quán)值)都是0,如果讓常用程序擁有較高的優(yōu)先權(quán)等級,自然啟動和運行速度都會快些。需要注意的是普通用戶只能在0~19之間調(diào)整應用程序的優(yōu)先權(quán)值,只有超級用戶有權(quán)調(diào)整更高的優(yōu)先權(quán)值(從-20~19)。
nice?[-n?<優(yōu)先等級>][--help][--version][命令]
nice?-n?5?ls##sleep命令:使進程暫停執(zhí)行一段時間
date;sleep?1m;date##renice命令 renice命令允許用戶修改一個正在運行進程的優(yōu)先權(quán)。利用renice命令可以在命令執(zhí)行時調(diào)整其優(yōu)先權(quán)。
##其中,參數(shù)number與nice命令的number意義相同。(1)?用戶只能對自己所有的進程使用renice命令。(2) root用戶可以在任何進程上使用renice命令。(3)?只有root用戶才能提高進程的優(yōu)先權(quán)
renice?-5?-p?5200??#PID為5200的進程nice設為-5?##pmap命令用于顯示一個或多個進程的內(nèi)存狀態(tài)。其報告進程的地址空間和內(nèi)存狀態(tài)信息?#pmap PID
pmap?20367
javadump.sh
#!/bin/shDUMP_PIDS=`ps??--no-heading?-C?java?-f?--width?1000?|awk?'{print?$2}'`
if?[?-z?"$DUMP_PIDS"?];?thenecho?"The?server?$HOST_NAME?is?not?started!"exit?1;
fiDUMP_ROOT=~/dump
if?[?!?-d?$DUMP_ROOT?];?thenmkdir?$DUMP_ROOT
fiDUMP_DATE=`date?+%Y%m%d%H%M%S`
DUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATE
if?[?!?-d?$DUMP_DIR?];?thenmkdir?$DUMP_DIR
fifor?PID?in?$DUMP_PIDS?;?do
#Full?thread?dump?用來查線程占用,死鎖等問題$JAVA_HOME/bin/jstack?$PID?>?$DUMP_DIR/jstack-$PID.dump?2>&1echo?-e?".\c"
#打印出一個給定的Java進程、Java core文件或遠程Debug服務器的Java配置信息,具體包括Java系統(tǒng)屬性和JVM命令行參數(shù)。$JAVA_HOME/bin/jinfo?$PID?>?$DUMP_DIR/jinfo-$PID.dump?2>&1echo?-e?".\c"
#jstat能夠動態(tài)打印jvm(Java Virtual Machine Statistics Monitoring Tool)的相關統(tǒng)計信息。如young gc執(zhí)行的次數(shù)、full gc執(zhí)行的次數(shù),各個內(nèi)存分區(qū)的空間大小和可使用量等信息。$JAVA_HOME/bin/jstat?-gcutil?$PID?>?$DUMP_DIR/jstat-gcutil-$PID.dump?2>&1echo?-e?".\c"$JAVA_HOME/bin/jstat?-gccapacity?$PID?>?$DUMP_DIR/jstat-gccapacity-$PID.dump?2>&1echo?-e?".\c"
#未指定選項時,jmap打印共享對象的映射。對每個目標VM加載的共享對象,其起始地址、映射大小及共享對象文件的完整路徑將被打印出來,??$JAVA_HOME/bin/jmap?$PID?>?$DUMP_DIR/jmap-$PID.dump?2>&1echo?-e?".\c"
#-heap打印堆情況的概要信息,包括堆配置,各堆空間的容量、已使用和空閑情況??$JAVA_HOME/bin/jmap?-heap?$PID?>?$DUMP_DIR/jmap-heap-$PID.dump?2>&1echo?-e?".\c"
#-dump將jvm的堆中內(nèi)存信息輸出到一個文件中,然后可以通過eclipse?memory?analyzer進行分析
#注意:這個jmap使用的時候jvm是處在假死狀態(tài)的,只能在服務癱瘓的時候為了解決問題來使用,否則會造成服務中斷。$JAVA_HOME/bin/jmap?-dump:format=b,file=$DUMP_DIR/jmap-dump-$PID.dump?$PID?2>&1echo?-e?".\c"
#顯示被進程打開的文件信息
if?[?-r?/usr/sbin/lsof?];?then/usr/sbin/lsof?-p?$PID?>?$DUMP_DIR/lsof-$PID.dumpecho?-e?".\c"fi
done
#主要負責收集、匯報與存儲系統(tǒng)運行信息的。
if?[?-r?/usr/bin/sar?];?then/usr/bin/sar?>?$DUMP_DIR/sar.dump
echo?-e?".\c"
fi
#主要負責收集、匯報與存儲系統(tǒng)運行信息的。
if?[?-r?/usr/bin/uptime?];?then/usr/bin/uptime?>?$DUMP_DIR/uptime.dump
echo?-e?".\c"
fi
#內(nèi)存查看
if?[?-r?/usr/bin/free?];?then/usr/bin/free?-t?>?$DUMP_DIR/free.dump
echo?-e?".\c"
fi
#可以得到關于進程、內(nèi)存、內(nèi)存分頁、堵塞IO、traps及CPU活動的信息。
if?[?-r?/usr/bin/vmstat?];?then/usr/bin/vmstat?>?$DUMP_DIR/vmstat.dump
echo?-e?".\c"
fi
#報告與CPU相關的一些統(tǒng)計信息
if?[?-r?/usr/bin/mpstat?];?then/usr/bin/mpstat?>?$DUMP_DIR/mpstat.dump
echo?-e?".\c"
fi
#報告與IO相關的一些統(tǒng)計信息
if?[?-r?/usr/bin/iostat?];?then/usr/bin/iostat?>?$DUMP_DIR/iostat.dump
echo?-e?".\c"
fi
#報告與網(wǎng)絡相關的一些統(tǒng)計信息
if?[?-r?/bin/netstat?];?then/bin/netstat?>?$DUMP_DIR/netstat.dump
echo?-e?".\c"
fi
echo?"OK!"
常用工具安裝
#!/usr/bin/env?bash#?---------------------------------------------------------------------------------
#?控制臺顏色
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)絡工具: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
#
###################################################################################
EOF
printf?"${RESET}\n"printf?"\n${GREEN}>>>>>>>>>?安裝常用命令工具開始${RESET}\n"#?核心工具
printf?"\n${CYAN}>>>>?install?coreutils(df、du)${RESET}\n"
yum?install?-y?coreutils
printf?"\n${CYAN}>>>>?install?chkconfig${RESET}\n"
yum?install?-y?chkconfig#?網(wǎng)絡工具
printf?"\n${CYAN}>>>>?install?net-tools(ifconfig、netstat、route)${RESET}\n"
yum?install?-y?net-tools
printf?"\n${CYAN}>>>>?install?iptables${RESET}\n"
yum?install?-y?iptables#?IP工具
printf?"\n${CYAN}>>>>?install?iputils(ping、tracepath)${RESET}\n"
yum?install?-y?iputils
printf?"\n${CYAN}>>>>?install?traceroute${RESET}\n"
yum?install?-y?traceroute
printf?"\n${CYAN}>>>>?install?iproute(ip、ss)${RESET}\n"
yum?install?-y?iproute#?端口工具
printf?"\n${CYAN}>>>>?install?lsof${RESET}\n"
yum?install?-y?lsof
printf?"\n${CYAN}>>>>?install?nc${RESET}\n"
yum?install?-y?nc
printf?"\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-utils
printf?"\n${CYAN}>>>>?install?whois${RESET}\n"
yum?install?-y?whois#?下載工具
printf?"\n${CYAN}>>>>?install?curl${RESET}\n"
yum?install?-y?curl
printf?"\n${CYAN}>>>>?install?wget${RESET}\n"
yum?install?-y?wget#?編輯工具
printf?"\n${CYAN}>>>>?install?emacs${RESET}\n"
yum?install?-y?emacs
printf?"\n${CYAN}>>>>?install?vim${RESET}\n"
yum?install?-y?vim#?流量工具
printf?"\n${CYAN}>>>>?install?iftop${RESET}\n"
yum?install?-y?iftop
printf?"\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?git
printf?"\n${CYAN}>>>>?install?subversion${RESET}\n"
yum?install?-y?subversionprintf?"\n${GREEN}<<<<<<<<?安裝常用命令工具結(jié)束${RESET}\n"
常用lib庫安裝
#!/usr/bin/env?bash#?---------------------------------------------------------------------------------
#?控制臺顏色
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
###################################################################################
#?安裝常見?lib
#?如果不知道命令在哪個?lib,可以使用?yum?search?xxx?來查找
# lib 清單如下:
#?gcc?gcc-c++?kernel-devel?libtool
#?openssl?openssl-devel
#?zlib?zlib-devel
#?pcre
###################################################################################
EOF
printf?"${RESET}\n"printf?"\n${GREEN}>>>>>>>>>?安裝常見?lib?開始${RESET}\n"printf?"\n${CYAN}>>>>?install?gcc?gcc-c++?kernel-devel?libtool${RESET}\n"
yum?-y?install?make?gcc?gcc-c++?kernel-devel?libtoolprintf?"\n${CYAN}>>>>?install?openssl?openssl-devel${RESET}\n"
yum?-y?install?make?openssl?openssl-develprintf?"\n${CYAN}>>>>?install?zlib?zlib-devel${RESET}\n"
yum?-y?install?make?zlib?zlib-develprintf?"\n${CYAN}>>>>?install?pcre${RESET}\n"
yum?-y?install?pcreprintf?"\n${GREEN}<<<<<<<<?安裝常見?lib?結(jié)束${RESET}\n"
系統(tǒng)檢查腳本
#!/usr/bin/env?bash##############################################################################
#?console?color
C_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)信息檢查腳本
###################################################################################
EOF
printf?"${C_RESET}"[[?$(id?-u)?-gt?0?]]?&&?echo?"請用root用戶執(zhí)行此腳本!"?&&?exit?1
sysversion=$(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)信息"?"獲取服務信息"?"獲取CPU信息"?"獲取系統(tǒng)網(wǎng)絡信息"?"獲取系統(tǒng)內(nèi)存信息"?"獲取系統(tǒng)磁盤信息"?"獲取CPU/內(nèi)存占用TOP10"?"獲取系統(tǒng)用戶信息"?"輸出所有信息"?"退出"?)
printMenu()?{printf?"${C_BLUE}"printf?"主菜單:\n"for?i?in?"${!options[@]}";?doindex=`expr?${i}?+?1`val=`expr?${index}?%?2`printf?"\t(%02d)?%-30s"?"${index}"?"${options[$i]}"if?[[?${val}?-eq?0?]];?thenprintf?"\n"fidoneprintf?"${C_BLUE}請輸入需要執(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}
主機名:????${sys_hostname}
selinux狀態(tài):??${sys_selinux}
系統(tǒng)語言:???${sys_lang}
系統(tǒng)當前時間:?${sys_time}
系統(tǒng)最后重啟時間:???${sys_lastreboot}
系統(tǒng)運行時間:?${sys_runtime}
系統(tǒng)負載:???${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個數(shù):$Physical_CPUs
邏輯CPU個數(shù):$Virt_CPUs
每CPU核心數(shù):$CPU_Kernels
CPU型號:$CPU_Type
CPU架構(gòu):$CPU_Arch
EOF
}#?獲取服務信息
get_service_info()?{port_listen=$(netstat?-lntup?|?grep?-v?"Active?Internet")kernel_config=$(sysctl?-p?2>?/dev/null)if?[[?${sysversion}?-gt?6?]];?thenservice_config=$(systemctl?list-unit-files?--type=service?--state=enabled?|?grep?"enabled")run_service=$(systemctl?list-units?--type=service?--state=running?|?grep?".service")elseservice_config=$(/sbin/chkconfig?|?grep?-E?":on|:啟用"?|?column?-t)run_service=$(/sbin/service?--status-all?|?grep?-E?"running")ficat?<<?EOF
【服務信息】
${service_config}${line}
運行的服務:
${run_service}${line}
監(jiān)聽端口:
${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}')?#KBMemFree=$(grep?MemFree?/proc/meminfo?|?awk?'{print?$2}')?#KBlet?MemUsed=MemTotal-MemFreeMemPercent=$(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)絡信息
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)絡信息】
系統(tǒng)公網(wǎng)地址:${pub_ipadd}
系統(tǒng)私網(wǎng)地址:${pri_ipadd}
網(wǎng)關地址:${gateway}
MAC地址:${mac_info}
路由信息:
${route_info}
DNS?信息:
${dns_config}
EOF
}#?獲取系統(tǒng)磁盤信息
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
【磁盤信息】
${disk_info}
磁盤使用:?${disk_use}
磁盤使用百分比:?${disk_percent}
inode信息:?${disk_inode}
EOF
}#?獲取系統(tǒng)用戶信息
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/*;?dols?${cronuser}?2>?/dev/null?|?cut?-d/?-f5;?egrep?-v?"^$|^#"?${cronuser}?2>?/dev/null;echo?"";done)cat?<<?EOF
【用戶信息】
系統(tǒng)登錄用戶:
${login_user}${line}
ssh?配置信息:
${ssh_config}${line}
sudo?配置用戶:
${sudo_config}${line}
定時任務配置:
${crond_config}${line}
hosts?信息:
${host_config}
EOF
}#?獲取CPU/內(nèi)存占用TOP10
get_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?"僵尸進程:\n"ps?-al?|?gawk?'{print?$2,$4}'?|?grep?Z
}get_all_info()?{get_systatus_infoecho?${double_line}get_service_infoecho?${double_line}get_cpu_infoecho?${double_line}get_net_infoecho?${double_line}get_mem_infoecho?${double_line}get_disk_infoecho?${double_line}get_process_top_infoecho?${double_line}get_sys_user
}main()?{while?[[?1?]]doprintMenuread?optionlocal?index=$[?${option}?-?1?]case?${options[${index}]}?in"獲取系統(tǒng)信息")get_systatus_info?;;"獲取服務信息")get_service_info?;;"獲取CPU信息")get_cpu_info?;;"獲取系統(tǒng)網(wǎng)絡信息")get_net_info?;;"獲取系統(tǒng)內(nèi)存信息")get_mem_info?;;"獲取系統(tǒng)磁盤信息")get_disk_info?;;"獲取CPU/內(nèi)存占用TOP10")get_process_top_info?;;"獲取系統(tǒng)用戶信息")get_sys_user?;;"輸出所有信息")get_all_info?>?sys.logprintf?"${C_GREEN}信息已經(jīng)輸出到 sys.log 中。${C_RESET}\n\n";;"退出")exit?;;*)clearecho?"抱歉,不支持此選項"?;;esacdone
}########################################?MAIN?########################################
printHeadInfo
main
printFootInfo
printf?"${C_RESET}"
sed進階
#!/bin/bash#多個空格只保留一個
#sed?'/./,/^$/!d'?test#刪除開頭的空白行
#sed?'/./,$!d'?test#刪除結(jié)尾的空白行
sed?'{
:start/^\n*$/{$d;?N;?b?start}
}'?test#刪除html標簽
#有問題
#s/<.*>//g#sed?'s/<[^>]*>//g'?test1#sed?'s/<[^>]*>//g;/^$/d'?test1#and符號,代表替換命令中的匹配模式,不管預定義模式是什么文本,都可以用and符號替換,and符號會提取匹配替換命令中指定替換模式中的所有字符串
echo?"The?cat?sleeps?in?his?hat"?|?sed?'s/.at/"&"/g'#替換單獨的單詞
echo?"The?System?Administrator?manual"?|?sed?'s/\(System\)?Administrator/\1?user/'#在長數(shù)字中插入逗號
echo?"1234567"?|?sed?'{:start;?s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;?t?start}'#給文件中的行編號
sed?'='?test?|?sed?'N;?s/\n/?/'