rm -rf
,并出现“设备或资源繁忙”的情况。在Windows中,我本可以使用LockHunter来解决此问题。什么是linux等价物? (请给出一个简单的“解锁此”方法的答案,而不是像这样的完整文章。尽管它们很有用,但我目前仅对ASimpleMethodThatWorks™感兴趣)
#1 楼
您需要的工具是lsof
,它代表列表打开文件。它有很多选项,因此请查看手册页,但是如果要查看目录下的所有打开文件:
lsof +D /path
这将遍历
/path
下的文件系统,因此请注意在大型目录树上进行操作。一旦知道哪些进程打开了文件,您可以退出这些应用,或使用
kill(1)
命令将其杀死。评论
如果没有结果怎么办?
–游艇
2014年2月4日15:04
@marines:检查是否在/ path下安装了另一个文件系统。这是隐藏的“打开文件”的原因之一。
– camh
2014年2月5日,9:16
lsof命令直接到路径不起作用。所以基本上需要进入路径位置,然后运行lsof busy_file,然后杀死所有进程
– J4cK
16年7月4日在11:56
lsof似乎对我无能为力:lsof storage / logs / laravel.log不返回任何内容,而lsof + D storage / logs /也是如此。 umount响应未安装。
–瑞安
18年5月25日在1:01
只是详细说明@camh答案:使用mount | grep <路径>。这表明任何/ dev /
– Vikas Goel
18年6月27日在23:33
#2 楼
有时是挂载问题的结果,所以我将卸载要尝试删除的文件系统或目录:umount / path
评论
四分之一到四分之一。谢谢你,我救了我一晚。搞笑单行-浪费了很多时间-.-'
– Aiyion.Prime
15年6月23日在1:48
我的问题是将日志目录挂载为/ dev / mapper / vg00-root
– Spikolynn
15年12月27日在21:56
帮助我摆脱绕线机的类似卡纸。
–乔恩
16年5月9日在17:44
就我而言,Jenkins在任务中止后没有卸载chroot目录
–扎尔肯
16年3月3日,下午3:46
我加入这个社区只是为了标记这个答案!
–克里斯·孔雀(Chris Peacock)
19年1月23日在22:50
#3 楼
我用fuser
做这种事情。它将列出哪个进程正在使用一个文件或一个装载中的文件。 评论
当您要卸载文件系统时,fuser仅在特定情况下有用。这里的问题是查找正在使用特定文件的文件。
–吉尔斯'所以-不再是邪恶的'
2011年4月13日在19:09
@Gilles:也适用于文件。
–BillThor
2011年4月14日在0:36
抱歉,提出了错误的反对意见:热熔器在这里无济于事,因为问题在于在目录树中找到所有打开的文件。您可以告诉lsof显示所有文件和过滤器,或者使其递归; fuser没有这种模式,需要在每个文件上调用。
–吉尔斯'所以-不再是邪恶的'
2011年4月14日在7:57
@Giles:定影器工作将列出。试试fuser / var / log / *,如果打开了任何日志,它将告诉哪些日志以及谁打开了它。如果一个简单的通配符不起作用,则查找带有或不带有xargs的查找将起作用。
–BillThor
2011年4月14日在17:23
lsof不在我的路上,而热熔器在我的路上,这使我能够找到有问题的进程ID予以杀死,因此+1+表示感谢。
–stevesliva
2015年10月13日在19:48
#4 楼
解决方法如下:进入目录并键入
ls -a
您会找到一个
.xyz
文件vi .xyz
并查看文件的内容是什么?ps -ef | grep username
您将在第八列(最后一行)中看到.xyz内容。
kill -9 job_ids
-其中job_ids是第二列的值导致第8列中内容出现相应错误的原因现在尝试删除文件夹或文件。
评论
知道那些神秘文件来自何处会很有趣。
–John WH Smith
14年8月12日在20:59
谢谢! -这是我可以在Cygwin中使用的唯一答案。荣誉
–丹尼·舒曼(Danny Schoemann)
20年8月5日在16:34
在我的情况下,这不起作用,根本没有.xyz文件。
–HorstKevin
20-10-15在10:57
#5 楼
我在具有NFS网络文件系统的服务器上经常遇到这种情况。我假设它与文件系统有关,因为文件通常命名为.nfs000000123089abcxyz
。我典型的解决方案是重命名或移动文件的父目录,然后稍后在一两天后,该文件将被自动删除,此时,我可以自由删除目录。
这通常发生在我正在安装或编译软件库的目录中。
#6 楼
我遇到了同样的问题,以@camh建议开头构建了一个单行代码:lsof +D ./ | awk '{print }' | tail -n +2 | xargs -r kill -9
awk
捕获PID。tail
被摆脱讨厌的第一个条目:“ PID”。xargs
对PID执行kill -9
。如果-r
没有返回任何PID,则--no-run-if-empty
/ kill
可以防止lsof
命令失败。评论
为了使其更通用,您可以将./用于当前目录,而不是log /
–user2589273
17年11月22日在17:26
好点,@ user2589273。更新。
– Choylton B. Higginbottom
17年11月22日在18:00
@ ChoyltonB.Higginbottom,您要求一种更安全的方法来防止kill
– Noam Manos
20 Jun 10'在7:29
#7 楼
绕过Prabhat的上述问题,当我搁置一个encfs进程并重新启动后,在macos high sierra中遇到了这个问题,但这ps -ef | grep name-of-busy-dir
向我展示了该过程, PID(第二列)。
sudo kill -15 pid-here
修复了它。
评论
这也对我有用。什么是-15?
– O.rka
19年8月27日在23:55
@ O.rka 15是SIGTERM信号的ID,请参见此处:unix.stackexchange.com/questions/317492/list-of-kill-signals
–弗朗兹·威默(Franz Wimmer)
20/09/14 '16:14
#8 楼
当自动测试创建虚拟磁盘时,我遇到了这个问题。其他答案lsof
和fuser
中建议的命令没有帮助。测试后,我尝试将其卸载,然后删除该文件夹。很久以来我一直感到困惑,因为我无法摆脱它-我一直都在“设备或资源繁忙”!偶然地,我发现了如何摆脱虚拟磁盘。我必须卸载它的次数与运行
mount
命令的次数相同,即sudo umount path
由于它是使用自动测试创建的,因此它已多次安装,因此为什么我不能在测试后只需将其卸载一次即可摆脱它。因此,在我多次手动卸载它之后,它终于又变成了常规文件夹,可以删除它。
#9 楼
如果您可以访问服务器,请尝试从服务器中删除该目录
,或者重新安装并重新安装,请尝试
umount -l
:lazy如果遇到正常umount上的任何问题,则umount。我也遇到了以下问题,其中
lsof +D path
:不提供输出ps -ef
:不提供相关信息
评论
谢谢,这很方便-我是从Linux到Windows,正在寻找与lsof类似的产品-LockHunter。我勒个去? Unix不会像Windows一样阻止您删除打开的文件。这就是为什么您可以通过运行rm -rf / ...删除整个系统的原因,它将愉快地删除每个文件,包括/ bin / rm。
@psusi,那是不正确的。您的信息来源很差,或者只是捏造了东西。像Windows一样,Linux具有文件和设备锁定功能。但是,这有点坏。 0pointer.de/blog/projects/locking.html
@foobarbecue,通常这些只是顾问锁,手册页至少似乎表明它们仅用于读/写,而不用于取消链接。