lsof 命令

weixin_33968104發表於2019-01-14

轉載自:http://www.cnblogs.com/peida/archive/2013/02/26/2932972.html

1、說明

lsof(list open files)是一個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 (TCP) 和使用者資料包協議 (UDP) 套接字等,系統在後臺都為該應用程式分配了一個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。因為應用程式開啟檔案的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠檢視這個列表對系統監測以及排錯將是很有幫助的。

2、命令格式

lsof [引數][檔案]

3、命令功能

用於檢視你程式開打的檔案,開啟檔案的程式,程式開啟的埠(TCP、UDP)。找回/恢復刪除的檔案。是十分方便的系統監視工具,因為 lsof 需要訪問核心記憶體和各種檔案,所以需要root使用者執行。

lsof開啟的檔案可以是:

  1. 普通檔案
  2. 目錄
  3. 網路檔案系統的檔案
  4. 字元或裝置檔案
  5. (函式)共享庫
  6. 管道,命名管道
  7. 符號連結
  8. 網路檔案(例如:NFS)
  9. file、網路socket,unix域名socket)
  10. 還有其它型別的檔案,等等

4、命令引數

命令引數:

  1. -a 列出開啟檔案存在的程式
  2. -c<程式名> 列出指定程式所開啟的檔案
  3. -g 列出GID號程式詳情
  4. -d<檔案號> 列出佔用該檔案號的程式
  5. +d<目錄> 列出目錄下被開啟的檔案
  6. +D<目錄> 遞迴列出目錄下被開啟的檔案
  7. -n<目錄> 列出使用NFS的檔案
  8. -i<條件> 列出符合條件的程式。(4、6、協議、:埠、 @ip )
  9. -p<程式號> 列出指定程式號所開啟的檔案
  10. -u 列出UID號程式詳情
  11. -h 顯示幫助資訊
  12. -v 顯示版本資訊

5、使用例項

5.1 無任何引數

lsof

Out:

COMMAND     PID   TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME                                                                                                                        
systemd       1          root  cwd       DIR              253,2       259         64 /  
systemd       1          root  rtd       DIR              253,2       259         64 /  
systemd       1          root  txt       REG              253,2   1523624   18772623 /usr/lib/systemd/systemd
systemd       1          root  mem       REG              253,2     20040       1389 /usr/lib64/libuuid.so.1.3.0
systemd       1          root  mem       REG              253,2    256960       2777 /usr/lib64/libblkid.so.1.1.0
systemd       1          root  mem       REG              253,2     90664       1385 /usr/lib64/libz.so.1.2.7
systemd       1          root  mem       REG              253,2    157424       1300 /usr/lib64/liblzma.so.5.2.2
systemd       1          root  mem       REG              253,2     23968       1528 /usr/lib64/libcap-ng.so.0.0.0
systemd       1          root  mem       REG              253,2     19888       1555 /usr/lib64/libattr.so.1.1.0
systemd       1          root  mem       REG              253,2     19776       1237 /usr/lib64/libdl-2.17.so
systemd       1          root  mem       REG              253,2    398264       1371 /usr/lib64/libpcre.so.1.2.0
systemd       1          root  mem       REG              253,2   2127336       1224 /usr/lib64/libc-2.17.so
systemd       1          root  mem       REG              253,2    144792       1264 /usr/lib64/libpthread-2.17.so
systemd       1          root  mem       REG              253,2     88720       5041 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd       1          root  mem       REG              253,2     44448       1268 /usr/lib64/librt-2.17.so
systemd       1          root  mem       REG              253,2    265008       2925 /usr/lib64/libmount.so.1.1.0
systemd       1          root  mem       REG              253,2     91792       1765 /usr/lib64/libkmod.so.2.2.10
systemd       1          root  mem       REG              253,2    122984       1527 /usr/lib64/libaudit.so.1.0.0
systemd       1          root  mem       REG              253,2     61672       2855 /usr/lib64/libpam.so.0.83.1
systemd       1          root  mem       REG              253,2     20024       1559 /usr/lib64/libcap.so.2.22
systemd       1          root  mem       REG              253,2    155784       1382 /usr/lib64/libselinux.so.1
systemd       1          root  mem       REG              253,2    164112       1217 /usr/lib64/ld-2.17.so
systemd       1          root  mem       REG              253,2     44725   37811623 /etc/selinux/targeted/contexts/files/file_co

