Не удается заблокировать каталог администрирования (/ var / lib / dpkg /), другой процесс использует его?

1026

Я получаю эту ошибку при попытке использовать apt-get:

E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/) is another process using it?  

Как я могу это исправить?

Ла Ода Адам Сапутра
источник
18
Это также верно, если вы перезагрузите компьютер? Может быть, какой-то старый поток apt блокирует файл, вам нужно выяснить, что и уничтожить, или просто перезагрузка сделает это.
Бруно Перейра
4
Эта процедура почти всегда решает эту проблему, а если нет, ее вывод (текст из терминала) иногда бывает полезен. Если вы решите это сделать, вы можете добавить этот текст в свой вопрос.
Элия ​​Каган
54
Вы можете использовать, sudo lsof /var/lib/dpkg/lockчтобы найти процесс, которому принадлежит файл блокировки (если он пустой, предположите, что блокировка осталась после предыдущей загрузки и может быть sudo rmd), затем подумайте о том, чтобы сделать sudo kill -9 <PID>(получить <PID> из lsofвывода.
waltinator
11
Это может быть признаком того, что что-то еще устанавливает или удаляет программное обеспечение и заблокировало базу данных apt во время выполнения действий.
Навсегда
5
На моей виртуальной машине Ubuntu 18.04 есть процесс unattended-update, который запускается таким процессом root <pid> <ppid> 0 15:58 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install, который, похоже, запускает apt update каждый раз, когда я включаю машину. В зависимости от размера обновления (которое часто соответствует тому, как давно я использовал эту машину в последний раз), это может занять от 1 до 10 минут. После этого блокировка освобождается для ручной установки и обновления. Попробуйте: sudo ps aux|grep aptили `sudo ps aux | grep без присмотра.
Кжетил С.

Ответы:

875

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

Вы можете удалить файл блокировки с помощью следующей команды:

sudo rm /var/lib/apt/lists/lock

Вам также может понадобиться удалить файл блокировки в каталоге кеша

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

После этого попробуйте снова открыть Synaptic.

Zurdo
источник
13
хорошо ... но почему это случилось?
Хайме Хаблутцель
40
@jaime: вероятно, apt-get (или какой-либо другой интерфейс GUI) был остановлен во время выполнения, оставив apt в заблокированном состоянии.
Bouke
10
Я бы принял это как лучший ответ. правильный.
Анвар
9
@ AnwarShah нет, перед удалением файлов из системы есть и другие соображения.
Брайам
22
rm / var / lib / dpkg / lock; dpkg --configure -a:
WitchCraft
665

Я вижу, почти все ответы рекомендуют снять блокировку. Я не рекомендую делать это в качестве первой меры; может быть, если нет альтернативы. Блокировка устанавливается при запуске apt-процесса и удаляется после его завершения. Если есть блокировка без видимого процесса, это может означать, что процесс застрял по какой-то причине.

Если вы пытаетесь

ps aux | grep [a]pt

или же

pgrep -a apt

это поймает процессы, содержащие слово apt, по крайней мере. Если вы видите apt-getпроцесс или aptitudeпроцесс, который выглядит застрявшим, вы можете попробовать

sudo kill processnumber

и если это не сработает, попробуйте

sudo kill -9 processnumber

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

Убийство dpkgпроцесса непосредственно, если присутствует, не является хорошей идея, потому что , если dpkgактивно, то он, вероятно , работы с базой данных пакетов, и убийством может покинуть базу данных пакетов в неустойчивом состоянии; то есть поврежден.

Убийство apt-getили aptitudeпроцесс в целом гораздо безопаснее.

Фахим Митха
источник
18
@Link Я не думаю, что убийство dpkg- это хорошая идея, потому что обычно dpkgэто манипулирование базой данных пакетов напрямую, и это может привести к повреждению.
Фахим Митха
18
Если killing dpkg может повредить его базу данных, dpkg был плохо спроектирован. Период.
Джей Салливан
10
для меня это привело к ошибке dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.при запуске sudo apt-get dist-upgradeснова. Выполнение команды решило проблему. Я люблю Никс!
Уэйн Фиппс
5
Обратите внимание, killall apt-getделает то же самое, что и ваш ps/ killкомбо.
Серин
3
Обратите внимание, что я обнаружил, что мне нужно было запустить sudo dkpg --configure -aпосле уничтожения процесса мошеннических apt, чтобы все вернулось к нормальному состоянию.
starbeamrainbowlabs
219

Удалите /var/lib/dpkg/lockфайл и принудительно измените конфигурацию пакета.

sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a

Это должно работать после этого.

Бруно Перейра
источник
эти команды помогли, но теперь, когда я попытался установить снова, получил такой ответ: Не удалось получить блокировку / var / cache / apt / archives / lock - open. Я думаю, что я должен был бы сделать как предыдущая проблема разблокировки, но, пожалуйста, скажите мне точные ключевые слова для команды. Я абсолютный новичок.
Керн
1
sudo- выполнить команду как root, rm- удалить файл. Может быть, попробоватьsudo rm /var/cache/apt/archives/lock
Кубахаха
5
Это не очень хорошее предложение: слепое устранение удачи может испортить состояние dpkg.
Poolie
5
Почему это не исправить сейчас?
Мариан Клюспи
2
Это сработало для меня. AWS выше не сделал.
1rq3fea324wre
108

Вы получите это сообщение, если забудете использовать его sudoпри выполнении команды apt.

В противном случае это признак того, что что-то еще устанавливает или удаляет программное обеспечение и заблокировало базу данных apt во время выполнения действий. Программы, которые могут сделать это:

  • Центр программного обеспечения
  • Диспетчер обновлений
  • Установщик apt link (я думаю, что теперь это проходит через SC)
  • Утилиты командной строки apt-get или aptitude.
  • Менеджер пакетов Synaptic

ВАЖНО: попробуйте только ниже в качестве крайней меры, так как это может привести к сбою вашей системы. Сначала попытайтесь убить любой работающий экземпляр aptили aptitudeкак описано в ответе Фахима .

Вы можете отключить блокировку, удалив файл, но это не рекомендуется без предварительного закрытия программы, которая надежно удерживает блокировку , поскольку вы можете вызвать повреждение или прервать установку (плохо). Команда, предоставленная João, должна закрыть программу, которая удерживает блокировку, а затем снять блокировку, но не защитит вас от прерывания установки:

sudo fuser -cuk /var/lib/dpkg/lock; sudo rm -f /var/lib/dpkg/lock   

И та же команда может быть использована для блокировки кэша apt:

sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock
Мартин Оуэнс -доктормо-
источник
5
Я обновлял свое программное обеспечение, когда получил сообщение об ошибке.
дождевая капля
20
Это разбилось для меня
umpirsky
5
sudo fuser -cuk /var/cache/apt/archives/lockпрямо перезагрузил мой компьютер. apt-getсейчас разблокирован.
Максим Р.
15
Это разбило весь мой сервер.
바 바
5
Убивать apt или dpkg на полпути не очень хорошая идея.
Poolie
99

Наиболее вероятный способ поразить это:

  • загрузите Ubuntu
  • начать терминал
  • тип sudo apt-get install whatever

и командная строка aptперекрывается с update-managerавтоматическим опросом.

Так что если вы попробуете снова через несколько минут, это должно исправить.

poolie
источник
21
Отличный намек в отличие от полдюжины ответов, предлагающих просто удалить файл ;-) Я случайно столкнулся с проблемой, и, скорее всего, это она!
Алекс
2
Достаточно безопасно, пришлось немного подождать, прежде чем sudo apt-get installсмог работать.
Саргас
Ну, это не всегда работает, да, я использовал перезагрузку много раз. Если это не подходит попробовать этот askubuntu.com/a/315791/378845 , прежде чем удалить замки
Menuka ISHAN
@menuka, почему бы просто не дать ему закончить.
пул
@poolie Потому что есть другие ограничения, которые мешают завершению процесса
Menuka Ishan
52

Только одна программа может удерживать блокировку. Убедитесь, что вы не используете aptitude, synaptic или adept. Закройте программу и запустите ее снова, она должна работать. Вы можете либо открыть синапс, либо открыть другое окно терминала с запущенным apt-get, либо запустить менеджер обновлений. Проверьте его и посмотрите, работает ли какой-либо из них, если какой-либо из они бегут близко и попробуйте снова.

Попробуйте эту команду в терминале, чтобы найти то, что работает

ps -e | grep -e apt -e adept | grep -v grep

Примечание.
Если это ничего не печатает, введите в терминале следующее, чтобы снять блокировку.

sudo rm /var/lib/dpkg/lock    
sudo rm /var/cache/apt/archives/lock

Теперь вы можете установить любые пакеты.

karthick87
источник
9
Удаление файла блокировки - это то, что я считаю опасным занятием. Если другой процесс блокируется по уважительной причине - и вы удалите этот файл блокировки и инициируете установку, используя то, что делали ранее, - вы можете серьезно, негативно повлиять на вашу систему.
Марко Чеппи
5
Вот почему я отметил, что в Note.Если все вышеперечисленное не работает, единственный способ - снять блокировку. Это не вызовет никаких проблем, пока не запущены процессы dpkg и apt-get / aptitude
karthick87
pgrep -f 'apt|adept|dpkg'намного короче.
dhchdhd
Спасибо! это работает. pgrep -f 'apt | adept | dpkg', а затем навык sudo (число), убить все числа и затем выполнить установку!
создатель
@ Барри, который будет соответствовать всему пути + процесс. Я думаю, что pgrep -a 'apt|adept|dpkg'это лучший, более короткий эквивалент.
Пабло А
46

Пока что лучший способ заставить его работать, не нарушая возможный фоновый запуск установки (как это может произойти, удалив файл блокировки), - это остановить службу с помощью apt:

Ошибка:

# sudo apt-get upgrade
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?`

Решение:

sudo systemctl stop apt-daily.timer

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

sudo systemctl start apt-daily.timer

Я не проверял, что эта ошибка исправлена ​​после обновления. Я добавлю новый комментарий, как только я подтвердил

Jairelee
источник
После обновления системы и повторного запуска службы apt-daily.timer я не сталкиваюсь с этой проблемой до сих пор.
Jairelee
Это, пожалуй, самый чистый метод по сравнению со всеми этими ответами выше. Это сработало в моем случае без нареканий, спасибо!
CygnusX1
Это работало безупречно и в 17.10
старейшина Гик
Работал 17.10 +1
англ.фуад
2
Работает нормально в 18.04. :)
Навин Кумар V
33

Прежде всего мы должны проверить, какой процесс создал файл блокировки, используя lsof:

sudo lsof /var/lib/dpkg/lock

или в другой ситуации, где /var/lib/apt/lists/lockпроблематично:

sudo lsof /var/lib/apt/lists/lock

Вывод будет близок к чему-то вроде:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
apt-get   12127 root   4uW  REG  252,1        0    86   /var/lib/apt/lists/lock

Затем мы должны проверить, что делает запятая, мы можем узнать это с помощью psи pgrepт.д .; команда apt-getтак я бегу:

pgrep apt-get -a

-aПереключатель перечисляет всю команду для меня, в моем случае это:

 pgrep -a apt-get
 12127 apt-get update

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

ps -f 12127

который производит:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root     12127 12126  0 09:39 pts/0    S+     0:00 apt-get update

В этом случае я бы подождать некоторое минуту на ресурс будет освобожден , и если после 2 или 3 минут проблема все еще существует , или команда была то , что я не забочусь о том или не вреден для системы (как это apt-get update) , я отправить SIGTERMв процесс:

sudo kill -15 12127

Это должно сделать работу, если это не так, я собираюсь отправить на SIGINTэтот раз (это как нажать CTRL+ C):

sudo kill -2 12127

Если это тоже не сработало, мы должны отправить SIGHUP( kill -1), и, наконец, если ничего не работает, я просто убиваю процесс:

