Многие пользователи Ubuntu и других Linux систем очень часто встречались с сообщением об ошибке «Не удалось получить доступ к файлу блокировки /var/lib/dpkg/lock». Можно просто перезагрузить компьютер и возможно больше никогда не увидеть эту ошибку, но в данной статье я поведаю о том, как исправить эту ошибку без перезагрузки.
Данная ошибка может появляться во время установки какой-нибудь программы и в Терминале можно увидеть:
E: Не удалось получить доступ к файлу блокировки /var/lib/dpkg/lock — open (11: Ресурс временно недоступен)
E: Не удалось выполнить блокировку управляющего каталога (/var/lib/dpkg/); он уже используется другим процессом?
Также во время обновления системы может возникнуть следующее сообщение:
E: Не удалось получить доступ к файлу блокировки /var/lib/apt/lists/lock — open (11: Ресурс временно недоступен)
E: Невозможно заблокировать каталог /var/lib/apt/lists/
E: Не удалось получить доступ к файлу блокировки /var/lib/dpkg/lock — open (11: Ресурс временно недоступен)
E: Не удалось выполнить блокировку управляющего каталога (/var/lib/dpkg/); он уже используется другим процессом?
Это может произойти, если в момент установки любого приложения в Терминале у вас на компьютере уже был запущен менеджер пакетов Synaptic, шла установка программы в Центре приложений, Gdebi либо в другом окне Терминала. Ошибка должна пропасть, если дождаться установки, а потом просто закрыть одно из вышеперечисленных приложений. Но если инсталляция программы завершилась аварийно, то dpkg попросту «завис» и уже были созданы lock файлы. Поможет решить данную проблему полезная утилита fuser.
Программа покажет какие именно процессы используют файл. Выполним команду:
sudo fuser -v /var/lib/dpkg/lock
Вывод может быть такой:
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/var/lib/dpkg/lock: root 3072 F…. synaptic
или такой:
ПОЛЬЗ-ЛЬ PID ДОСТУП КОМАНДА
/var/lib/dpkg/lock: root 3072 F…. dpkg
Чтобы завершить «зависший» процесс выполним команду:
sudo fuser -vki /var/lib/dpkg/lock
Разберем примененные параметры -vki.
-v (данный параметр перечислит все процессы, которые используют указанный адрес)
-k (данный параметр похож на команду kill и поможет завершить все процессы, использующие блокировочный файл)
-i (данный параметр служит для того, чтобы во время завершения процесса спрашивать нашего разрешения)
Программа должна спросить нашего разрешения на завершение процесса. Естественно, что мы должны ввести английскую букву «y» и нажать клавишу Enter. Далее мы должны переконфигурировать менеджер пакетов командой в Терминале:
sudo dpkg --configure -a
Если ошибка не пропадет, то нужно будет удалить файл блокировки:
sudo rm /var/lib/dpkg/lock
После этого опять выполнить команду:
sudo dpkg --configure -a
То же самое касается и обновления системы. Вместо /var/lib/dpkg/lock нужно будет подставить /var/lib/apt/lists/lock и снова перечисленные выше команды.
спасибо за помощь, решил одной строкой:
sudo fuser -vki /var/lib/dpkg/lock