Команда rm не может удалить файл. Устройство или ресурс заняты

Если вы когда-нибудь пытались удалить файл или каталог в Linux с помощью команды rm, то точно видели ошибку:

rm: cannot remove 'file-or-directory': Device or resource busy

Не волнуйтесь, это обычная проблема, которая просто означает, что файл или каталог, который вы пытаетесь удалить, в настоящее время используется системой или запущенным процессом.

Почему возникает эта ошибка?

Когда вы видите сообщение устройство или ресурс заняты, это означает, что файл или каталог в настоящее время используется. Linux не позволяет удалять используемые файлы, чтобы избежать поломок или потери данных.

Вот несколько распространенных причин, почему это происходит:

  • Вы пытаетесь удалить каталог, в котором в данный момент находится ваш терминал.
  • Программа или процесс использует файл или каталог.
  • Устройство (например, USB-накопитель или сетевое устройство) все еще смонтировано и используется.

В этой статье мы объясним, почему так происходит и как это можно исправить.

1. Выйдите из каталога

Чтобы узнать, где вы находитесь в файловой системе, можно воспользоваться командой pwd, которая расшифровывается как print working directory и показывает ваше текущее местоположение.

pwd

Если результат показывает, что вы находитесь в папке, которую хотите удалить, вам нужно сначала выйти из нее, перейдя в свой домашний каталог (или любое другое безопасное место) с помощью команды cd:

cd ~

После того как вы вышли из каталога, вы можете попробовать удалить его снова с помощью команды rm:

rm -rf /path/to/the/directory

На этот раз Linux не будет блокировать команду, потому что ваш терминал больше не использует этот каталог.

2. Проверьте, что использует файл или каталог

Если Linux говорит, что файл или каталог занят, это означает, что какая-то программа или процесс все еще использует его. Прежде чем удалять его, нужно выяснить, что его использует, и прекратить это использование.

Для этого можно использовать команду lsof, которая расшифровывается как список открытых файлов. Она поможет вам увидеть, какие процессы удерживают ваш файл или каталог.

lsof +D /path/to/directory

Она выведет список всех процессов, использующих файлы в этом каталоге. Вы увидите результаты, показывающие, какая команда его использует, идентификатор процесса (PID), пользователя, который его выполняет, и многое другое.

Например, вы можете увидеть что-то вроде:

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash     4312  user   cwd  DIR  8,1     4096     2   /mnt/data

Определив их, вы можете закрыть связанные с ними программы или остановить процессы с помощью команды fuser.

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

Иногда, даже после попытки размонтирования, вы можете увидеть сообщение resource busy, что означает, что процесс все еще использует устройство.

В этом случае можно попробовать ленивое размонтирование, которое сразу же отсоединит устройство от файловой системы, но не будет полностью удалять его, пока все процессы не перестанут его использовать.

umount -l /mnt/usb

Если ленивое размонтирование тоже не работает, и вы уверены, что устройство не используется никем важным, можно попробовать принудительное размонтирование:

umount -f /mnt/usb

Предупреждение: Принудительное размонтирование может привести к потере данных, если на устройство все еще ведется запись. Используйте этот параметр только в том случае, если вы абсолютно уверены в его безопасности – например, если устройство «застряло» и вам просто нужно его извлечь.

Когда устройство будет размонтировано, удалите каталог.

rm -rf /mnt/usb

Заключение

Ошибка устройство или ресурс заняты обычно означает, что что-то все еще использует файл или каталог. Несколько простых проверок, таких как выход из каталога, проверка запущенных процессов или размонтирование устройств, помогут вам быстро решить проблему.

Всегда убеждайтесь, что убивать процессы или размонтировать устройства безопасно. После этого команда rm должна работать как положено.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)