sudo kill -9 12127

или же

sudo pkill -9 apt-get

Затем я удаляю занятые ресурсы:

sudo rm /var/lib/apt/lists/lock
Ravexina
источник
Одна маленькая вещь, это то /var/lib/dpkg/lock, /var/lib/apt/lists/lockчто файл в вопросе.
Чай Т. Рекс
1
Спасибо коренных богов , что кто - то , наконец , упоминает pgrepи pkill.
17
1
Это должен быть принятый ответ.
Марван Набил
если установка или обновление вызвали это, то это также dpkg --configure -aможет быть необходимо
LUXS
Это работает для меня
Sundeep
21

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

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

Batsu
источник
У меня было это сразу после установки Ubuntu 16.04. Оказывается, в Ubuntu Software Center был фоновый процесс, который ждал, чтобы я вручную установил некоторые обновления.
jvriesem
То же самое после свежей установки 16.04. В моем случае это было намного дольше, чем «несколько секунд» (у меня было время прочитать всю страницу вопросов и ответов!), Но после обновления ps, которое я видел несколько раз, я dpkgобновлял всю информацию и терпеливо ждал, пока все закончится. , Затем я запустил Software Updater, пока все не было обновлено, прежде чем пытаться установить что-то новое.
Чарли Джойнт,
16

