Если вы когда-либо пытались удалить файл или каталог в Linux с помощью команды rm и видели сообщение об ошибке:
rm: cannot remove 'file-or-directory': Device or resource busy
Не волнуйтесь, это распространённая проблема, которая означает, что файл или каталог, который вы пытаетесь удалить, в данный момент используется системой или текущим запущенным процессом.
Если вы видите сообщение Device or Resource Busy «устройство или ресурс заняты», это означает, что файл или каталог в данный момент используются. Linux не позволяет удалять используемые файлы, чтобы не нарушить работу системы или не привести к потере данных.
Вот несколько распространенных причин, по которым это происходит:
В этой статье мы объясним, почему это происходит и как это можно исправить.
pwd
Если вывод показывает, что вы находитесь внутри папки, которую хотите удалить, вам нужно сначала выйти из неё, переключившись в домашний каталог (или любое другое безопасное место) с помощью команды cd:
cd ~
После того как вы выйдете из каталога, вы можете попробовать удалить его снова с помощью команды rm
:
rm -rf /path/to/the/directory
На этот раз Linux не заблокирует команду, потому что ваш терминал больше не использует этот каталог.
Если 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
Иногда каталог, который вы пытаетесь удалить, на самом деле используется в качестве точки монтирования. Это означает, что устройство хранения данных, например 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
Ошибка «устройство или ресурс заняты» обычно означает, что что-то всё ещё использует файл или каталог. С помощью нескольких простых действий, таких как выход из каталога, проверка запущенных процессов или отключение устройств, вы можете быстро устранить проблему.
Прежде чем делать это, всегда убедитесь, что завершение процессов безопасно или что вы можете размонтировать устройства. После этого ваша команда rm должна работать должным образом.