1. 程式人生 > >lsof-檢視程序控制代碼

lsof-檢視程序控制代碼

 

[email protected]:~# lsof
COMMAND    PID  TID       USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
systemd      1            root  cwd       DIR              179,3     4096        2 /
systemd      1            root  rtd       DIR              179,3     4096        2 /
systemd      
1 root txt REG 179,3 1117560 11048 /lib/systemd/systemd systemd 1 root mem REG 179,3 18576 11427 /lib/libattr.so.1.1.0 systemd 1 root 0u CHR 1,3 0t0 1053 /dev/null systemd 1 root 1u
CHR 1,3 0t0 1053 /dev/null systemd 1 root 2u CHR 1,3 0t0 1053 /dev/null systemd 1 root 3w CHR 1,11 0t0 1058 /dev/kmsg systemd 1 root 4u a_inode 0,10 0 28
[eventpoll] systemd 1 root 6r DIR 0,21 0 1 /sys/fs/cgroup/systemd systemd 1 root 10r REG 0,4 0 3703 /proc/1/mountinfo systemd 1 root 11r a_inode 0,10 0 28 inotify systemd 1 root 12u unix 0xffff8005fcae8480 0t0 327 /run/systemd/notify type=DGRAM systemd 1 root 24u a_inode 0,10 0 28 [timerfd] systemd 1 root 27u FIFO 0,19 0t0 349 /run/systemd/initctl/fifo systemd 1 root 28r a_inode 0,10 0 28 inotify systemd 1 root 29u netlink 0t0 359 AUDIT systemd 1 root 34u IPv6 497 0t0 TCP *:ssh (LISTEN)

FD 列中的檔案描述符:

cwd 值表示應用程式的當前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改。
txt 型別的檔案是程式程式碼,如應用程式二進位制檔案本身或共享庫,如上列表中顯示的 /sbin/init 程式。
數值 表示應用程式的檔案描述符,這是開啟該檔案時返回的一個整數。u 表示該檔案被開啟並處於讀取/寫入模式,而不是隻讀或只寫模式。同時還有大寫的 W 表示該應用程式具有對整個檔案的寫鎖。
       該檔案描述符用於確保每次只能開啟一個應用程式例項。初始開啟每個應用程式時,都具有三個檔案描述符,從 0 到 2,分別表示標準輸入、輸出和錯誤流。所以大多數應用程式所開啟的檔案
      的 FD 都是從 3 開始。

Type:
列則比較直觀,檔案和目錄分別稱為 REG 和 DIR。而CHR 和 BLK,分別表示字元和塊裝置;或者 UNIX、FIFO 和 IPv4,分別表示 UNIX域套接字、先進先出(FIFO)佇列和網際協議(IP)套接字。

 

常用引數列表

lsof 列出系統開啟的檔案

lsof filename 開啟指定檔案的所有程序

lsof -p PID 列出指定的程序號開啟的檔案,和-c類似。

lsof -a 表示兩個引數都必須滿足時才顯示結果

lsof -c string 顯示COMMAND列中包含指定字元的程序所有開啟的檔案 這個可以用於檢視Navi的

lsof -u username 顯示所屬user程序開啟的檔案,eg: lsof -u root

lsof -g gid 顯示歸屬gid的程序情況

lsof +d /DIR/ 顯示目錄下被程序開啟的檔案,實測這個有時不好用,不要進入到測試目錄,以免干擾。 這個也可以用於查證

lsof +D /DIR/ 同上,但是會搜尋目錄下的所有目錄,時間相對較長。這個好用

lsof -d FD 顯示指定檔案描述符的程序,eg:# lsof -d 30 會顯示出包含fd=30的所有程序。

lsof -n 不將IP轉換為hostname,預設是不加上-n引數

lsof -i 用以顯示符合條件的程序情況,???
  lsof -i[4/6] [protocol][@hostname|hostaddr][:service|port]
  46 --> IPv4 or IPv6
  protocol --> TCP or UDP
  hostname --> Internet host name
  hostaddr --> IPv4地址
  service --> /etc/service中的 service name (可以不只一個)
  port --> 埠號 (可以不只一個)