Это произойдет, если у вас есть «Диспетчер обновлений», работающий параллельно для какой-либо проверки обновлений, или установка в процессе установки блокирует. Если вы столкнулись с той же ошибкой без запуска «Менеджера обновлений», вы должны удалить ее /var/lib/dgkg/lock, что, безусловно, невозможно сделать вручную.

sudo fuser -cuk /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock

работает отлично. Взято из: https://askubuntu.com/a/15469/68707

Набиль Ахмед
источник
1
Это была проблема в моем случае!
LondonRob
1
Лучшее решение, поскольку команда fuser использовалась для отслеживания других процессов (если они еще живы)
Ларс Нордин
16

Не спешите удалять что-либо, это может полностью повредить вашу систему; скорее дождитесь, пока текущая установка или удаление программы завершит свою задачу, и после этого вы получите доступ. Если вы считаете, что в данный момент ничего не устанавливается и не удаляется, просто перезагрузите систему с помощью команды sudo reboot.

Wessi
источник
1
Это похоже на комментарий, а не ответ. Не могли бы вы переместить это вместо комментария к ответу, на который он отвечал?
jvriesem
4
@jvriesem Я думаю, что это очень важный ответ, потому что он подчеркивает то, чего не хватает во многих других ответах!
Фолькер Сигел
@jvriesem Обычно это правильный ответ. Я сталкиваюсь с этой проблемой довольно часто с моими контейнерами Linux, когда я не использую их долгое время. Просто подожди. Да, это может быть какое-то время. Но позвольте ему делать свою работу, прежде чем идти и мешать.
earth2jason
Это должно быть первым, что нужно попробовать. Этот ответ в большинстве случаев решает проблему. У меня было это возможно 4-5 раз еще, и перезагрузка всегда решала это.
января
10

Если у вас установлены обновления безопасности для автоматической установки, это будет происходить часто. Я буквально жду 30 секунд, и это решает проблему. Просто добавьте это на случай, если кто-то еще столкнется с этой проблемой.

Wh33t
источник
1
В зависимости от того, как долго загружается дистрибутив, это может занять до получаса. Но, вероятно, идеально, чтобы ваш дистрибутив закончил свою работу, прежде чем что-то нарушить.
earth2jason
6

В моем случае мне пришлось ждать несколько минут, пока замок не будет снят (похоже, он aptиспользовался для его удержания). Это все произошло сразу после загрузки системы.

Павел Власов
источник
4

Просто sudo rm -f /var/lib/apt/lists/lockи попробуйте еще раз.

apt-fast МОЖЕТ быть ответственным за неправильную разблокировку; это случается иногда, когда вы прерываете apt-getили dpkgслишком.

иш
источник
4

У меня была эта проблема много раз. Для меня это почти всегда было вызвано apt-get или некоторым графическим интерфейсом, который вызывал зависание по какой-то причине. Я должен был убить его, который оставил различные замки на месте.

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

В то время как большая часть или все это представлено в других ответах, исправление сводится к нескольким командам.

sudo fuser -vki /var/lib/dpkg/lock
sudo fuser -vki /var/cache/apt/archives/lock
sudo fuser -vki /var/cache/debconf/config.dat
sudo dpkg --configure -a

Используется для разблокировки системы пакетов после того, как какое-либо обновление завершилось или прервалось без завершения каким-либо другим способом. Эти команды должны выполняться в указанном порядке.

Джо
источник
3

Я не вижу такого ответа выше, но в Ubuntu 16.04 я также столкнулся с этой проблемой. Причиной было то, что время на моем компьютере было установлено в будущее . (Это потому, что я нахожусь на двойной загрузочной системе Windows + Ubuntu, и я думаю, что я испортил местное время против времени UTC.)

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

Затем я использовал «fuser», как описано в предыдущих постах, и apt работал, но я получал жалобы на необходимость запуска dpkg -a -reconfigure. Когда я сделал это, я получил такие ошибки, как:

