(轉)查看進程打開了哪些文件&某一個文件正在被哪些進程所讀寫

有許多狀況下,咱們須要查看一個進程當前打開了哪些文件,反過來咱們也但願知道某一個文件正在被哪些進程所讀寫。在Linux下有許多有用的工具能夠幫咱們完成這兩個工做,下面介紹這兩個工具:lsof與fuser。     fuser find files or sockets' user      格式:fuser [選項] fname      -k 若是找到打開文件的進程,則發送SIGKILL殺死此進程,經過-i選項,能夠爲用戶提供交互選擇     -signal 用戶能夠指定使用何種信號去kill進程,若是-k參數指定,則忽略此參數     -m 若是指定一個文件,則全部訪問那個文件所在文件系統的進程都會被列出來     -n  type 指定不一樣的文件類型,默認類型爲file,此外還支持tcp和udp類型,此時能夠簡寫做port/tcp     -u  顯示進程屬主     -v  顯示詳細進程與打開文件信息     -4/-6 只搜索IPv4/IPv6套接字     例如,咱們想查看端口TCP端口9000由哪一個進程打開 fuser -v -u 9000/tcp              查看哪些進程在訪問/home掛載分區              fuser -mv /home     lsof list open file      格式:lsof  [選項] [names]     單獨執行lsof將輸出系統中全部打開的文件,咱們能夠grep過濾出咱們關心的內容,不過lsof提供了相應的參數幫助咱們精確查找     lsof name 將輸出全部使用文件name的進程     -p pid 列出進程pid所打開的全部文件     -d FD_pattern 列出全部已經打開的FD值爲FD_pattern的文件FD的值有整數,TXT,MEM等等     -a lsof後能夠加多個匹配條件,默認爲or鏈接,此參數將多個條件變成and關係     -i [46] [proto] [@hostname|ip][:service|port] 用來選擇佔用某個端口的進程     +d/+D dir 非遞歸或遞歸的顯示打開dir下文件的進程     -c string   顯示進程的command中包含string的進程所打開的文件     -u username 顯示屬於user的進程所打開的文件     -g gid      以上這些參數已經足夠用了,上面這兩個工具都是讀取/proc文件系統中的數據進行工做的。網上有提到藉助於lsof的查找功能,能夠對一個刪除的文件進行恢復,前提是佔用這個文件的進程當前尚未關閉。經過被刪除的文件,找到對應的進程及在進程中的fd-num,而後經過cat /proc/process-num/fd/fd-num便可恢復被刪除的文件。
相關文章
相關標籤/搜索