Linux運維基礎之top命令詳解

Linux運維基礎之top命令詳解

top 命令提供執行系統的動態實時檢視。它用於監控系統程序和資源使用情況,如 CPU、記憶體和交換使用情況。

top 命令的一般語法:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ top [OPTIONS]
$ top [OPTIONS]
$ top [OPTIONS]

1. 列出所有正在執行的程序

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top
top
top

使用 top 命令顯示正在執行的任務、記憶體、cpu 和 swap。要關閉視窗,請按 Q

示例:

在不帶任何選項的終端中執行 top 命令,可能會得到以下結果。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top - 15:20:26 up 10 days, 2:30, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.2 sy, 0.0 ni, 98.9 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8167848 total, 2003084 free, 1652232 used, 4512532 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 6171720 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1219 root 20 0 658884 56644 35980 S 6.7 0.7 42:11.77 Xorg
2781 user1 20 0 883780 31576 21744 S 6.7 0.4 0:01.01 gnome-terminal-
1 root 20 0 225636 9484 6812 S 0.0 0.1 0:07.31 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:00.31 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 0:02.91 rcu_sched
top - 15:20:26 up 10 days, 2:30, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.7 us, 0.2 sy, 0.0 ni, 98.9 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 8167848 total, 2003084 free, 1652232 used, 4512532 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 6171720 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1219 root 20 0 658884 56644 35980 S 6.7 0.7 42:11.77 Xorg 2781 user1 20 0 883780 31576 21744 S 6.7 0.4 0:01.01 gnome-terminal- 1 root 20 0 225636 9484 6812 S 0.0 0.1 0:07.31 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:00.31 ksoftirqd/0 8 root 20 0 0 0 0 I 0.0 0.0 0:02.91 rcu_sched
top - 15:20:26 up 10 days,  2:30,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 193 total,   1 running, 192 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.2 sy,  0.0 ni, 98.9 id,  0.1 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  8167848 total,  2003084 free,  1652232 used,  4512532 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  6171720 avail Mem 
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND            
1219 root      20   0  658884  56644  35980 S   6.7  0.7  42:11.77 Xorg               
2781 user1     20   0  883780  31576  21744 S   6.7  0.4   0:01.01 gnome-terminal-    
1 root      20   0  225636   9484   6812 S   0.0  0.1   0:07.31 systemd            
2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd           
4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H       
6 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 mm_percpu_wq       
7 root      20   0       0      0      0 S   0.0  0.0   0:00.31 ksoftirqd/0        
8 root      20   0       0      0      0 I   0.0  0.0   0:02.91 rcu_sched          

第一行提供系統摘要:當前時間、正常執行時間、使用者數量和平均負載。

第二行顯示任務總數及其狀態:執行、休眠、停止或殭屍。

第三行顯示 CPU 使用詳情:使用者程序、系統程序、空閒程序等。

第四行和第五行顯示記憶體使用情況:總記憶體、空閒記憶體、已用記憶體和緩衝/快取記憶體。其餘各行列出系統上執行的所有程序。每一行代表一個程序,詳細內容包括 PIDUSERCPU usageMemory usage, 以及啟動該程序所使用的命令。

2. 顯示特定使用者的程序

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -u [user]
top -u [user]
top -u [user]

使用 -u 選項可以顯示特定使用者的所有執行程序資訊。

示例:

