Een aantal keer apt-get tijdens het installeren / bijwerken van een pakket vanaf de opdrachtregel ( apt-get of apt ) in Ubuntu de volgende foutmelding: E: de beheerdersdirectory kan niet worden vergrendeld (/ var / lib / dpkg /) . Vanuit het oogpunt van een beginner is het een complexe fout, omdat nieuwe gebruikers meestal niet op de hoogte zijn van de map "/ var / lib / dpkg /" en wat het te maken heeft met de huidige bewerking die ze uitvoeren.

Technisch gezien wordt de fout door het systeem in meerdere scenario's geworpen, en moet men echt oppassen hoe hij / zij dit probleem gaat oplossen. In dit artikel bespreken we al deze aspecten met betrekking tot deze fout en hoe u er veilig vanaf kunt komen.

Kan niet vergrendelen (/ var / lib / dpkg /) - diagnose van het probleem

Wanneer u deze fout tegenkomt, moet de eerste stap zijn om de foutbeschrijving zorgvuldig te lezen. Het bevat meestal een aantal cruciale en tijdbesparende tips. Als voorbeeld tonen de volgende schermafbeeldingen de opdracht "apt-get install" met gelijkaardige fouten.

Als u echter van dichterbij kijkt, ziet u dat de tekst tussen haakjes in de eerste regel en de tekst achter de komma in de tweede regel in beide scenario's verschillend zijn, waardoor het duidelijk is dat de fout in het eerste scenario iets te doen met gebruikersrechten, terwijl in het tweede scenario dit verband houdt met het tijdelijk onbeschikbaar zijn van het vergrendelingsbestand.

Als u geconfronteerd wordt met een toestemmingsfout (zoals weergegeven in de eerste afbeelding hierboven), komt dit waarschijnlijk omdat de gebruiker die de opdracht "apt-get" of "apt" uitvoert onvoldoende rechten heeft en de opdracht is uitgevoerd zonder sudo . Zodra de opdracht met rootprivileges wordt uitgevoerd, verdwijnt de fout.

Als het echter een vergrendelingsfout is, moet er verder onderzoek worden gedaan.

Wat is / var / lib / dpkg /?

"/ Var / lib / dpkg /" kan worden beschouwd als de werkmap voor pakketmanager "dpkg", die op zijn beurt eigenlijk de motor is achter "apt-get" (evenals "apt" en "aptitude" -tools) . Wanneer u deze hulpmiddelen gebruikt om software te installeren of te verwijderen, vergrendelt u de pakketdatabase (door een "vergrendelbestand" te maken) voordat u de eigenlijke bewerking uitvoert, iets dat feitelijk wordt gedaan door de vergrendeling voor de "/ var / lib / dpkg / "Map. Deze stap helpt bij het voorkomen van datacorruptie of onderbreking van een lopende bewerking die door een ander proces wordt uitgevoerd.

Ervan uitgaande dat u het bovenstaande toegelichte concept hebt begrepen, laten we het nu hebben over de onderzoekstappen.

Stap 1: Kijk of er een ander proces is dat het slot vasthoudt

Dit zou nu heel logisch moeten lijken, toch? En om dit te doen, kun je de goede oude ps opdracht gebruiken en de uitvoer naar de grep opdracht grep zodat je minder tijd kwijt bent aan het zoeken naar wat je wilt. Hier is bijvoorbeeld een opdracht waarmee u kunt zien of er al een "apt", "apt-get" of "aptitude" -proces actief is:

 ps aux | grep apt 

Stap 2: Wacht een tijdje en onderneem actie

Als er inderdaad een commando is dat het slot al heeft gekregen, moet je idealiter wachten tot het is voltooid en het slot vrijgeven. Als het commando echter meer dan de verwachte tijd in beslag neemt en je weet zeker dat het ergens vastzit, kun je het doen en het doden met behulp van de beschikbare kill of killall commando's (hier meer informatie over). Dit zou het probleem moeten oplossen waarmee u geconfronteerd wordt.

Een ding dat het vermelden waard is, is dat het rechtstreeks afwijzen van een "dpkg" -proces nooit wordt aanbevolen - dit kan de pakketdatabase beschadigen. Ik benadruk dit punt omdat je nu weet dat tools zoals "apt" en "apt-get" intern "dpkg" aanroepen, dus het is heel goed mogelijk dat je denkt om het "dpkg" -proces te doden als je het in de "ps ziet "Opdracht uitvoer.

Moordprocessen die worden geïnitieerd door apt-, apt-get- of aptitude-opdrachten uit te voeren, zijn over het algemeen veel veiliger.

Stap 3: Wanneer de uitvoer van het "ps" -commando niet helpt

Houd er rekening mee dat, afgezien van opdrachtregelprogramma's zoals apt en apt-get, sommige GUI-gebaseerde toepassingen zoals het Software Center of de Update Manager ook deze vergrendeling verkrijgen.

Opmerking : als u de vergrendelingsfout krijgt net nadat u bent opgestart in Ubuntu, is het vrij goed mogelijk dat uw bewerking overlapt met de automatische polling die wordt gestart door de update-manager. Een beetje wachten zou in dit geval het probleem moeten oplossen.

Terugkomend op de GUI-gebaseerde applicaties waar we het over hadden, is een andere handige en tijdbesparende optie om de fuser opdracht te gebruiken.

Met "fuser" hoeft u alleen het bestand te weten dat wordt geopend ("/ var / lib / dpkg / lock" in ons geval), en u kunt het proces dat toegang tot dat bestand krijgt, uitschakelen, zelfs als u niet weet welk proces het is. Bijvoorbeeld:

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

Houd er rekening mee dat de fuser opdracht niet het slot vrijgeeft dat is verkregen door het proces dat u net hebt gedood, dus u moet dit handmatig doen:

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

Opmerking : om het " ontgrendelen van het slot " eenvoudigweg betekent het verwijderen van het "slot" -bestand zodat andere processen het "slot" kunnen krijgen door het opnieuw te maken.

U moet mogelijk ook de volgende twee opdrachten uitvoeren:

 sudo fuser -cuk / var / cache / apt / archieven / vergrendelen; sudo rm -f / var / cache / apt / archieven / vergrendelen 

Belangrijke tip : verwijder nooit vergrendelingsbestanden als eerste stap - dit zou alleen je laatste redmiddel moeten zijn.

Conclusie

Over het algemeen is het altijd goed om de reden achter het probleem te begrijpen voordat je verder gaat en het probleem oplost. Blind proberen oplossingen om een ​​probleem op te lossen zullen je nooit helpen - je zult in sommige gevallen slagen, maar vaker wel dan niet zul je jezelf in een nog grotere puinhoop bevinden, vooral als het besturingssysteem Linux is.

Heb je ooit de fout gezien die we hier bespraken? Hoe heb je het uitgezocht? Laat uw antwoord achter in de comments.