Linux常用命令及詳細說明 — 結合工作(側重性能監控,包括CPU、內存、IO、網絡、磁盤等)


(一)Linux監控的幾個常用命令(對於服務器后端程序猿很重要,必須掌握):

命令 功能 命令 功能
iostat 統計CPU及網絡、設備和分區IO的數據 vmstat 展示給定時間服務器的狀態值(包括CPU使用率、內存使用狀況、虛擬內存交換情況、IO讀寫情況),很常用
free 顯示內存狀況,包括空閑以及被使用的物理內存、交換內存以及被kernel使用的緩沖區 sar  System Activity report 系統活動報告,是目前Linux最為全面的系統性能分析工具之一 
ps 顯示當前正在運行的所有進程的快照 strace 跟蹤進程執行時系統調和所接收的信號
top 實時顯示系統中各個進程的資源(cpu和load)占用狀況,類似於windows任務管理器 tcpdump

dump the traffic on a network, 根據用戶定義對網絡上的包進行截獲的包分析工具,

功能和查看pcap包的wireshark工具差不多

 轉載請注明出處:https://www.cnblogs.com/NaughtyCat/p/most-useful-linux-command-in-work.html

  • iostat

 統計CPU及網絡、設備和分區IO的數據,具體命令行參數見下表:

選項 含義
 -d  顯示設備(磁盤)使用狀態
 -k 某些使用block為單位的列強制使用kilobytes/每秒
 -x 顯示更多統計信息
 -c  顯示CPU利用率

輸入"iostat -x”,結果如下圖:

avg-cpu統計信息每段含義見下表(作者【CoderBaby】):

參數 含義
 %user   在用戶態運行程序,CPU利用的百分比
 %nice  在nice優先級(即靜態優先級,具體啥含義請百度)
 %system  在內核態運行程序,CPU利用的百分比
 %iowait 特別重要 — show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request
 %steal

 虛擬CPU等待的百分比 — Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs

 while the hypervisor was servicing another virtual processor

 %idle  CPU 空閑的比列,CPU沒有IO請求需要處理 — 和 %iowait含義相反

 

 設備(device)輸出結果每段含義詳細說明見下表:

參數 含義
 rrqm/s 

 每秒這個設備相關的讀取請求有多少被merge了,

 當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合並Merge

 wrqm/s  每秒這個設備相關的寫入請求有多少被merge了
 r/s  The number of read requests that were issued to the device per second
 w/s  The number of write requests that were issued to the device per second
 rsec/s  每秒讀取的扇區數
 wsec/s  每秒寫入的扇區數
 avgrq-sz  
 avgqu-sz  
 await  每一個IO請求的處理的平均時間(單位是毫秒)
 svctm  
 %util

 在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,

 而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。

一般地,如果該參數是100%表示設備已經接近滿負荷運行了

(當然如果是多磁盤,即使%util是100%,因為磁盤的並發能力,所以磁盤使用未必就到了瓶頸)。

 

參考 iostat(1) - Linux man page

  • ps
  • grep
  • top

實時顯示系統中各個進程的資源占用狀況,類似於windows任務管理器,默認3秒鍾刷新一次,太快了,看不過來,-d 可以指定,多少時間更新一次

具體命令行參數說明見下表:

選項 含義
-a 按照內存使用率排序
-d 設置多長時間(以秒為單位)刷新一次結果
-p <pid>  查看指定進程ID的信息
 -u <username>   查看指定用戶名的信息
 -i   不顯示任何閑置 (idle) 或僵屍 (zombie) 的進程
 -n iterations  指定更新多少次信息后終止
 -c  顯示完整命令,如mysql會顯示 “/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql” 
 -s  安全模式
 -S  累積時間模式,開啟此模式,會列出該進程及它已經死掉的子進程所使用的CPU時間

 

例如,“top -d 30” —— 30秒刷新一次(默認按cpu占用率排序),結果如下圖:

 輸出結果前5行(統計的整體信息)的每一段的含義如下表所示:

段1含義 段2含義 段3含義 段4含義 段5含義 段6含義 段7含義 段8含義
 1 - top 13:43:10 - 當前時間  up 4:21 - 系統運行時間,格式為"時:分"  1 user - 當前登錄用戶數

 load average: 0.01, 0.04, 0.01 - 系統負載,即任務隊列的平均值

