我尝试使用
rm -rf file_name
在 Linux 中删除文件,但收到错误:
rm: file_name not removed. Text file busy
如何找出哪个进程正在使用该文件?
您可以使用
fuser
命令,它是 psmisc
包的一部分,例如:
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,但还有另一种方法,即我们可以查询 /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来查找程序名称