Shell腳本命令常用技巧

  • 如果一個命令只有一次輸出,但想持續觀察輸出變化,使用watch -d -n1 ‘df -h’可行,df -h輸出一次硬碟使用情況,用上面指令可以持續觀察。-d表示相鄰輸出如果有差異要高亮標記,-n1表示每隔一秒執行一次df -h指令。
  • 觀察網路介面流量sar -n DEV 1 200,DEV 1表示監控第一個網卡,200表示輸出200次監控結果。
  • 日誌文件很大,只想處理最後的十萬行, tail -n 100000 access.log > accesspart.log, accesspart.log里就是最後的十萬行。
  • $可以理解為取內容運算符 echo是列印 export是設置環境變數
  • 查看PATH變數值用echo ${PATH},查看PATH變數長度用echo ${#PATH}
  • pgrep ssh顯示ssh進程的pid號
  • cat /proc/16119/environ | tr ‘\0’ ‘\n’ 查看pid號為16119的進程的環境變數,tr ‘\0’ ‘\n’把每一項環境變數的末尾替換為換行符,使輸出便於閱讀
  • top顯示各個進程資源佔用情況。然後按shift+M,結果按記憶體佔用由大到小排序。按shift+P,結果按cpu佔用由大到小排序。
  • find指令後面必須有基本路徑,-path後面的目錄前後都要加*
  • shell中命令之間的空格很重要,空格分隔了不同的命令,\轉義的一般都用空格與其他的指令隔離
  • shell常用變數:$1命令或腳本的第一個參數,第二個以此類推;$#參數數量;$0當前程式名稱;$?上個命令的返回值;$$ 程式PID;$! 之前程式PID;$@以列表的方式列印所有參數;$*字元串的形式列印所有參數;
  • cd – 兩個目錄切換
  • echo “line containing a car pattern” | tr -s ” ” 把字元串的多個空格減少到一個空格
  • echo “line containing apattern ” | tr -d ‘n’ 刪除字元串中的n
  • echo “line containing apattern ” | sed “s/c/x/g” 將字元串的c替換成x
  • name=${var%.}的含義是從右向左匹配%右側的通配符. 並刪除匹配結果,之後賦值給name %非貪婪 %%貪婪
  • name=${var#.}的含義是從左向右匹配#右側的通配符. 並刪除匹配結果,之後賦值給name #非貪婪 ##貪婪
  • tr ‘ ‘ ‘\n’ 空格替換成\n,使得單行變多行。反過來多行可以變單行。
  • awk NR是當前行號,NF是當前行欄位數量。$0是當前行的全部內容, $1等是當前行第1列的內容。
  • cat <indeximg.xml ….EOF 把EOF之前的內容重定向到xml中
  • (子shell)& wait &表示脫離當前執行緒,wait表示全部完成才結束
  • ssh -p3456 user@IP 本伺服器連接到IP伺服器,埠號3456
  • 語句最後放一個&的意思是放置到後台運行
  • netstat -tnpul查看開放的埠和服務
  • 查看磁碟命令df=disk free du=disk usage
  • $while read line;do … done<<file 使用方法 可以讀取第一個參數文件
  • ps收集進程詳細資訊 結果各項含義:UID 用戶ID; PID 進程ID; PPID 父進程ID; C CPU佔用率; STIME 開始時間; TTY 開始此進程的TTY【終端】; TIME 此進程運行的總時間 ; CMD 命令名;
  • which查找某個命令的位置 whereis 包括手冊的位置 file文件類型細節 whatis列印手冊的某一行
  • kill -l訊號列表 ; kill -s SIGNAL PID 發個訊號給進程; killall process_name按程式名稱殺; killall -u username process_name ; pkill 進程名; trap 處理訊號函數 SIGINT(接收到SIGINT就運行處理函數)
  • $ hostname查看主機名 $ uname -n查看主機名 $ uname -a系統版本 $ uname -r內核版本 $ uname -m平台
  • cat /proc/cpuinfo【cpu資訊】 cat /proc/meminfo【記憶體資訊】 cat /proc/partitions【硬碟資訊】
  • corn調度命令 【分 小時 天 月 星期】 *代表每次 $crontab -e會打開計劃表 執行corn所使用的許可權和執行命令的一致 crontab -r移除當前用戶的cron表
  • cat<<! ….! 達到追加命令的效果,會將…一行一行的執行
  • ftp狀態下執行lcd 在本地機上改變工作目錄
  • MYTIME=`date +”%Y%m%d %T”` 反向單引號執行引號內語句,並將執行結果作為整體賦值給變數。普通單引號將語句作為字元串賦值給變數。
  • $ pstack pid號 顯示進程棧跟蹤 ,對處於錯誤狀態的進程執行這個命令,列印的棧資訊就是進程現在執行的程式碼,幫助定位bug
  • $strace -p pid號 查看進程正在使用哪些系統調用,可以看見系統調用的函數名稱和報錯資訊。
  • $free -m 查看記憶體大小
  • $sysctl -p /etc/sysctl.conf重新載入內核參數,使配置生效
  • $ grep hhh * 會顯示包含hhh的文件名和包含hhh的字元串
  • $ulimit -c unlimited 不限制core文件大小
Tags: