Linux 中如何找出哪个进程正在使用文件?

问题描述 投票:0回答:4

我尝试使用

rm -rf file_name
在 Linux 中删除文件,但收到错误:

rm: file_name not removed.  Text file busy

如何找出哪个进程正在使用该文件?

linux ps
4个回答
169
投票

您可以使用

fuser
命令,它是
psmisc
包的一部分,例如:

fuser file_name

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

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

您可以在 fuser 的维基百科文章

man
页面中找到更多信息。


45
投票

@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
来找出哪些进程正在使用特定套接字。这是您的武器库中值得拥有的绝佳工具。


9
投票

对于没有定影器的用户:

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

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

下面的示例输出:

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

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


-5
投票
$ lsof | tree MyFold

如附图所示:

© www.soinside.com 2019 - 2024. All rights reserved.