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


1023

Я отримую цю помилку при спробі використання 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
Це також вірно, якщо ви перезавантажуєтесь? Можливо, якийсь старий підходящий потік блокує файл, ви повинні з’ясувати, який і вбити його, або просто перезавантажте це.
Бруно Перейра

4
Ця процедура майже завжди виправляє цю проблему, а коли її немає, її вихід (текст із Терміналу) іноді корисний. Якщо ви вирішили це зробити, ви можете додати цей текст до свого питання.
Елія Каган

54
Ви можете sudo lsof /var/lib/dpkg/lockзнайти процес, який володіє файлом блокування (якщо він порожній, припустимо, що блокування залишилося від попереднього завантаження і може бути sudo rmd), а потім розглянути можливість sudo kill -9 <PID>(отримати <PID> з lsofвиводу.
waltinator

11
Це може бути ознакою того, що щось інше встановлює або видаляє програмне забезпечення і заблокує підходящу базу даних під час виконання дій.
Раніше

5
У моєму Ubuntu 18.04 VM є процес, який називається без нагляду-оновлення, який root <pid> <ppid> 0 15:58 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held installзапускається таким процесом , який, здається, запускає влучне оновлення кожного разу, коли я включаю машину. Залежно від розміру оновлення (що часто відповідає тому, як давно я працював на цій машині в останній раз), це може зайняти від 1-10 хвилин для завершення. Після цього блокування звільняється для встановлення та оновлення вручну. Спробуйте: sudo ps aux|grep aptабо `sudo ps aux | grep без нагляду.
Kjetil S.

Відповіді:


871

Це слід використовувати в крайньому випадку. Якщо ви використовуєте це недбало, ви можете зірватися зі зламаною системою. Будь ласка , спробуйте інші відповіді першим , перш ніж робити це.

Ви можете видалити файл блокування за допомогою наступної команди:

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

Також вам може знадобитися видалити файл блокування в каталозі кешу

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

Після цього спробуйте відкрити Synaptic знову.


13
добре ... але чому це сталося?
Хайме Хаблуцель

40
@jaime: ймовірно, apt-get (або якийсь інтерфейс GUI до нього) був зупинений під час виконання, залишивши apt у заблокованому стані.
буке

10
Я б прийняв це як найкращу відповідь. правильний.
Анвар

9
@AnwarShah ні, є інші міркування перед тим, як обійтись видаленням файлів із системи.
Брайам

22
rm / var / lib / dpkg / замок; dpkg --configure -a:
WitchCraft

664

Я бачу майже всі відповіді рекомендують видалити замок. Я не рекомендую робити це як перший захід; можливо, якщо альтернативи немає. Блокування встановлюється під час запуску влучного процесу та знімається, коли процес завершується. Якщо є замок без видимого запущеного процесу, це може означати, що процес застряг з якоїсь причини.

Якщо ви спробуєте

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
@ Посилання Я не вважаю, що вбивство dpkgне є хорошою ідеєю, оскільки зазвичай dpkgце маніпулювання безпосередньо базою даних пакетів, і це може спричинити корупцію.
Faheem Mitha

18
Якщо вбивство 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/ killcombo.
Серін

3
Зауважте, що я виявив, що мені потрібно запуститись sudo dkpg --configure -aпісля вбивства шахрайського трапного процесу, щоб речі повернулися до нормального.
starbeamrainbowlabs

219

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

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

Це має працювати після цього.


ці команди допомогли, але тепер, коли я спробував інсталювати ще раз, я отримав цю відповідь: Не вдалося отримати lock / var / cache / apt / archives / lock - відкрити. Я думаю, що мені доведеться робити подібну попередню проблему розблокування, але, будь ласка, скажіть мені точні ключові слова для команди. Я абсолютний новачок.
kern

1
sudo- виконати команду як root, rm- видалити файл. Може спробуватиsudo rm /var/cache/apt/archives/lock
kubahaha

5
Це не є гарною пропозицією: сліпе усунення удачі може пошкодити стан dpkg.
poolie

5
Чому сьогодні це не виправить?
Marian Klühspies

2
Це працювало для мене. Зверху не було.
1rq3fea324верто

108

Це повідомлення ви отримаєте, якщо забудете використовувати sudoпід час виконання влучної команди.

В іншому випадку це знак того, що щось інше встановлює або видаляє програмне забезпечення і заблокує підходящу базу даних під час виконання дій. Програми, які можуть це зробити, це:

  • Програмний центр
  • Менеджер оновлень
  • Інсталятор влучного посилання (я думаю, це зараз проходить через SC)
  • Утиліти командного рядка apt-get або aptitude.
  • Менеджер пакетів Synaptic

ВАЖЛИВО: спробуйте лише наведене нижче в крайньому випадку, оскільки це може зламати вашу систему. Спершу спробуйте вбити будь-який запущений екземпляр aptабо aptitudeяк описано у відповіді Faheem .

Ви можете вимкнути блокування, видаливши файл, але не рекомендується попередньо закривати програму, яка безпечно тримає замок , оскільки це може спричинити пошкодження або перервати установку (погано). Команда, надана Жоао, повинна закрити програму, яка містить блокування, а потім видалити замок, але не захистить вас від перерви в установці:

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

І та сама команда може бути використана для влучного кешування блокування:

sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock

5
Коли я отримав повідомлення про помилку, я оновлював програмне забезпечення.
краплі дощу

20
Це зазнало краху для мене
умпірський

5
sudo fuser -cuk /var/cache/apt/archives/lockбезпосередньо перезавантажив комп’ютер. apt-getзараз розблоковано.
Максим Р.

15
Це розбило весь мій сервер.
에이 바

5
Вбити влучний або dpkg на півдорозі - не чудова ідея.
poolie

99

Найбільш вірогідний спосіб досягти цього:

  • завантажують Ubuntu
  • запустити термінал
  • тип sudo apt-get install whatever

і командний рядок aptперекривається update-managerавтоматичним опитуванням.

Тож якщо ви спробуєте ще раз через кілька хвилин, це має виправити.


21
Чудовий натяк на відміну від півдесятників відповідей, що пропонують просто видалити файл ;-) Я випадково побіг у випуску, і швидше за все це це!
Олексій

2
Досить безпечно, довелося трохи почекати, перш ніж sudo apt-get installвдалося попрацювати.
саргаз

Ну, це працює не завжди, так, я багато разів використовував перезавантаження. Якщо це не підходить, спробуйте це askubuntu.com/a/315791/378845 перед тим, як видалити блокування
Menuka Ishan

@menuka, чому б просто не дати йому закінчити.
poolie

@poolie Оскільки є інші обмеження, які зупиняють процес закінчення
Menuka Ishan

52

Лише одна програма може утримувати блокування. Переконайтеся, що у вас немає здібностей, синаптичних чи спритних. Закрийте програму та запустіть її знову, вона повинна спрацювати. У вас може бути відкрито синаптичний засіб, або інше вікно терміналу, яке працює 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

Тепер ви можете встановити будь-які пакети.


9
Видалення файлу блокування - це, що я вважаю, небезпечне. Якщо інший процес блокується з поважної причини - і ви видалите цей файл блокування та змусите установку з тим, що ви робили раніше, - ви можете серйозно, негативно вплинути на вашу систему.
Марко Чеппі

5
Ось чому я дав це у Note.Якщо все вищевикладене не вдається, єдиний спосіб - зняти замок. Він не спричинить жодних проблем, доки процеси dpkg та apt-get / aptitude не запущені
karthick87

pgrep -f 'apt|adept|dpkg'набагато коротше.
dhchdhd

Дякую! це працює. pgrep -f 'apt | adept | dpkg', а потім вміння sudo (число), знищити все число, а потім встановити роботи!
творець

@Barry, який би відповідав усьому процесу + процес. Я думаю 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

Я не перевірив, що ця помилка виправлена ​​після оновлення. Я додаю новий коментар, як тільки я підтверджу це


Після оновлення системи та запуску служби apt-daily.timer знову я поки що не стикаюся з цим питанням.
Jairelee

Це, мабуть, найчистіший метод порівняно з усіма вищевикладеними відповідями вище. У моєму випадку це спрацювало бездоганно, дякую!
CygnusX1

Це спрацювало бездоганно також 17.10
старійшина Гік

Працював 17.10 +1
Eng.Fouad

2
Працює штраф 18.04. :)
Naveen Kumar 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

Тоді ми повинні перевірити , що робить commad, ми можемо знайти його за допомогою 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

Одна маленька річ в тому , що /var/lib/dpkg/lockзамість того , /var/lib/apt/lists/lockє файл в питанні.
Чай Т. Рекс

1
Дякуйте кореневим богам, що хтось нарешті згадує pgrepі pkill.
dhchdhd

1
Це має бути прийнятою відповіддю.
Марван Набіл

якщо встановлення чи оновлення спричинили це, dpkg --configure -aможливо, знадобиться також
LUXS

Це працює для мене
Sundeep,

21

Ця помилка може бути спричинена тим, що менеджер оновлень намагається автоматично оновити список пакетів у фоновому режимі, як правило, відразу після входу в систему, тим самим блокуючи каталог.

У цьому випадку просто зачекайте кілька секунд (або більше, якщо ваше останнє оновлення давно було), щоб воно завершилося або запустило менеджер оновлень, щоб перевірити стан.


Я мав це відразу після встановлення Ubuntu 16.04. Виявляється, у програмному центрі Ubuntu відбувся фоновий процес, який чекав на мене вручну встановити деякі оновлення.
jvriesem

Дітто після нової установки 16.04. Це занадто довше, ніж "кілька секунд" у моєму випадку (я встиг прочитати всю цю сторінку запитань і запитань!), Але після оновлення psкілька разів я міг побачити, dpkgяк оновлювався цілий набір матеріалів, і я терпляче чекав, коли все закінчиться . Потім я запускав оновлення програмного забезпечення, поки все не було оновленим, перш ніж намагатися встановити щось нове.
Чарлі Джойнт

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
Краще рішення, оскільки команда термоблока використовується для відстеження інших процесів (якщо вони ще живі)
Ларс Нордін

16

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


1
Це виглядає скоріше як коментар, ніж відповідь. Чи можете ви перемістити це замість цього, як коментар до відповіді, на яку він відповідав?
jvriesem

4
@jvriesem Я думаю, що це дуже важлива відповідь, тому що справа, яку він робить, - це те, чого не вистачає в багатьох інших відповідях!
Volker Siegel

@jvriesem Це зазвичай правильна відповідь. Я стикаюся з цією проблемою досить часто зі своїми Linux-контейнерами, коли їх довго не використовую. Просто зачекай. Так, це може пройти деякий час. Але нехай вона виконує свою роботу, перш ніж заходити і порушувати речі.
earth2jason

Це має бути першим, що потрібно спробувати. Ця відповідь більшу частину часу вирішує проблему. У мене це було, можливо, ще 4-5 разів, і перезавантаження завжди вирішувало це.
січня

10

Якщо для автоматичної установки встановлено оновлення безпеки, це трапляється часто. Я буквально чекаю 30 секунд, і це вирішує проблему. Просто викидаючи це на випадок, якщо хтось інший стикається з цією проблемою.


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).

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

Тоді я використовував "термоядер", як описано в попередніх публікаціях, і влучно працював, але мені надходили скарги на необхідність запуску dpkg -a -reconfigure. Коли я це зробив, у мене виникли помилки на кшталт:

newline in field name #padding

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

Все це було дуже дивно, так як я його ніколи раніше не бачив. Отже, я подумав, що це симптоми, і змінив свої дані та час вручну. Я знав, що існує проблема з датою / часом, коли я входив, але ігнорував її. (Раніше він встановлював це автоматично через Інтернет та NTP).

Тоді всі вищезазначені проблеми були виправлені ... Сподіваємось, це допомагає комусь іншому! Найбільш помітним симптомом, можливо, є дата / час файлу блокування, який є точною датою / часом, коли ви намагаєтеся запустити команду.


3

У моєму випадку X apt-getвийшов з ладу під час видалення старих ядер. Я використовував Монітор системи, щоб підтвердити, що він все ще працює і не застряг. Після закінчення процесу все було добре.


3

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

Якщо Software Updaterце не працює, просто використовуйте тире, щоб викликати його та дочекатися завершення, а потім вирішити, чи хочете ви оновити, або натисніть "нагадати мені пізніше". Після цього програма закриється, ви можете повернутися до використання apt-getабо apt.


2

У моєму випадку я отримував те саме повідомлення, не розуміючи, що я перейшов на root користувача, і намагався отримати sudo apt-get. Як тільки я зрозумів це, я просто побіг вдало, і це спрацювало. Дурне, але це все-таки може пояснити помилку для деяких.


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

0

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

Правда, у мене виникли проблеми з відтворенням цієї помилки в 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замикання в першу чергу при завантаженні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.