如果您曾经尝试使用以下命令删除 Linux 中的文件或目录并看到错误:
rm: cannot remove 'file-or-directory': Device or resource busy
不用担心,这是一个常见问题,仅意味着您尝试删除的文件或目录当前正在由系统或某个程序使用。
为什么会出现这个错误
当您看到消息“设备或资源繁忙”,这意味着该文件或目录当前正在使用。Linux 会阻止您删除正在使用的文件,以避免破坏文件或导致数据丢失。
以下是发生这种情况的一些常见原因:
- 您正在尝试删除终端当前所在的目录。
- 程序或进程正在使用该文件或目录。
- 一个设备(比如)仍然安装并使用中。
在本文中,我们将解释为什么会发生这种情况以及如何解决它。
1.退出目录
要找出您在文件系统中的位置,您可以使用,它代表“打印工作目录,”它会显示您当前的位置。
pwd
如果输出显示您位于要删除的文件夹内,则需要先使用以下命令切换到主目录(或任何其他安全位置)来移出该文件夹::
cd ~
移出该目录后,您可以尝试使用以下命令再次删除它:rm命令:
rm -rf /path/to/the/directory
这次,Linux 不会阻止该命令,因为您的终端不再使用该目录。
2. 检查正在使用该文件或目录的内容
如果 Linux 说某个文件或目录“忙”,则意味着某些程序或进程仍在使用它。在删除它之前,您需要找出正在使用它的内容并停止该使用。
为此,您可以使用名为的命令,它代表“列出打开的文件”,它可以帮助您查看哪些进程正在保留您的文件或目录。
lsof +D /path/to/directory
它将列出正在使用该目录内的文件的所有进程。您将看到输出显示哪个命令正在使用它、进程 ID (PID)、运行它的用户等等。
例如,您可能会看到类似以下内容:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 4312 user cwd DIR 8,1 4096 2 /mnt/data
一旦识别出它们,您可以关闭关联的程序或使用以下命令停止进程。
fuser -v /path/to/directory
要终止使用该目录的所有进程(谨慎使用):
fuser -k /path/to/directory
3. 卸载设备(如果是挂载目录)
有时,您尝试删除的目录实际上被用作挂载点,这意味着当前已连接存储设备,例如 USB 驱动器、外部硬盘或网络共享(如 NFS)(或“安装的“)在文件系统中的该位置。
当设备被挂载时,Linux 将其视为主文件系统的一部分,但当设备仍在使用时您无法删除挂载点目录。这就是为什么你会得到“设备或资源繁忙“ 错误。
要查看您的目录是否实际安装,请运行:
mount | grep /path/to/directory
如果该命令显示一行带有您的路径的输出,则意味着该目录正在用作安装点。
例如,您可能会看到类似这样的内容,这意味着 USB 设备安装在/mnt/usb。
/dev/sdb1 on /mnt/usb type vfat (rw,nosuid,nodev)
一旦确认设备已挂载,您需要在删除目录之前将其卸载。
umount /mnt/usb
有时,即使尝试卸载后,您可能仍然会看到“资源繁忙”消息,这意味着进程仍在使用该设备。
在这种情况下,您可以尝试延迟卸载,这会立即将设备与文件系统分离,但要等到所有进程停止使用它才能完全删除它。
umount -l /mnt/usb
如果延迟卸载也不起作用,并且您确定没有什么重要的事情正在使用该设备,则可以尝试强制卸载:
umount -f /mnt/usb
警告:如果设备仍在写入,强制卸载可能会导致数据丢失。仅当您绝对确定这样做安全时才使用此选项 - 例如,如果设备卡住而您只需将其移除。
卸载设备后,继续删除目录。
rm -rf /mnt/usb
结论
这 ”设备或资源繁忙” 错误通常意味着某些东西仍在使用该文件或目录。通过一些简单的检查,例如离开该目录,,或卸载设备,可以快速解决问题。
始终确保它是或在执行此操作之前卸载设备。一旦解决了这个问题,您的应该按预期工作。