newline in field name #padding

в таких файлах, как '/ var / lib / dpkg / updates / 0003'.

Все это было очень странно, поскольку я никогда не видел это прежде. Итак, я подумал, что это симптомы, и изменил мои данные и время вручную. Я знал, что была проблема с датой / временем, когда я вошел в систему, но игнорировал ее. (Раньше он настраивал его автоматически через интернет и NTP).

Затем все вышеперечисленные проблемы были исправлены ... Надеюсь, это поможет кому-то еще! Наиболее заметным симптомом, возможно, является дата / время файла блокировки, являющееся точной датой / временем, когда вы пытаетесь выполнить команду.

луч
источник
3

В моем случае, X потерпел крах, когда apt-getвсе еще удалял старые ядра. Я использовал системный монитор, чтобы убедиться, что он все еще работает и не завис. Все было хорошо, как только процесс закончился.

wjandrea
источник
3

Проверьте Launcher, чтобы увидеть, если Software Updaterработает. Если это так, максимизируйте его и посмотрите, что он делает. Если он все еще проверяет, дождитесь его завершения. Когда он завершится, он может сказать, что программное обеспечение обновлено, поэтому закройте приложение. Если он говорит, что есть доступные обновления, либо сделайте обновление, либо нажмите «Напомнить позже». После этого это приложение закрывается, вы можете вернуться к использованию apt-getили apt.

Если Software Updaterне работает, просто используйте Dash, чтобы вызвать его и дождаться завершения, а затем решите, хотите ли вы обновить или нажмите «Напомнить позже». После этого это приложение закрывается, вы можете вернуться к использованию apt-getили apt.

H2ONaCl
источник
2

В моем случае я получал то же сообщение, не осознавая, что переключился на пользователя root и пытался выполнить sudo apt-get. Как только я понял это, я просто запустил apt-get, и это сработало. Глупо, но это все же может объяснить ошибку для некоторых.

BluePython
источник
2
Это не является причиной проблемы, так как вы можете запускать sudoс правами root (и даже если вы не можете, это не выдаст это сообщение об ошибке). Скорее всего, произошло то, что другой процесс завершился, когда вы писали следующую команду.
wjandrea
Иногда это выдает то же самое сообщение об ошибке.
Карел
2
sudo killall -9 apt && sudo killall -9 dpkg

Используйте на свой риск

никто
источник
1

в моем случае после:

  1. Откройте Firefox.
  2. Открытый терминал

Я набрал


sudo apt update
sudp apt upgrade
тогда я получаю проблемы

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Я исправил это, выполнив команду, которая была показана мне после запуска sudo apt update

apt list --upgradable

Эта команда покажет вам список программ, в моем случае только Firefox, я закрыл Firefox, затем мог запустить команду снова без проблем.

sudo apt upgrade
christianbueno.1
источник
0

Для людей, которые заинтересованы в проактивном предотвращении этой ошибки в своих скриптах, я обнаружил, что флаг -q on apt upgrade -yqвызывает у меня эту проблему. Я предполагаю, что во время процесса обновления мне иногда будут выдаваться предупреждения (что-то вроде обновления рабочего стола, я бы хотел продолжить), и если эти предупреждения будут подавлены, то я думаю, что это приводит к тому, что apt не разблокирует защищаемые файлы. и он застрял.

По общему признанию, у меня были проблемы с воспроизведением этой ошибки в 100% случаев, но устранение этой опции -q полностью устранило проблему для меня .

Тырел Костык
источник
0

Как и большинство других, я ждал, пока замок будет снят. Через 30 минут я сдался и тяжело загрузился в другой дистрибутив. Оттуда я использовал Интернет для некоторых исследований, которые привели меня сюда.

Оказывается, unattended-upgrades.serviceработает. Я обнаружил, что перезагружаюсь в сломанную систему и запускаю:

sudo systemctl disable apt-daily.service
sudo systemctl disable unattended-upgrades.service
sudo systemctl disable apt-daily-upgrade.service
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily.timer
sudo shutdown -r # Note it will take a couple minutes to reboot

позволил мне заставить сломанную систему работать снова для:

sudo apt update
sudo apt upgrade
sudo apt install -f

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

WinEunuuchs2Unix
источник