說明

lsof輸出各列資訊的意義如下:

  • COMMAND:程式的名稱
  • PID:程式識別符號
  • PPID:父程式識別符號(需要指定-R引數)
  • USER:程式所有者
  • PGID:程式所屬組
  • FD:檔案描述符,應用程式通過檔案描述符識別該檔案。如cwd、txt等

5.2 檢視誰正在使用某個檔案

檢視誰正在使用某個檔案,也就是說查詢某個檔案相關的程式

ls /bin/bash

Out:

lsof /bin/bash
COMMAND   PID USER  FD   TYPE DEVICE   SIZE    NODE NAME
bash    24159 root txt    REG    8,2 801528 5368780 /bin/bash
bash    24909 root txt    REG    8,2 801528 5368780 /bin/bash
bash    24941 root txt    REG    8,2 801528 5368780 /bin/bash

5.3 遞迴檢視某個目錄的檔案資訊

lsof +D dir

Out:

lsof +D /xcloud-parrot/       
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
dnsApi    882 root  txt    REG  253,2 12269800  2569184 /xcloud-parrot/dnsApi/bin/dnsApi
dnsApi    882 root    3u   REG  253,2     2710 19112944 /xcloud-parrot/dnsApi/var/dnsApi.log
dnsApi    882 root    5u   REG  253,2        0 19114009 /xcloud-parrot/dnsApi/var/gin.log
vim      2994 root    4u   REG  253,2    12288 54272069 /xcloud-parrot/dnsMonitor/config/.dnsMonitor.yaml.swp
zsh      6704 root  cwd    DIR  253,2       87 36546656 /xcloud-parrot/dnsIPv6Scheduler2/config
vim     26719 root    4u   REG  253,2    12288  2914545 /xcloud-parrot/dnsScheduler/config/.dnsScheduler.toml.swo

說明:lsof dir 不遞迴列車

5.4、列出某個使用者開啟的檔案資訊

lsof -u username

5.5 列出某個程式程式所開啟的檔案資訊

ls -c mysql

-c 選項將會列出所有以mysql這個程式開頭的程式的檔案,其實你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個字元了

5.6 列出多個程式多個開啟的檔案資訊

lsof -c mysql -c apache

5.7 列出某個使用者以及某個程式所開啟的檔案資訊

lsof -u test -c mysql

5.8 列出除了某個使用者外的被開啟的檔案資訊

lsof -u ^root

^這個符號在使用者名稱之前,將會把是root使用者開啟的程式不讓顯示

5.9 通過某個程式號顯示該進行開啟的檔案

lsof -p 1 (1是程式號)

5.10 列出多個程式號對應的檔案資訊

lsof -p 1,2,3

5.11 列出除了某個程式號,其他程式號所開啟的檔案資訊

lsof -p ^1

5.12 列出所有的網路連線

lsof -i

5.13 列出所有tcp 網路連線資訊

lsof -i tcp

5.14 列出所有udp網路連線資訊

lsof -i udp

5.15 列出誰在使用某個埠

lsof -i :3306

5.16 列出誰在使用某個特定的udp埠

lsof -i udp:55

5.17 列出誰在使用某個特定的tdp埠

ls -i tcp:55

5.18 列出某個使用者的所有活躍的網路埠

lsof -a -u root -i 

5.19 列出所有的網路檔案系統

loof -N 

5.20 某個使用者組所開啟的檔案資訊

lsof  -g 5555

5.21 根據檔案描述列出對應的檔案資訊

lsof -d description(like 2)

例如:lsof  -d  txt

例如:lsof  -d  1

例如:lsof  -d  2

說明

0表示標準輸入,1表示標準輸出,2表示標準錯誤,從而可知:所以大多數應用程式所開啟的檔案的 FD 都是從 3 開始

5.22 根據檔案描述範圍列出檔案資訊

lsof -d 2-3

5.23 列出COMMAND列中包含字串" sshd",且檔案描符的型別為txt的檔案資訊

lsof -c sshd -a -d tex

5.24 列出被程式號為1234的程式所開啟的所有IPV4 network files

lsof -i 4 -a -p 1234

5.25 列出目前連線主機peida.linux上埠為:20,21,22,25,53,80相關的所有檔案資訊,且每隔3秒不斷的執行lsof指令

lsof -i @peida.linux:20,21,22,25,53,80  -r  3

相關文章