三個數值依次為"1分鍾5分鍾 15分鍾”到目前的平均值

       
 2 - Tasks 1012 total - 進程總數  1 running -  正在運行的進程數  1095 sleeping - 睡眠的進程數  6 stopped - 停止的進程數 0 zombie - 僵屍進程數       
 3 - Cpu(s)  0.8%us - 用戶空間占用CPU百分比  0.1%sy - 內核空間占用CPU百分比  0.0%ni - 用戶進程空間改變過優先級的占CPU百分比  99.2%id - 空閑CPU百分比 0.0%wa - 等待輸入輸出的CPU百分比  0.0%hi -  0.0%si -  0.0%st - 
 4 - Mem  132173688k total - 物理內存總量  38002800k used - 已使用的物理內存總量  94170888k free - 空閑內存總量  208420k buffers - 用於內核緩存的內存總量        
 5 -Swap  4194600k total - 交換區總量  0k used - 已使用的交換區總量  4194300k free - 空閑交換區總量  2624596k cached - 緩沖的交換區總量        

 

在top命令模式下,按“f”鍵,會顯示每個column的詳細信息,如下圖:

每一列的含義翻譯成中文如下表所示:

列名 含義
PID  進程ID
USER  用戶名
PR  進程優先級
NI  nice value,不知道怎么翻譯好
VIRT  進程使用的虛擬內存總量(kb)
RES  進程使用的、未被換出的物理內存大小
SHR  共享內存大小(kb)
S  進程狀態。D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程
%CPU  上次更新到現在的CPU時間占用百分比
%MEM  進程當前使用的可被共享的內存容量
TIME+  task自啟動以來,累計占用cpu時間,精確到百分之一秒
COMMAND  命令行或者程序名

 

  •  free

 顯示空閑和使用的內存信息,命令參數選項如下表:

選項 含義
 -b -k -m -g  單位分別為bytes, KB, MB, G
 -h 人類可讀(即自動以MB,G等為單位顯示)
 -t  額外顯示總數 (RAM + swap)
 -o (old format) 不會顯示 -/+ buffers/cache 這行信息

 

輸入“free -m”,以M為單位,便於精確計算講解,結果如下圖:

 

輸出結果具體每行每列的含義詳見下表:

 行 total used free shared buffers cached
 Mem: 內存總數 (total = used + free) 已經使用的內存數量 空閑內存數量 共享內存數量,據說已經廢棄不用 緩沖內存數量 緩存內存數量
 -/+ buffers/cache:  

(- buffers/cache) used —— 反映的是被程序實實在在吃掉的內存

使用的內存數 = 第一行即Mem行的 “used - buffers - cached” = 34562 - 87 - 1322 = 33151M

(+ buffers/cache) free —— 反映的是可以挪用的內存總數

空閑內存數 = 第一行即Mem行的 “free + buffers + cached” = 94513 + 87 + 1322 = 95922M

差2M不知道哪里來的

     
 swap: (交換區) 交換區內存總數 交換區已使用內存數 交換區空閑內存數      
  • sar

System Activity report 系統活動報告,是目前Linux最為全面的系統性能分析工具之一

  • vmstat
  • tcpdump

dump the traffic on a network, 根據用戶定義對網絡上的包進行截獲的包分析工具。tcpdump可以將網絡傳輸的數據包的“頭”完全截獲下來以供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用信息。直接啟動tcpdump將監視第一個網絡接口上所有流過的數據包,抓取100個包的命令“tcpdump -c 100”,結果如下圖:

具體命令行參數詳見下表:

選項 含義
-i <網卡號或稱之為網絡接口> 監聽指定網卡(又稱網絡接口)的數據包,如tcpdump -i eth0(監聽第一個網絡接口,etho也是默認監聽的網卡,第一個嘛)
   
   
 tcpdump -i etho dst host hostname 監視所有發送到主名為hostname的網絡數據包(dst — 目的地,通過默認網卡)
 tcpdump -i etho src host hostname 截獲主機名為hostname所發送的所有數據(src — 源,通過默認網卡)
 tcpdump ip host 210.27.48.1 and !210.27.48.2  獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的網絡包 (!—— 取反,即非的意思嘛)
   
   
   

 

 (二)基本簡單命令

列表匯總基本命令:

命令 功能 命令 功能 命令 功能
 ls  查看當前目錄下有哪些文件和文件夾  whereis  查找可執行的軟件命令在哪里  clear/reset/ CTRL + l  清屏——切換到下一個新的屏幕
 pwd  顯示當前目錄的完整路徑  cd  改變所在目錄  vi  文本編輯器
 cat  輸出文件的內容到屏幕  mkdir  創建目錄  vim  程序編輯器
 sh  執行shell腳本  rmdir  刪除目錄  kill  殺死進程
 yum  軟件包管理器  mv  移動文件  ifconfig  顯示或者設置網絡設備
 sudo  以系統管理員的身份執行指令,類似於windows  CMD,右鍵選擇"以管理員身份運行“”  rm  刪除文件  cal  日歷
 df  查看磁盤使用情況  cp  復制文件  date  日期
 stat  顯示文件或者文件系統的狀態  touch  更新文件的訪問時間和修改時間,如果不存在,則創建之  bc  計算器

 

