我尝试到rm -rf
一个文件夹,并得到“设备或资源繁忙”。
在Windows中,我将使用LockHunter来解决此问题。什么是linux等价物?(请提供一个简单的“解锁此方法”作为答案,而不是像这样的完整文章。尽管它们很有用,但我目前仅对ASimpleMethodThatWorks™感兴趣)
rm -rf /
……它将愉快地删除每个文件,包括/ bin / rm。
我尝试到rm -rf
一个文件夹,并得到“设备或资源繁忙”。
在Windows中,我将使用LockHunter来解决此问题。什么是linux等价物?(请提供一个简单的“解锁此方法”作为答案,而不是像这样的完整文章。尽管它们很有用,但我目前仅对ASimpleMethodThatWorks™感兴趣)
rm -rf /
……它将愉快地删除每个文件,包括/ bin / rm。
Answers:
您需要的工具是lsof
代表打开文件列表的工具。
它有很多选项,因此请查看手册页,但是如果要查看目录下的所有打开文件:
lsof +D /path
该操作将通过下的文件系统进行递归/path
,因此请注意在大型目录树上进行操作。
一旦知道哪些进程打开了文件,就可以退出这些应用程序,或使用kill(1)
命令将其杀死。
/path
。这是隐藏的“打开文件”的原因之一。
lsof
似乎对我无能为力:lsof storage/logs/laravel.log
什么也没退,所以也没做lsof +D storage/logs/
。umount
回应not mounted
。
mount | grep <path>
。这表明任何/dev/<abc>
可能已安装在上<path>
。使用sudo umount -lf /dev/<abc>
,然后尝试将其删除<path>
。为我工作。感谢@camh
我用fuser
这种东西。它将列出哪个进程正在使用安装中的一个或多个文件。
fuser
仅在要卸载文件系统时才有帮助。这里的问题是找到正在使用特定文件的文件。
fuser
此处无济于事,因为问题在于在目录树中找到所有打开的文件。您可以告诉lsof
显示所有文件和过滤器,或者使其递归;fuser
没有这种模式,需要在每个文件上调用。
fuser
作品将列出。试试看fuser /var/log/*
,如果有任何日志打开,它将告诉哪些日志以及谁打开了。如果使用简单的通配符,find
不管有没有,都不会起作用xargs
。
lsof
当时不在我的路上fuser
,允许我找到要杀死的有问题的进程ID,因此+1+表示感谢。
我遇到了同样的问题,以@camh推荐开始构建了一个单行代码:
lsof +D ./ | awk '{print $2}' | tail -n +2 | xargs kill -9
该awk
命令获取PIDS。该tail
命令将删除讨厌的第一个条目:“ PID”。我用-9
杀了,其他人可能有更安全的选择。
如果您可以访问服务器,请尝试
从服务器删除该目录
或者,执行umount并再次安装,umount -l
如果遇到正常umount上的任何问题,请尝试:lazy umount。
我也有这个问题
lsof +D path
:无输出
ps -ef
:未提供任何相关信息