我试图在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来查找程序名称