如何找出在Linux中使用文件的进程?

khr*_*ris 78 linux ps

我试图在Linux中删除一个文件rm -rf file_name,但得到了错误:

rm: file_name not removed.  Text file busy
Run Code Online (Sandbox Code Playgroud)

如何找出使用此文件的进程?

jim*_*-cl 115

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

fuser file_name
Run Code Online (Sandbox Code Playgroud)

您将收到使用该文件的进程列表.

您可以使用不同的标志,以便获得更详细的输出.

您可以在热熔器的维基百科文章或man页面中找到更多信息.


gho*_*oti 27

@ 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
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以使用lsof查找使用特定套接字的进程.在你的武器库中有一个很好的工具.


小智 10

对于没有定影器的用户:

虽然我们可以使用lsof,但还有另一种方法,即我们可以查询/proc文件系统本身,它列出了所有进程打开的所有文件。

ls -l /proc/*/fd/* | grep filename
Run Code Online (Sandbox Code Playgroud)

示例输出如下:

l-wx------. 1 root root  64 Aug 15 02:56 /proc/5026/fd/4 -> /var/log/filename.log
Run Code Online (Sandbox Code Playgroud)

从输出中,可以使用ps等实用程序中的进程 ID来查找程序名称