Несколько раз при установке/обновлении пакета из командной строки (с использованием apt-get
или apt
) в Ubuntu мы получаем эту ошибку: E : Невозможно заблокировать каталог администрирования (/var/lib/dpkg/). С точки зрения новичка, это сложная ошибка, поскольку новые пользователи в большинстве случаев не знают о каталоге «/var/lib/dpkg/» и о том, какое отношение он имеет к текущей операции, которую они выполняют.
Технически ошибка выдается системой в нескольких сценариях, и нужно действительно позаботиться о том, как решить эту проблему. В этой статье мы обсудим все эти аспекты, связанные с этой ошибкой, и то, как от нее можно безопасно избавиться.
Невозможно заблокировать (/var/lib/dpkg/) – диагностика проблемы
Всякий раз, когда вы сталкиваетесь с этой ошибкой, первым делом следует внимательно прочитать описание ошибки. Обычно он содержит несколько важных советов, позволяющих сэкономить время. В качестве примера на следующих снимках экрана показано, как команда «apt-get install» выдает похожие ошибки.
Contents
Невозможно заблокировать (/var/lib/dpkg/) – диагностика проблемы
t.ru/wp-content/uploads/2024/05/admin-dir-error-lock.png" alt="admin-dir-error-lock">Однако, если вы присмотритесь повнимательнее, вы заметите, что текст в скобках в первой строке и текст после запятой во второй строке различаются в обоих сценариях, что дает понять, что ошибка в первом сценарии как-то связано с разрешениями пользователя, а во втором сценарии — с тем, что файл блокировки временно недоступен.
Если вы столкнулись с ошибкой, связанной с разрешениями (как показано на первом изображении выше), скорее всего, это связано с тем, что пользователь, выполняющий команду «apt-get» или «apt», не имеет достаточных привилегий, и команда запускался без sudo
. Как только команда будет запущена с правами root, ошибка исчезнет.
Однако если это ошибка, связанная с блокировкой, она требует дальнейшего расследования.
Читайте также: Исправление «имя пользователя отсутствует в файле sudoers. Об этом инциденте будет сообщено» Ошибка в Ubuntu
Что такое /var/lib/dpkg/?
«/var/lib/dpkg/» можно рассматривать как рабочий каталог для менеджера пакетов «dpkg», который, в свою очередь, на самом деле является движком «apt-get» (а также «apt» и «aptitude » инструменты). Всякий раз, когда вы используете эти инструменты для установки или удаления программного обеспечения, они блокируют базу данных пакетов (путем создания файла блокировки) перед выполнением фактической операции, что на самом деле делается путем получения блокировки для файла «/var/lib/dpkg/».» каталог. Этот шаг помогает избежать повреждения данных или прерывания текущей операции, выполняемой другим процессом.
Предполагая, что вы поняли изложенную выше концепцию, давайте теперь обсудим этапы расследования.
Шаг 1. Посмотрите, есть ли какой-либо другой процесс, удерживающий блокировку
Теперь это должно показаться вполне логичным, не так ли? И для этого вы можете воспользоваться старой доброй командой ps
и передать ее вывод команде grep
, чтобы тратить меньше времени на поиск того, что вам нужно. Например, вот команда, которая позволяет узнать, запущен ли уже какой-либо процесс «apt», «apt-get» или «aptitude»:
ps aux | grep apt
Шаг 2. Подождите некоторое время, а затем действуйте
Если действительно существует команда, которая уже получила блокировку, в идеале вам следует дождаться ее завершения и снять блокировку. Однако, если команда выполняется дольше ожидаемого времени, и вы уверены, что она где-то застряла, вы можете завершить ее, используя доступные команды kill
или killall
( подробнее о них Что такое /var/lib/dpkg/?но решить вашу проблему.
Здесь стоит упомянуть, что никогда не рекомендуется напрямую завершать процесс «dpkg» — это может привести к повреждению базы данных пакетов. Я подчеркиваю этот момент, потому что теперь вы знаете, что такие инструменты, как «apt» и «apt-get», вызывают «dpkg» внутри себя, поэтому вполне возможно, что вы подумаете об уничтожении процесса «dpkg», если обнаружите его в файле «ps».» вывод команды.
Завершение процессов, инициированных запуском команд apt, apt-get или aptitude, обычно гораздо безопаснее.
Шаг 3. Когда вывод команды «ps» не помогает
Имейте в виду, что помимо инструментов командной строки, таких как apt и apt-get, эту блокировку также получают некоторые приложения с графическим интерфейсом, такие как Центр программного обеспечения или Менеджер обновлений.
Примечание : если вы получаете ошибку, связанную с блокировкой, сразу после загрузки Ubuntu, вполне возможно, что ваша операция пересекается с автоматическим опросом, инициированным менеджером обновлений. В этом случае немного подождать должно решить проблему.
Вернемся к приложениям с графическим интерфейсом, о которых мы говорили, еще один полезный и экономящий время вариант — исполь
Шаг 1. Посмотрите, есть ли какой-либо другой процесс, удерживающий блокировку
олько файл, к которому осуществляется доступ («/var/lib/dpkg/lock» в нашем случае), и вы можете завершить процесс, обращающийся к этому файлу, даже если вы не знаете, какой процесс это. Например:sudo fuser -cuk /var/lib/dpkg/lock
Имейте в виду, что команда fuser
не снимет блокировку, полученную только что уничтоженным процессом, поэтому вам придется сделать это вручную:
sudo rm -f /var/lib/dpkg/lock
Примечание : «снять блокировку» просто означает удаление ф
Шаг 2. Подождите некоторое время, а затем действуйте
блокировку» воссоздав его.Вам также может потребоваться выполнить следующие две команды:
sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock
Важный совет : никогда не удаляйте файлы блокировки в первую очередь – это только последнее средство.
Заключение
В общем, всегда полезно понять причину проблемы, прежде чем приступить к ее решению. Слепые попытки решить проблему никогда не помогут вам – в некоторых случаях вы можете добиться успеха, но чаще всего вы окажетесь в еще большей неразберихе, особенно если в качестве ОС используется Linux.
Вы когда-нибудь сталкивались с ошибкой, которую мы здесь обсуждали? Как вы с этим разобрались? Оставьте свой ответ в комментариях.
Читайте также: Как исправить ошибку «В репозитории нет файла релиза»