顯示 root 使用者的執行程序。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top - 12:34:56 up 10 days, 2:30, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 7976.1 total, 1694.7 free, 1263.5 used, 5017.8 buff/cache
MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 6412.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 225492 9484 6812 S 0.0 0.1 0:06.37 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.36 ksoftirqd/0
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 I 0.0 0.0 0:01.31 rcu_sched
...
top - 12:34:56 up 10 days, 2:30, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st MiB Mem : 7976.1 total, 1694.7 free, 1263.5 used, 5017.8 buff/cache MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 6412.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 225492 9484 6812 S 0.0 0.1 0:06.37 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.36 ksoftirqd/0 5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 I 0.0 0.0 0:01.31 rcu_sched ...
top - 12:34:56 up 10 days,  2:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.1 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   7976.1 total,   1694.7 free,   1263.5 used,   5017.8 buff/cache
MiB Swap:   1024.0 total,   1024.0 free,      0.0 used.   6412.1 avail Mem 
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1 root      20   0  225492   9484   6812 S   0.0   0.1   0:06.37 systemd
2 root      20   0       0      0      0 S   0.0   0.0   0:00.01 kthreadd
3 root      20   0       0      0      0 S   0.0   0.0   0:00.36 ksoftirqd/0
5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H
7 root      20   0       0      0      0 I   0.0   0.0   0:01.31 rcu_sched
...

在這個例子中,你可以看到 top -u root 命令只顯示 root 使用者擁有的程序。輸出包括每個程序的相關資訊,如程序 ID (PID)、優先順序 (PR)、友好值 (NI)、虛擬記憶體大小 (VIRT)、常駐記憶體大小 (RES)、共享記憶體大小 (SHR)、CPU 使用率 (%CPU)、記憶體使用率 (%MEM) 以及啟動程序的命令 (COMMAND)。

3. 啟用批處理模式

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -b
top -b
top -b

top -b 命令用於以批處理模式執行 top。當你想將 top 的輸出重定向到檔案或其他命令時,這條命令特別有用。在批處理模式下,top 不接受輸入,一直執行到設定的迭代次數限制,或直到被殺死。

示例:

在本例中,-n 1 會讓 top 只執行一次,而不是持續更新。輸出會被重定向到 top-output.txt 中。

開啟 top-output.txt 檔案,可能會看到類似下面的輸出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top - 18:25:01 up 10 days, 5:45, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8167848 total, 1785084 free, 1583456 used, 4799308 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 6250480 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 225492 9484 6812 S 0.0 0.1 0:09.07 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.55 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 S 0.0 0.0 0:07.28 rcu_sched
top - 18:25:01 up 10 days, 5:45, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 8167848 total, 1785084 free, 1583456 used, 4799308 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 6250480 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 225492 9484 6812 S 0.0 0.1 0:09.07 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.55 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:07.28 rcu_sched
top - 18:25:01 up 10 days,  5:45,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 162 total,   1 running, 161 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 98.9 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8167848 total,  1785084 free,  1583456 used,  4799308 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  6250480 avail Mem 
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1 root      20   0  225492   9484   6812 S   0.0  0.1   0:09.07 systemd
2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd
3 root      20   0       0      0      0 S   0.0  0.0   0:00.55 ksoftirqd/0
5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
7 root      20   0       0      0      0 S   0.0  0.0   0:07.28 rcu_sched

4. 從同一狀態開始

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -c
top -c
top -c

top -c 顯示當前活動程序以及其他資訊,包括啟動每個程序所用的完整命令列。這有助於檢視傳遞給程序的確切引數。

示例:

