簡體   English   中英

如何找出哪個進程正在使用Linux中的文件?

[英]How find out which process is using a file in Linux?

我嘗試使用rm -rf file_name刪除 Linux 中的文件,但出現錯誤:

rm: file_name not removed.  Text file busy

我怎樣才能找出哪個進程正在使用這個文件?

您可以使用fuser命令,例如:

fuser file_name

您將收到使用該文件的進程列表。

您可以使用不同的標志,以便獲得更詳細的輸出。

您可以在fuser 的 Wikipedia 文章man頁中找到更多信息。

@jim 的回答是正確的—— fuser就是你想要的。

此外(或替代地),您可以使用lsof獲取更多信息,包括用戶名,以防您需要許可(無需運行其他命令)來終止進程。 (當然,如果您想要終止進程, fuser可以使用它的-k選項來做到這一點。您可以讓fuser使用帶有-s選項的其他信號——查看手冊頁了解詳細信息。)

例如,在一個窗口中運行tail -F /etc/passwd

ghoti@pc:~$ lsof | grep passwd
tail      12470    ghoti    3r      REG  251,0     2037 51515911 /etc/passwd

請注意,您還可以使用lsof來找出哪些進程正在使用特定的套接字。 您的武器庫中的絕佳工具。

對於沒有fuser的用戶:

雖然我們可以使用lsof ,但還有另一種方法,即我們可以查詢/proc文件系統本身,它列出了所有進程的所有打開文件。

# ls -l /proc/*/fd/* | grep filename

樣本output如下:

l-wx------。 1 root root 64 Aug 15 02:56 /proc/5026/fd/4 -> /var/log/filename.log

從 output,可以使用ps等實用程序中的進程 ID 來查找程序名稱

$ lsof | tree MyFold

如附圖所示:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM