Доста пъти, докато инсталираме / актуализираме пакет от командния ред (използвайки apt-get или apt ) в Ubuntu, получаваме тази грешка: E: Не може да заключи директорията за администриране (/ var / lib / dpkg /) . От гледна точка на начинаещия, това е сложна грешка, тъй като новите потребители най-вече не знаят за директорията "/ var / lib / dpkg /" и какво е свързано с текущата операция, която изпълняват.

Технически, грешката се изхвърля от системата в множество сценарии и човек наистина трябва да се погрижи за това как се справя с този проблем. В тази статия ще обсъдим всички тези аспекти, свързани с тази грешка и как може безопасно да се отървете от нея.

Не може да се заключи (/ var / lib / dpkg /) - диагностициране на проблема

Когато срещнете тази грешка, първата стъпка трябва да бъде внимателно прочетете описанието на грешката. Той обикновено съдържа някои важни и спестяващи време съвети. Например, следните екранни снимки показват командата "apt-get install", която хвърля подобни грешки.

Въпреки това, ако погледнете по-отблизо, ще забележите, че текстът в скоби в първия ред и текстът след запетаята на втория ред са различни и при двата сценария, което ясно показва, че грешката в първия сценарий има какво да правете с потребителските разрешения, докато във втория сценарий това е свързано с временното недостъпност на файла за заключване.

Ако сте изправени пред грешка, свързана с разрешения (както е показано на първото изображение по-горе), най-вероятно е, че потребителят, изпълняващ командата "apt-get" или "apt", няма достатъчно привилегии и командата бе изпълнена без sudo . След като командата се изпълни с права на root, грешката ще изчезне.

Ако обаче това е грешка, свързана със заключване, тя изисква допълнително разследване.

Какво представлява / 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 (повече информация за тях тук). Това трябва да реши проблема, с който се сблъсквате.

Едно нещо, което си заслужава да се спомене, е, че убиването на "dpkg" процес директно никога не се препоръчва - може да корумпира базата данни за пакети. Подчертавам тази точка, защото сега знаете, че инструменти като "apt" и "apt-get" извикват "dpkg" вътрешно, така че е напълно възможно да мислите за убиването на процеса "dpkg" "Команда изход.

Процесите на убиване, инициирани чрез стартиране на apt, apt-get или aptitude командите обикновено са много по-безопасни.

Стъпка 3: Когато изходът на командата "ps" не помогне

Имайте предвид, че освен инструментите на командния ред като apt и apt-get, някои приложения, базирани на графичен интерфейс, като Софтуерния център или мениджъра за актуализации, също придобиват тази ключалка.

Забележка : Ако получавате грешка, свързана с заключването, веднага след като сте стартирали Ubuntu, е напълно възможно вашата операция да се припокрива с автоматичното сканиране, инициирано от мениджъра за актуализации. Изчакването малко би трябвало да реши проблема в този случай.

Връщайки се към приложенията, базирани на GUI, за които говорихме, още една полезна и спестяваща време опция е да използвате командата за fuser .

С "fuser" трябва само да знаете достъпа до файла ("/ var / lib / dpkg / lock" в нашия случай) и можете да убиете процеса, който има достъп до този файл дори и да не знаете кой е процесът. Например:

 sudo fuser -cuk / var / lib / dpkg / заключване 

Имайте предвид, че командата на fuser няма да освободи ключалката, придобита от процеса, който току-що убихте, така че трябва да направите това ръчно:

 sudo rm -f / var / lib / dpkg / заключване 

Забележка : За да " освободите ключалката " просто означава да изтриете файла "lock", така че други процеси да " придобият ключалката ", като го пресъздадете.

Може да се наложи да изпълните и следните две команди:

 sudo fuser -cuk / var / кеш / apt / архив / заключване; sudo rm -f / var / кеш / apt / архив / заключване 

Важен съвет : никога да не изтривате заключващите файлове като първа стъпка - това би трябвало да бъде само последната ви възможност.

заключение

По принцип винаги е добре да разберете причината за проблема, преди да го направите и да го разрешите. Сляпо опитващите решения за решаване на проблем никога няма да ви помогне - може да успеете в някои случаи, но по-често ще се окажете в още по-голяма бъркотия, особено ако операционната система е Linux.

Били ли сте някога изправени пред грешката, която разгледахме тук? Как го оправихте? Оставете отговора си в коментарите.