
(一)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%,因為磁盤的並發能力,所以磁盤使用未必就到了瓶頸)。 |
- 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年內把代碼寫好,技術博客字字推敲,堅持零拷貝和原創
- 寫博客的意義在於鍛煉邏輯條理性,加深對知識的系統性理解,鍛煉文筆,如果恰好又對別人有點幫助,那真是一件令人開心的事
*****************************************************************************************************
