Linux EBUSYСредняя

Решение ошибки блокировки файла в Linux: пошаговые методы

Ошибка блокировки ресурса возникает, когда процесс удерживает дескриптор файла и мешает его изменению. Разбираем причины и даём проверенные команды для безопасного разблокирования в Linux.

Обновлено 7 апреля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 22.04 LTS и новееDebian 11+Fedora 36+Любой дистрибутив с ядром 5.x+

Что означает ошибка блокировки файла в Linux

Ошибка возникает при попытке изменить, переместить или удалить файл, который в данный момент удерживается другим процессом. В терминале она обычно выглядит как: rm: cannot remove 'file.txt': Device or resource busy или cp: failed to access 'file.txt': File is locked (EBUSY).

Система ядра Linux защищает открытые файловые дескрипторы от несанкционированной модификации. Это предотвращает повреждение данных, когда программа активно записывает или считывает информацию. Если вы видите подобное сообщение, значит, ресурс занят, и стандартные операции с ним временно недоступны.

Причины возникновения

  • Фоновые процессы и демоны. Службы логирования, индексации, антивирусы или системы синхронизации (например, Nextcloud, Dropbox) могут удерживать файлы в фоновом режиме.
  • Некорректное завершение приложений. Если текстовый редактор, медиаплеер или IDE аварийно закрылись, временная блокировка может остаться в памяти.
  • Наличие .lock файлов. Многие программы создают маркеры в /tmp или в рабочей директории, чтобы несколько экземпляров не редактировали один документ одновременно.
  • Сетевые файловые системы (NFS/SMB). При разрыве соединения с удалённым сервером клиент может считать шару или отдельные файлы заблокированными.
  • Монтирование в точку использования. Если вы пытаетесь удалить каталог, который используется как точка монтирования, ядро вернёт ошибку занятости.

Способы решения

Способ 1: Использование lsof для поиска и завершения процесса

Утилита lsof (list open files) точно покажет, какой PID удерживает нужный ресурс.

  1. Откройте терминал и выполните:
    sudo lsof | grep '/полный/путь/к/файлу'
    
  2. В выводе найдите столбец PID. Это идентификатор процесса.
  3. Завершите его корректно:
    sudo kill <PID>
    

💡 Совет: Если процесс игнорирует стандартный сигнал завершения, используйте sudo kill -9 <PID>. Будьте осторожны: это мгновенно прервёт работу программы без сохранения данных.

Способ 2: Быстрая разблокировка через fuser

fuser работает быстрее для точечного поиска и автоматически показывает, какой тип доступа используется (чтение, запись, выполнение).

Выполните команду с флагом -v (verbose):

sudo fuser -v /полный/путь/к/файлу

Чтобы сразу освободить ресурс, добавьте флаг -k (kill):

sudo fuser -k /полный/путь/к/файлу

⚠️ Важно: Команда с -k принудительно остановит все процессы, работающие с файлом. Убедитесь, что это не критичная системная служба.

Способ 3: Удаление «зависших» файлов блокировки

Некоторые приложения оставляют после себя маркерные файлы (например, .~lock.filename.docx# или session.lock). Они мешают повторному открытию.

  1. Найдите остаточные маркеры в рабочей директории:
    find /путь/к/папке -name "*.lock" -type f
    
  2. Удалите найденные артефакты:
    rm -f /путь/к/папке/.~lock.*
    

После удаления перезапустите приложение, которое работало с документом, чтобы оно создало новую сессию.

Способ 4: Снятие блокировок с сетевых ресурсов

Если файл находится на NFS или SMB-шаре, локальные kill не помогут. Блокировка удерживается на стороне сервера.

  1. Проверьте состояние подключений:
    mount | grep nfs
    
  2. Выполните «ленивое» отмонтирование, чтобы дождаться завершения операций и освободить дескрипторы:
    sudo umount -l /точка/монтирования
    
  3. При повторном подключении добавьте параметр nolock, если сервер не поддерживает протокол NLM:
    sudo mount -t nfs -o nolock server:/share /mnt/point
    

Профилактика

Чтобы ошибка блокировки файла в Linux не повторялась, следуйте простым правилам работы с ресурсами. Всегда закрывайте приложения через графический интерфейс или корректным сигналом SIGTERM, а не просто закрывая окно. При написании скриптов используйте конструкцию trap 'rm -f /path/to/lock' EXIT для автоматической очистки временных меток при любом завершении работы. Регулярно проверяйте логи dmesg или journalctl -e, если блокировки возникают без видимой причины — это может указывать на деградацию файловой системы или сбои в работе драйверов накопителя. Для автоматизации массовых операций внедряйте проверку занятости через lsof перед запуском скриптов удаления или перемещения.

Часто задаваемые вопросы

Почему система пишет, что файл заблокирован, если я его не открывал?
Безопасно ли принудительно завершать процесс, удерживающий файл?
Как разблокировать файл на сетевом диске (NFS/SMB)?
Можно ли отключить блокировку файлов в Linux полностью?

Полезное

Определите блокирующий процесс
Остановите процесс штатным способом
Удалите остаточные блокировки

Эта статья помогла вам решить проблему?