linux-fuser命令

不一樣的天空w發表於2018-04-03
[root@localhost test ~]$ fuser
No process specification given
Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
             [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
       fuser -l
       fuser -V
Show which processes use the named files, sockets, or filesystems.

    -a        display unused files too
    -c        mounted FS
    -f        silently ignored (for POSIX compatibility)
    -i        ask before killing (ignored without -k)
    -k        kill processes accessing the named file
    -l        list available signal names
    -m        show all processes using the named filesystems
    -n SPACE  search in this name space (file, udp, or tcp)
    -s        silent operation
    -SIGNAL   send this signal instead of SIGKILL
    -u        display user IDs
    -v        verbose output
    -V        display version information
    -4        search IPv4 sockets only
    -6        search IPv6 sockets only
    -         reset options

  udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]

[oracle@acctdb01 ~]$  

fuser命令用於報告程式使用的檔案和網路套接字。fuser命令列出了本地程式的程式號,那些本地程式使用file,引數指定的本地或遠端檔案。對於阻塞特別裝置,此命令列出了使用該裝置上任何檔案的程式。
fuser:identify processes using files or sockets :可以顯示出當前哪個程式在使用磁碟上的某個檔案、掛載點、甚至網路埠,並給出程式程式的詳細資訊

常用引數及說明:更多詳細資訊可以參考man fuser頁面

    -u:除了程式的PID之外,同時列出該程式的owner
    -v:列出更多的資訊
    -m:後面接的檔名會主動上提到該檔案系統的最頂層,對umount不成功很有幫助
    
例子:

1. 查詢當前目錄下的程式

[root@localhost test]# fuser -uv .  
 
                     USER        PID ACCESS COMMAND  
.:                   root       3784 ..c.. (root)bash  
                     root       3815 ..c.. (root)bash  
                     root       9998 ..c.. (root)bash  
                     root      28673 ..c.. (root)vi  

ACCES列說明:

    c:此程式在當前目錄下
    e:當執行的時候可執行
    f:開啟檔案,預設狀態下被忽略
    F:開啟檔案等待被寫入,同f一樣,預設狀態下被忽略
    r:root directory,根目錄
    m:可能為共享庫    
    
2. 查詢正在使用檔案的程式資訊

[root@rhel6164 ~]# fuser -uv 檔名  
[clef@rhel6164 ~]$ fuser -uv /home/clef/log.txt #用log.txt檢視不到正在使用的程式  
[clef@rhel6164 ~]$ fuser -uv /home/clef/.log.txt.swp #用.log.txt.swp可以檢視到正在使用的程式  
                     USER        PID ACCESS COMMAND  
/home/clef/.log.txt.swp:  
                     clef      32744 F.... (clef)vim  
                         
--要列出使用/etc/passwd檔案的本地程式的程式號,請輸入:
fuser /etc/passwd

--要列出使用/etc/filesystems檔案的程式的程式號和使用者登入名,請輸入:
fuser -u /etc/filesystems   

--要終止使用給定檔案系統的所有程式,請輸入:
fuser -k -x -u -c /dev/hd1  或者  fuser -kxuc /home

--要列出正在使用已從給定檔案系統刪除的檔案的全部程式,請輸入:
fuser -d /usr檔案                     
                         
3. 當umount不成功的時候,用fuser查詢所佔用檔案系統的程式

[root@localhost test]# df -h /mnt/linux_share/ #/mnt/linux_share為mount的檔案系統  
Filesystem            Size  Used Avail Use% Mounted on  
xx.xx.xx.xx:linux_share  
                      299G  156G  144G  52% /mnt/linux_share  
[root@localhost test]# umount /mnt/linux_share/ #當umount的時候提示裝置正忙  
umount: /mnt/linux_share: device is busy  
umount: /mnt/linux_share: device is busy  
[root@localhost test]# fuser -muv /mnt/linux_share/ #透過fuser檢視正在佔用該檔案系統的程式  
 
                     USER        PID ACCESS COMMAND  
/mnt/linux_share/:   root       3815 ..c.. (root)bash   
    
--執行下面命令殺掉佔用此裝置的程式
fuser -m -v -k/mnt/linux_share/
或者fuser -m -v -k -i  /mnt/linux_share/(每殺掉一下程式會讓你確認)   

4. 檢視那些程式使用tcp的80埠:
$fuser -n tcp 80
或$fuser -v -n tcp 80
或$fuser -v 80/tcp
這裡,後兩種方式顯示的資訊比較全,因為有了-v選項

# fuser -v 111/udp 111/tcp
                     使用者     程式號 許可權   命令
111/udp:             rpc         968 F.... rpcbind
111/tcp:             rpc         968 F.... rpcbind

如上例子中第4列的許可權也成訪問型別,如下:
c 代表當前目錄                  F 開啟的檔案,用於寫操作。預設不顯示。
e 可執行的被執行                 m 對映檔案或者共享庫。
f 開啟的檔案。預設不顯示。         r 根目錄。                          

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2152550/,如需轉載,請註明出處,否則將追究法律責任。

相關文章