LSOF 和 FUSER

fuser 指令

用途
使用文件或文件結構識別進程。

語法
fuser [ -c | -d | -f ] [ -k ] [ -u ] [ -x ] [ -V ]文件 ...

說明
此 fuser 命令列出了本地進程的進程號,那些本地進程使用File 參數指定的本地或遠程文件。對於阻塞特別設備,此命令列出了使用該設備上任何文件的進程。

每個進程號後面都跟隨一個字母,該字母指示進程如何使用文件。

c 將此文件作爲當前目錄使用。
e 將此文件作爲程序的可執行對象使用。
r 將此文件作爲根目錄使用。
s 將此文件作爲共享庫(或其它可裝載對象)使用。

進程號被寫入標準輸出(在進程號之間有空格的行中)。一個換行符被寫入標準錯誤(在每個文件操作數的最後一個輸出之後)。其他所有輸出被寫入標準錯誤。

此 fuser 命令不會檢測有 mmap 區域的進程,其中相關的文件描述符已從此被關閉。

標記

-c 包含 File的文件系統中關於任何打開的文件的報告。
-d 暗示使用了 -c 和 -x 標誌。關於任何與文件系統(自父目錄刪除的)無鏈接的打開文件的報告。當與 -V 標誌一起使用時,它也會報告被刪除文件的節點號和大小。
-f 僅對文件的打開實例報告。
-k 將 SIGKILL 信號發送到每個本地進程。僅有根用戶能終止另一用戶的進程。
-u 爲進程號後圓括號中的本地進程提供登錄名。
-V 提供詳細輸出。
-x 與 -c 或 -f 連用,報告除標準 fuser 輸出以外的可執行的和可載入的對象。

示例
若要列出使用 /etc/passwd 文件的本地進程的進程號,請輸入:

fuser /etc/passwd要列出使用 /etc/filesystems 文件的進程的進程號和用戶登錄名,請輸入:

fuser -u /etc/filesystems要終止全部使用給定的文件系統的進程,請輸入:

fuser -k -x -u /dev/hd1 -OR-
fuser -kxuc /home任一命令都列出了進程號和用戶名,然後終止每個正在使用 /dev/hd1 (/home) 文件系統的進程。僅有根用戶能終止屬於另一用戶的進程。如果你正在試圖卸下 /dev/hd1 文件系統,而一個正在訪問 /dev/hd1 文件系統的進程不允許這樣,您可能希望使用此命令。

要列出正在使用文件(已從給定文件系統刪除的文件)的全部進程,請輸入:

fuser -d /usr文件

/dev/kmem 用於系統映象。
/dev/mem 也用於系統映象。

相關信息
killall 命令、mount 命令和 ps 命令。

LSOF:

  1) lsof abc.txt 顯示開啓文件abc.txt的進程

  2) lsof -i :22 知道22端口現在運行什麼程序

  3) lsof -c nsd 顯示nsd進程現在打開的文件

  4) lsof -g gid 顯示歸屬gid的進程情況

  5) lsof +d /usr/local/ 顯示/usr/local目錄下被進程開啓的文件

  6) lsof +D /usr/local/ 同上,但是會搜索目錄下的目錄,時間較長

  7) lsof -d 4 顯示使用fd爲4的進程

  8) lsof -i [i] 用以顯示符合條件的進程情況

  語法: lsof -i[46] [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 --> 端口號 (可以不只一個)

  例子: TCP:25 - TCP and port 25

  @1.2.3.4 - Internet IPv4 host address 1.2.3.4

  [email protected]:ftp - TCP protocol host:ohaha.ks.edu.tw service name:ftp

  9) lsof -n 不將IP轉換爲hostname,缺省是不加上-n參數

  例子: lsof -i [email protected]:ftp -n

  10) lsof -p 12 看進程號爲12的進程打開了哪些文件

  11) lsof +|-r [t] 控制lsof不斷重複執行,缺省是15s刷新

  -r,lsof會永遠不斷的執行,直到收到中斷信號

  +r,lsof會一直執行,直到沒有檔案被顯示

  例子:不斷查看目前ftp連接的情況:lsof -i [email protected]:ftp -r

  12) lsof -s 列出打開文件的大小,如果沒有大小,則留下空白

  13) lsof -u username 以UID,列出打開的文件
查看某個port被那些程式打開的語法如下:

lsof -i TCP:port -n
lsof -i UDP:port -n

lsof -i :port -n


# lsof -i tcp:1521 -n

 LSOF是針對Unix的診斷和分析工具,它能顯示出由系統里正在運行的進程所打開的文件,也能顯示出每一個進程的通訊socket。

Contents

    * 查看對某個文件的使用情況
    * 查看對文件系統的使用
          o 查找打開,但是不能連接的文件

    * 無法卸載
    * 查看監聽socket
    * 查看某個網絡連接
    * 識別 Netstat 連接
    * 查找針對某個命令打開的文件
    * 查看某個用戶的操作
    * 更多信息
    * Bibliography

查看對某個文件的使用情況

查看哪些進程對某個文件進行了調用:

$ lsof /etc/passwd

查看對文件系統的使用

/tmp目錄被垃圾文件塞滿了, 但是, 用ls 又看不到太大文件, 誰幹的?

$ lsof /tmp

查找打開,但是不能連接的文件

一個進程打開一個文件, 然後將其設爲 unlinked 狀態, 則此文件資源仍能被進程使用, 但是其訪問路徑已經被刪除了. 因此, 使用ls不能將其列出. 只有當進程結束時, 才能釋放文件佔用的資源

查找unlinked 文件, 選項 +L, 作用: 列出打開文件的連接數

$lsof +L

指定連接數的上限 $lsof +L1

同時指定文件系統, 則需要使用 -a(AND) 選項

$ lsof -a +L1 /home

無法卸載

查看誰令mount的分區無法卸載

$ lsof <file_system_name>

查看監聽socket
查看網絡服務

$ lsof -i

查看某個網絡連接

$ lsof [email protected]

$ lsof [email protected]:ftp-data *指定協議*

$ lsof -i4 *指定IP版本*

$ lsof -i6

識別 Netstat 連接
例如: netstat -p -t -n 的輸出爲:

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 218.56.203.246:52634 202.109.72.72:7000 ESTABLISHED

則可以: tony@tony:~$ lsof [email protected]:7000

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

xchat 4505 tony 12u IPv4 5775 TCP 218.56.203.246:52634->202.109.72.72:afs3-fileserver (ESTABLISHED)

查找針對某個命令打開的文件

使用命令的PID

$ lsof -p <PID>

使用命令名稱

$ lsof -c <first_characters_of_command_name_that_interest_you>

$ lsof -c sendmail

查看誰在使用設備文件

$ lsof /dev/hda6
查看某個用戶的操作

$ id -u tony

1000

$ lsof -u1000 or $ lsof -utony

$ lsof -u^tony * 則是取反的意思* 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章