linux命令的常識:

  (1)大小寫敏感,如 "top"可以識別,"Top" 則comand not found

  (2)-h (部分命令支持,如沖突則不支持)和 --help(大多數命令支持),查看命令幫助信息,如 rmdir --help,提示“ rmdir [OPTION]... DIRECTORY..” 

  (3)命令有縮寫和全拼兩種格式,如 rmdir 的"-p" <=> "--parents"

  (4)CTRL +  C ,exit 當前正在執行的命令;CTRL + Z , stop 當前正在執行的命令

  (5)命令格式說明,“【】”括起來表示選項可選,接下來緊跟的詳細參數,如ls命令說明:“ls [OPTION]... [FILE]...

  (6)可通過“|”進行命令拼接,如“ps -ef | grep java | grep -v grep” 

  (7)linux 命令或者參數在輸入1個或2個字符后,按Tab鍵,會列出可選命令和參數,如果輸入3個或者4個字符,可查找出唯一的命令和參數,將自動補全

  (8)鍵盤“PgUp”“PgDn"及 鍵盤“↑”“↓” 可以切換到上一個或者下一個已輸入的命令;按鍵“←” 和“→” ,可以在命令里左右移動光標;按鍵“Home” 和“End” 可以跳轉到命令的第一個字符和末尾

  (8)linux里所有東西都被當做文件,不像windows有硬件設備的概念,如磁盤、CPU等,所以你裝的所有軟件,如mysql等都是文件

  (9)man (manual,手冊) + Command,有更詳細的命令說明

 

詳細論述:

  • ls

查看當前目錄下有哪些文件及文件夾,具體命令行參數說明見下表:

 

常用選項 含義
-l 一行顯示一個文件或者文件夾,並顯示諸如文件大小、文件最后修改時間、owner等信息
-a 列出所有文件及文件夾,包括隱藏文件
-R 把子文件夾下的文件也全部列出來,可以“ls -R -l”組合用
-S 按文件大小倒敘列出所有文件
-h 以人類可讀的形式列出文件大小(K,M,G)

如在 linux的根目錄下,輸入“ls”,結果如下圖:

如果是在包含有文件的目錄下,輸入“ls”,比如在root下,則會包含文件如 “install.log” 及文件夾 “Music” 等等,結果如下圖:

 

組合命令,ls -S -h -l結果如下圖:

  • 查看端口占用情況(對於connect refused 問題很管用)

netstat -an | grep 8000 (查看 8000端口的使用情況)

  • pwd

顯示當前的完整路徑名,如下圖:

  • cd

切換當前目錄,具體語法: cd [dirName],具體命令行參數說明見下表:

選項 含義
 .. 切換到父級目錄
 /  切換到根目錄
 ~ 切換到home根目錄

 

  • 查看cpu

cat /proc/cpuinfo — 有多少內核處理器就有多少條信息,如下:

 

  • 查看內存信息

cat /proc/meminfo (/proc下面有很多關於本機系統及設備的信息,均可如法炮制),如下圖:

  • whereis

查找命令—具體語法: whereis [ -sbmu ] [ -SBM dir ... -f ] name...,例如"whereis mysql",結果如下圖:

  • cat

輸出文件內容到終端,例如“cat install.log”,結果如下圖:

  • sh
  • ifconfig

顯示或者設置網絡設備,輸入“ifconfig”, 結果如下圖(可以看到自己的ipv4 、ipv6 地址等信息):

  • kill
  • rm
  • mv
  • cp
  • touch

更新文件的訪問時間和修改時間,如果文件不存在,則創建之。如我在root根目錄,“touch test2019.txt”,文件不存在則創建之,效果如下圖:

  • mkdir

創建目錄,

  • rmdir
  • df
  • vi 及vim
  • yum 
  • sudo
  • stat

顯示文件或者文件系統的狀態,具體語法: stat [OPTION]... FILE...,例如stat a.txt, 結果如下圖:

  • bc

內置計算器,"bc -q" 不會輸出關於bc軟件的一些信息,直接用(回車輸出結果),如下圖:

  • cal

日歷

  • date

日期—具體語法: date [OPTION]... [+FORMAT],例如“date ‘+%Y % m%d %H %m’”,輸出當期日期的年月日、時、分,結果如下圖:

 

附注:

 

未完待續,空了接着完善

*****************************************************************************************************

精力有限,想法太多,專注做好一件事就行

  • 我只是一個程序猿。5年內把代碼寫好,技術博客字字推敲,堅持零拷貝和原創
  • 寫博客的意義在於鍛煉邏輯條理性,加深對知識的系統性理解,鍛煉文筆,如果恰好又對別人有點幫助,那真是一件令人開心的事

*****************************************************************************************************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM