如何修复 Linux 中的“rm:无法删除‘文件’:设备或资源繁忙”

如果您曾经尝试使用以下命令删除 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
结论

这 ”设备或资源繁忙” 错误通常意味着某些东西仍在使用该文件或目录。通过一些简单的检查,例如离开该目录,,或卸载设备,可以快速解决问题。

始终确保它是或在执行此操作之前卸载设备。一旦解决了这个问题,您的应该按预期工作。