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

我试图使用 rm -rf file_name删除 Linux 中的一个文件,但是得到了这个错误:

rm: file_name not removed.  Text file busy

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

190069 次浏览

You can use the fuser command, like:

fuser file_name

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

您可以对它使用不同的标志,以便接收更详细的输出。

你可以在 Fuser 的维基百科文章或者 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查找使用特定套接字的进程。一个非常好的工具,在你的武器库。

$ lsof | tree MyFold

如附图所示:

enter image description here

对于没有 fuser的用户:

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

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

样本输出如下:

L-wx —— . 1 root 根64 Aug 1502:56/proc/5026/fd/4->/var/log/filename.log

从输出中,可以使用实用程序(如 注意)中的进程 ID 查找程序名