下面是 top -c 命令的輸出示例:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top - 12:34:56 up 10 days, 2:03, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2040204 total, 987204 free, 105204 used, 948796 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1830204 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 159444 6604 3904 S 0.0 0.3 0:06.35 /sbin/init splash
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [kthreadd]
3 root 20 0 0 0 0 S 0.0 0.0 0:00.85 [ksoftirqd/0]
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
7 root 20 0 0 0 0 S 0.0 0.0 0:03.78 [rcu_sched]
123 root 20 0 278532 37888 26976 S 0.0 1.9 0:03.45 /usr/bin/dockerd -H fd://
456 www-data 20 0 161916 6412 2680 S 0.0 0.3 0:00.01 /usr/sbin/apache2 -k start
top - 12:34:56 up 10 days, 2:03, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2040204 total, 987204 free, 105204 used, 948796 buff/cache KiB Swap: 1048572 total, 1048572 free, 0 used. 1830204 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 159444 6604 3904 S 0.0 0.3 0:06.35 /sbin/init splash 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [kthreadd] 3 root 20 0 0 0 0 S 0.0 0.0 0:00.85 [ksoftirqd/0] 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H] 7 root 20 0 0 0 0 S 0.0 0.0 0:03.78 [rcu_sched] 123 root 20 0 278532 37888 26976 S 0.0 1.9 0:03.45 /usr/bin/dockerd -H fd:// 456 www-data 20 0 161916 6412 2680 S 0.0 0.3 0:00.01 /usr/sbin/apache2 -k start
top - 12:34:56 up 10 days,  2:03,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.1 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2040204 total,   987204 free,   105204 used,   948796 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.  1830204 avail Mem 
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1 root      20   0  159444   6604   3904 S   0.0  0.3   0:06.35 /sbin/init splash
2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 [kthreadd]
3 root      20   0       0      0      0 S   0.0  0.0   0:00.85 [ksoftirqd/0]
5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kworker/0:0H]
7 root      20   0       0      0      0 S   0.0  0.0   0:03.78 [rcu_sched]
123 root      20   0  278532  37888  26976 S   0.0  1.9   0:03.45 /usr/bin/dockerd -H fd://
456 www-data  20   0  161916   6412   2680 S   0.0  0.3   0:00.01 /usr/sbin/apache2 -k start

前幾行提供系統摘要,包括當前時間、系統執行時間、使用者數量、平均負載和記憶體使用情況。

之後的每一行代表一個程序,幷包含每個程序的各種資訊。其中包括程序 ID (PID)、擁有該程序的使用者、優先順序 (PR) 和 nice 值 (NI)、記憶體使用情況 (VIRT、RES、SHR)、當前狀態 (S)、CPU 使用率 (%CPU)、記憶體使用情況 (%MEM)、程序執行時間 (TIME+) 以及完整的命令列 (COMMAND)。

-c 選項顯示啟動每個程序的完整命令列。例如,對於 PID 1,命令是 /sbin/init splash。對於 PID 123,命令是 /usr/bin/dockerd -H fd://。這有助於檢視傳遞給程序的確切引數。

5. 啟用安全模式

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -s
top -s
top -s

-s 選項用於安全模式操作。在安全模式下,一些可能有害的互動式命令會被禁用。當系統管理員在需要限制使用者操作的環境中執行 top 時,這個選項尤其有用。舉例說明:

示例:

下面舉例說明在這種情況下如何使用 -s 選項:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -s 5
top -s 5
top -s 5

這條命令將啟動 top 並每 0.5 秒重新整理一次顯示。

6. 設定螢幕更新的延遲時間

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -d [seconds]
top -d [seconds]
top -d [seconds]

-d 選項用於指定螢幕更新之間的延遲時間,換句話說就是重新整理率。預設情況下,top 每 3.0 秒更新一次,但使用 -d 選項,可以將其設定為任何需要的間隔。

示例:

-d 選項後指定數字 20 ,每 20 秒更新一次輸出。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -d 20
top -d 20
top -d 20

7. 設定迭代次數

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
top -n [number]
top -n [number]
top -n [number]

top -n 會更新 top 命令顯示 n 次,然後退出。如果你想定期對系統進行快速快照,這將非常有用。

更多 Linux 命令

下面羅列了最常見的一些 Linux 命令,您可以根據自己的需要查閱對應命令的詳細解析:

目錄操作 rmdir · cd · pwd · exa · ls
檔案操作 cat · cp · dd · less · touch · ln · rename · more · head
檔案系統操作 chown · mkfs · locate
網路 ping · curl · wget · iptables · mtr
搜尋和文字處理 find · grep · sed · whatis · ripgrep · fd · tldr
系統資訊和管理 env · history · top · who · htop · glances · lsof
使用者和會話管理 screen · su · sudo · open

此外,我們還整理 Linux 命令列大全,以幫助大家全面深入地學習 Linux。

評論留言