歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下查看進程打開的文件與打開文件的進程

Linux下查看進程打開的文件與打開文件的進程

日期:2017/2/28 16:20:24   编辑:Linux教程

有許多情況下,我們需要查看一個進程當前打開了哪些文件,反過來我們也希望知道某一個文件正在被哪些進程所讀寫。在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即可恢復被刪除的文件。

Copyright © Linux教程網 All Rights Reserved