1. 程式人生 > >Linux fuser工具使用方法介紹

Linux fuser工具使用方法介紹

引言

fuser是linux中較常用的工具,"fuser"——從其名稱我們可以看出該工具的用途:查詢給定檔案或目錄的使用者或程序資訊。

除查詢檔案相關資訊之外,使用fuser還能向程序傳送SIGKILL等訊號,完成強制讓程序退出的功能,下面我們就來看fuser工具的具體使用方法。


以上命令查詢了/root目錄被哪些程序使用,輸出包含程序的PID以及字元’c’。字元’c’指示了程序的工作目錄,使用以下命令可進行驗證:

查詢檔案和目錄使用者
fuser最基本的用法是查詢某個檔案或目錄被哪個程序使用:

# fuser /root/root:               17923c 24869c

以上命令查詢了/root目錄被哪些程序使用,輸出包含程序的PID以及字元’c’。字元’c’指示了程序的工作目錄,使用以下命令可進行驗證:

# ls -l /proc/17923/cwdlrwxrwxrwx 1 root root 0 Apr 19 09:02 /proc/17923/cwd -> /root

PID後跟的字元說明了程序以何種方式與該目錄/檔案關聯,有以下關聯方式:

   指示程序的工作目錄

  e  指示該檔案為程序的可執行檔案(即程序由該檔案拉起)

  f  指示該檔案被程序開啟,預設情況下f字元不顯示

  F  指示該檔案被程序開啟進行寫入,預設情況下F字元不顯示

  r  指示該目錄為程序的根目錄

  m  指示程序使用該檔案進行記憶體對映,抑或該檔案為共享庫檔案,被程序對映進記憶體

使用-v選項將顯示更全的資訊:

# fuser -v /root            USER     PID    ACCESS   COMMAND/root:      root    17923    ..c..      bash            root    24869    ..c..      atop

下面我們使用一個埠監聽的例子,來看可執行檔案、socket埠使用程序的資訊查詢。

# ./socket &

以上socket程式是一個使用C編寫的小程式,起一個TCP服務端,監聽9999埠,程式碼請查附件。

執行完該程式時候,我們使用fuser進行查詢:

# fuser -v socket             USER    PID   ACCESS   COMMANDsocket:    root    11861
...e. socket

可以看到PID為11861與socket檔案的關聯方式為’e’,與上表所列相符。

查詢socket和檔案系統使用者

除了查詢檔案、目錄的相關使用程序,我們還可以對socket埠的使用者進行查詢。還是使用上面socket程式,我們對埠9999進行如下查詢:

# fuser -v -n tcp 9999              USER     PID    ACCESS   COMMAND9999/tcp:     root     11861   F....    socket

 -n獲取某一埠的程序資訊 henmap組合時尤其有用。。。。

另外,針對某檔案系統的使用者,我們可以使用-m引數進行查詢,對於以下分割槽的系統:

複製程式碼
# dfFilesystem           1K-blocks      Used     Available Use%  Mounted on/dev/sda2           15735128   10218084   5517044  65%  /udev                  4091824        168    4091656   1%  /dev/dev/sda3           47550928   43836764   3714164  93%  /home1/dev/sdb2           70627600   64344256   6283344  92%  /home2
複製程式碼

執行以下查詢命令:

# fuser -m /home1/home1:               2703ce

可以看到/dev/sda3分割槽的使用者為2703對應的程序,執行fuser –m /dev/sda3、fuser –m /home1/test將得到相同的結果。

使用fuser關閉程序

除了可以使用fuser進行查詢之外,fuser還可以向程序傳送訊號,讓程序退出:

# fuser -v -k socket             USER    PID   ACCESS   COMMANDsocket:      root  11861    ...e.    socket [1]+  Killed                  ./socket

-k選項表示向使用socket檔案的相關程序傳送SIGKILL訊號。除了傳送SIGKILL訊號之外,fuser還可以傳送以下訊號:

# fuser -l /homeHUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERMSTKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYSUNUSED

另外,加上-i選項,在KILL程序時,需要人為地進行確認:

# fuser -v -k -i socket            USER    PID   ACCESS   COMMANDsocket:     root   11861  ...e.     socketKill process 11861 ?(y/N)

小結

本文介紹了fuser工具的用法,fuser可用於查詢檔案、目錄、socket埠和檔案系統的使用程序,並且可以使用fuser關閉程序。

當檔案系統umount報device busy時,常用到fuser查詢並關閉使用相應檔案系統的程序。