首頁 > linux教程 > Linux系統管理 閱讀:0更新時間:2020-03-28 01:04:35

Linux lsof命令:列出進程調用或打開的文件信息

我們知道,通過 ps 命令可以查詢到系統中所有的進程,那么,是否可以進一步知道這個進程到底在調用哪些文件嗎?當然可以,使用 lsof 命令即可。

lsof 命令,“list opened files”的縮寫,直譯過來,就是列舉系統中已經被打開的文件。通過 lsof 命令,我們就可以根據文件找到對應的進程信息,也可以根據進程信息找到進程打開的文件。

lsof 命令的基本格式如下:

[root@localhost ~]# lsof [選項]

此命令常用的選項及功能,如表 1 所示。

表 1 lsof 命令常用選項及功能
選項 功能
-c 字符串 只列出以字符串開頭的進程打開的文件。
+d 目錄名 列出某個目錄中所有被進程調用的文件。
-u 用戶名 只列出某個用戶的進程打開的文件。
-p pid 列出某個 PID 進程打開的文件。

【例 1】

[root@localhost ~]# lsof | more
#查詢系統中所有進程調用的文件
COMMAND PID  USER  FD    TYPE  DEVICE  SIZE/OFF  NODE  NAME
init               1      root    cwd  DIR    8,3       4096        2           /
init               1      root    rtd    DIR    8,3       4096        2           /
init               1      root    txt     REG   8,3       145180    130874 /sbin/init
init               1      root    mem REG   8,3       142472    665291 /lib/ld-2.12.so
init               1      root    mem REG   8,3       58704      655087 /lib/libnss_files-2.12.so
…省略部分輸出…

這個命令的輸出非常多。它會按照 PID,從 1 號進程開始列出系統中所有的進程正在調用的文件名。

【例 2】

[root@localhost ~]# lsof /sbin/init
#查詢某個文件被哪個進程調用
COMMAND PID USER  FD  TYPE  DEVICE  SIZE/OFF  NODE    NAME
init               1     root    txt  REG   8,3      145180     130874   /sbin/init

lsof 命令也可以反過來查詢某個文件被哪個進程調用。這個例子就查詢到 /sbin/init 文件是被 init 進程調用的。

【例 3】

[root@localhost ~]# lsof +d /usr/lib
#查詢某個目錄下所有的文件是被哪些進程調用的
COMMAND  PID    USER   FD     TYPE DEVICE  SIZE/OFF   NODE    NAME
rpc.idmap     1196  root     mem REG  8,3       26400       279930   /usr/lib/libnfsidmap.so.0.3.0
rpc.idmap     1196  root     mem REG  8,3       108948     276696   /usr/lib/libevent-1.4.so.2.1.3
avahi-dae     1240  avahi    mem REG  8,3       49124       271310   /usr/lib/libavahi-common.so.3.5.1
avahi-dae     1240  avahi    mem REG  8,3       23904       283188   /usr/lib/libdaemon.so.0.5.0
avahi-dae     1240  avahi    mem REG  8,3       227212     268396   /usr/lib/libavahi-core.so.6.0.1
avahi-dae     1241  avahi    mem REG  8,3       49124       271310   /usr/lib/libavahi-common.so.3.5.1
avahi-dae     1241  avahi    mem REG  8,3       23904       283188   /usr/lib/libdaemon.so.0.5.0
avahi-dae     1241  avahi    mem REG  8,3       227212     268396   /usr/lib/libavahi-core.so.6.0.1
cupsd           1251  root      mem REG  8,3       69564       270210   /usr/lib/libtasn1.so.3.1.6

使用“+d”選項可以搜索某個目錄下所有的文件,查看到底哪個文件被哪個進程調用了。

【例 4】

[root@localhost ~]# lsof -c httpd
#查看以httpd開頭的進程調用了哪些文件
COMMAND PID   USER   FD    TYPE   DEVICE  SIZE/OFF  NODE   NAME
httpd           4689 root     cwd  DIR     8,3       4096        2           /
httpd           4689 root     rtd    DIR     8,3       4096        2           /
httpd           4689 root     txt     REG    8,3       1797559  2855     /usr/local/apache2/bin/httpd
httpd           4689 root     mem REG    8,3       302300    665303 /lib/libfreebl3.so
httpd           4689 root     mem REG    8,3       58704      655087 /lib/libnss_files-2.12.s
httpd           4689 root     mem REG    8,3       142472    665291 /lib/ld-2.12.so
httpd           4689 root     mem REG    8,3       1889704  665292 /lib/libc-2.12.so
…省略部分輸出…

使用“-c”選項可以查詢以某個字符串開頭的進程調用的所有文件,比如執行“lsof-c httpd”命令就會查詢出以 httpd 開頭的進程調用的所有文件。

【例 5】

[root@localhost ~]# lsof -p 1
#查詢PID是1的進程調用的文件
COMMAND PID USER FD   TYPE  DEVICE  SIZE/OFF NODE  NAME
init               1     root  cwd  DIR    8,3      4096        2           /
init               1     root rtd     DIR    8,3      4096        2           /
init               1     root  txt     REG   8,3      145180    130874 /sbin/init
init               1     root  mem REG   8,3      142472    665291 /lib/ld-2.12.so
init               1     root  mem REG   8,3      58704      655087 /lib/libnss_files-2.12.so

當然,我們也可以按照 PID 查詢進程調用的文件,比如執行“lsof -p 1”命令就可以查看 PID 為 1 的進程調用的所有文件。

【例 6】

[root@localhost ~]# lsof -u root
#按照用戶名查詢某個用戶的進程調用的文件
COMMAND PID USER  FD      TYPE   DEVICE   SIZE/OFF   NODE  NAME
init               1     root    cwd    DIR     8,3       4096          2           /
init               1     root    rtd      DIR     8,3       4096          2           /
init               1     root    txt      REG     8,3       145180     130874  /sbin/init
init               1     root    mem  REG     8,3       142472     665291  /lib/ld-2.12.so
init               1     root    mem  REG     8,3       58704       655087  /lib/libnss_files-2.12.s
init               1     root    mem  REG     8,3       38768       655310  /lib/libnih-dbus.so.1.0.
…省略部分輸出…

我們還可以查看某個用戶的進程調用了哪些文件。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