查詢進程開啟的檔案)

來源:互聯網
上載者:User
fuser

有的時候我想要知道我的程式到底在這次啟動過程中開啟了多少檔案,可以利用 fuser 來觀察啦! 舉例來說,你如果卸載時發現系統通知:『 device is busy 』,那表示這個檔案系統正在忙碌中, 表示有某支程式有利用到該檔案系統啦!那麼你就可以利用 fuser 來追蹤羅!fuser 文法有點像這樣:

[root@www ~]# fuser [-umv] [-k [i] [-signal]] file/dir選項與參數:-u  :除了程式的 PID 之外,同時列出該程式的擁有者;-m  :後面接的那個檔名會主動的上提到該檔案系統的最頂層,對 umount 不成功很有效!-v  :可以列出每個檔案與程式還有命令的完整相關性!-k  :找出使用該檔案/目錄的 PID ,並試圖以 SIGKILL 這個訊號給予該 PID;-i  :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意願!-signal:例如 -1 -15 等等,若不加的話,預設是 SIGKILL (-9) 羅!範例一:找出目前所在目錄的使用 PID/所屬帳號/許可權 為何?[root@www ~]# fuser -uv .                     USER        PID ACCESS COMMAND.:                   root      20639 ..c.. (root)bash

看到輸出的結果沒?他說『.』底下有個 PID 為 20639 的程式,該程式屬於 root 且命令為 bash 。 比較有趣的是那個 ACCESS 的項目,那個項目代表的意義為:

  • c :此程式在當前的目錄下(非次目錄);
  • e :可被觸發為運行狀態;
  • f :是一個被開啟的檔案;
  • r :代表頂層目錄 (root directory);
  • F :該檔案被開啟了,不過在等待回應中;
  • m :可能為分享的動態函式庫;

那如果你想要查閱某個檔案系統底下有多少程式正在佔用該檔案系統時,那個 -m 的選項就很有協助了! 鳥哥的測試主機僅有分割出 /, /boot, /home ,所以無法進行測試。不過好在還有個 /proc 的虛擬檔案系統, 讓我們來瞭解一下這個 /proc 的檔案系統有多少程式正在利用他吧!

範例二:找到所有使用到 /proc 這個檔案系統的程式吧![root@www ~]# fuser -uv /proc# 不會顯示任何資料,因為沒有任何程式會去使用 /proc 這個目錄啊!# 會被用到的是 /proc 底下的檔案啦!所以你應該要這樣做:[root@www ~]# fuser -mvu /proc                     USER        PID ACCESS COMMAND/proc:               root       4289 f.... (root)klogd                     root       4555 f.... (root)acpid                     haldaemon  4758 f.... (haldaemon)hald                     root       4977 F.... (root)Xorg# 有這幾支程式在進行 /proc 檔案系統的存取喔!這樣清楚了嗎?

既然可以針對整個檔案系統,那麼能不能僅針對單一檔案啊?當然可以羅!看一下底下的案例先:

範例三:找到 /var 底下屬於 FIFO 類型的檔案,並且找出存取該檔案的程式[root@www ~]# find /var -type p/var/gdm/.gdmfifo     <==我們針對這玩意即可!/var/run/autofs.fifo-misc/var/run/autofs.fifo-net[root@www ~]# fuser -uv /var/gdm/.gdmfifo                     USER        PID ACCESS COMMAND/var/gdm/.gdmfifo:   root       4892 F.... (root)gdm-binary範例四:同範例三,但試圖刪除該 PID?且『不要』刪除喔![root@www ~]# fuser -ki /var/gdm/.gdmfifo/var/gdm/.gdmfifo:    4892Kill process 4892 ? (y/N) n

如何?很有趣的一個命令吧!透過這個 fuser 我們可以找出使用該檔案、目錄的程式,藉以觀察的啦! 他的重點與 ps, pstree 不同。 fuser 可以讓我們瞭解到某個檔案 (或檔案系統) 目前正在被哪些程式所利用!

 

lsof

相對於 fuser 是由檔案或者裝置去找出使用該檔案或裝置的程式,反過來說, 如何查出某個程式開啟或者使用的檔案與裝置呢?呼呼!那就是使用 lsof 羅~

[root@www ~]# lsof [-aUu] [+d]選項與參數:-a  :多項資料需要『同時成立』才顯示出結果時!-U  :僅列出 Unix like 系統的 socket 檔案類型;-u  :後面接 username,列出該使用者相關程式所開啟的檔案;+d  :後面接目錄,亦即找出某個目錄底下已經被開啟的檔案!範例一:列出目前系統上面所有已經被開啟的檔案與裝置:[root@www ~]# lsofCOMMAND PID  USER   FD  TYPE  DEVICE   SIZE     NODE NAMEinit      1  root  cwd   DIR     3,2   4096        2 /init      1  root  rtd   DIR     3,2   4096        2 /init      1  root  txt   REG     3,2  38620  1426405 /sbin/init....(底下省略)....# 注意到了嗎?是的,在預設的情況下, lsof 會將目前系統上面已經開啟的# 檔案全部列出來~所以,畫面多的嚇人啊!您可以注意到,第一個檔案 init 啟動並執行# 地方就在根目錄,而根目錄,嘿嘿!所在的 inode 也有顯示出來喔!範例二:僅列出關於 root 的所有程式開啟的 socket 檔案[root@www ~]# lsof -u root -a -UCOMMAND     PID USER   FD   TYPE     DEVICE SIZE   NODE NAMEudevd       400 root    3u  unix 0xedd4cd40        1445 socketauditd     4256 root    7u  unix 0xedd4c380        9081 socketaudispd    4258 root    0u  unix 0xedd4c1e0        9080 socket# 注意到那個 -a 吧!如果你分別輸入 lsof -u root 及 lsof -U ,會有啥資訊?# 使用 lsof -u root -U 及 lsof -u root -a -U ,呵呵!都不同啦!# -a 的用途就是在解決同時需要兩個項目都成立時啊! ^_^範例三:請列出目前系統上面所有的被啟動的周邊裝置[root@www ~]# lsof +d /devCOMMAND     PID      USER   FD   TYPE     DEVICE SIZE  NODE NAMEinit          1      root   10u  FIFO       0,16       1147 /dev/initctludevd       400      root    0u   CHR        1,3       1420 /dev/nulludevd       400      root    1u   CHR        1,3       1420 /dev/nulludevd       400      root    2u   CHR        1,3       1420 /dev/null# 看吧!因為裝置都在 /dev 裡面嘛!所以羅,使用搜尋目錄即可啊!範例四:秀出屬於 root 的 bash 這支程式所開啟的檔案[root@www ~]# lsof -u root | grep bashbash   20639 root  cwd    DIR    3,2    4096    648321 /rootbash   20639 root  rtd    DIR    3,2    4096         2 /bash   20639 root  txt    REG    3,2  735004   1199424 /bin/bashbash   20639 root  mem    REG    3,2   46680     64873 /lib/libnss_files-2.5.so....(底下省略)....

這個命令可以找出您想要知道的某個程式是否有啟用哪些資訊?例如上頭提到的範例四的運行結果呢!

轉自 http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol_4.php

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.