章 25. 系統監視公用程式

內容目錄

25.1. 開啟檔案的清單:lsof
25.2. 使用者存取檔案:fuser
25.3. 檔案內容:stat
25.4. USB 設備:lsusb
25.5. SCSI 設備的相關資訊:scsiinfo
25.6. 處理程序:top
25.7. 程序清單:ps
25.8. 程序樹:pstree
25.9. 功能介紹:w
25.10. 記憶體的使用:free
25.11. 核心環狀緩衝區:dmesg
25.12. 檔案系統及其使用:mountdfdu
25.13. /proc 檔案系統
25.14. vmstatiostatmpstat
25.15. procinfo
25.16. PCI 資源:lspci
25.17. 執行程式的系統呼叫:strace
25.18. 一個程式執行階段的程式庫呼叫:ltrace
25.19. 指定需要的程式庫:ldd
25.20. 其它有關 ELF 二進位的資訊
25.21. 程序間的通訊:ipcs
25.22. 使用 time 進行時間管理

摘要

有許多程式和機制可用來檢查您的系統狀態,其中一些會在這裡介紹。另外還會介紹一些例行工作使用的公用程式,及其重要參數。

所有介紹的指令都會有相關的輸出範例。在這些範例中,第一行為指令本身(在金錢符號提示之後)。會以方括號 [...] 表示備註,備註較長時會進行換行。因為備註過長而換行時,會以反斜線 (\) 斷行。

$ command -x -y
output line 1
output line 2
output line 3 is annoyingly long, so long that \
    we have to break it
output line 3
[...]
output line 98
output line 99

為了介紹更多公用程式,說明的部份保持簡短。如需所有指令的相關資訊,請參閱 man 頁面。大部份的指令都能解讀參數 --help,此參數可產生一份可能參數的簡短清單。

25.1. 開啟檔案的清單:lsof

如果要檢視為了程序而開啟的所有檔案之清單及其程序 ID PID,可使用 -p。例如,要檢視目前外圍程序正在使用的所有檔案,可輸入:

$ lsof -p $$
COMMAND  PID USER   FD   TYPE DEVICE    SIZE     NODE NAME
zsh     4694   jj  cwd    DIR   0,18     144 25487368 /suse/jj/t (totan:/real-home/jj)
zsh     4694   jj  rtd    DIR    3,2     608        2 /
zsh     4694   jj  txt    REG    3,2  441296    20414 /bin/zsh
zsh     4694   jj  mem    REG    3,2  104484    10882 /lib/ld-2.3.3.so
zsh     4694   jj  mem    REG    3,2   11648    20610 /usr/lib/zsh/4.2.0/zsh/rlimits.so
[...]
zsh     4694   jj  mem    REG    3,2   13647    10891 /lib/libdl.so.2
zsh     4694   jj  mem    REG    3,2   88036    10894 /lib/libnsl.so.1
zsh     4694   jj  mem    REG    3,2  316410   147725 /lib/libncurses.so.5.4
zsh     4694   jj  mem    REG    3,2  170563    10909 /lib/tls/libm.so.6
zsh     4694   jj  mem    REG    3,2 1349081    10908 /lib/tls/libc.so.6
zsh     4694   jj  mem    REG    3,2      56    12410 /usr/lib/locale/de_DE.utf8/LC_TELEPHONE
[...]
zsh     4694   jj  mem    REG    3,2      59    14393 /usr/lib/locale/en_US/LC_NUMERIC
zsh     4694   jj  mem    REG    3,2  178476    14565 /usr/lib/locale/en_US/LC_CTYPE
zsh     4694   jj  mem    REG    3,2   56444    20598 /usr/lib/zsh/4.2.0/zsh/computil.so
zsh     4694   jj    0u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj    1u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj    2u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj   10u   CHR 136,48               50 /dev/pts/48

已使用特殊外圍程序變數 $$,其值為外圍程序的程序 ID。

指令 lsof 列出所有目前開啟的檔案,使用時不需任何參數。因為通常其中有數千個檔案開啟,將這些檔案全部列出並不太有用。不過,可將這份包含所有檔案的清單結合搜尋功能,進而產生有用的清單。例如,將用到的字元設備全部列出:

$ lsof | grep CHR
sshd       4685    root  mem    CHR    1,5             45833 /dev/zero
sshd       4685    root  mem    CHR    1,5             45833 /dev/zero
sshd       4693      jj  mem    CHR    1,5             45833 /dev/zero
sshd       4693      jj  mem    CHR    1,5             45833 /dev/zero
zsh        4694      jj    0u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj    1u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj    2u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj   10u   CHR 136,48                50 /dev/pts/48
X          6476    root  mem    CHR    1,1             38042 /dev/mem
lsof      13478      jj    0u   CHR 136,48                50 /dev/pts/48
lsof      13478      jj    2u   CHR 136,48                50 /dev/pts/48
grep      13480      jj    1u   CHR 136,48                50 /dev/pts/48
grep      13480      jj    2u   CHR 136,48                50 /dev/pts/48