Corregiu No es pot bloquejar el directori d'administració (/var/lib/dpkg/) a Ubuntu


Quan utilitzeu l'eina de gestió de paquets APT a Ubuntu Linux o els seus derivats com Linux Mint (que en realitat faig servir com a sistema operatiu principal per fer el treball diari), potser us heu trobat amb l'error: \no es pot bloquejar el directori d'administració (/ var/lib/dpkg/) és un altre procés que l'utilitza a la línia d'ordres.

Aquest error pot ser molt molest, especialment per als nous usuaris de Linux (Ubuntu) que potser no saben exactament la causa de l'error.

A continuació es mostra un exemple que mostra l'error del fitxer de bloqueig a Ubuntu 16.10:

[email :~$ sudo apt install neofetch
[sudo] password for tecmint:
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?

La sortida següent és una altra possible instància del mateix error:

E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/ 
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?

Com podeu resoldre l'error anterior en cas que us trobeu amb ell en el futur? Hi ha diverses maneres de tractar aquests errors, però en aquesta guia passarem per les dues maneres més fàcils i probablement més efectives de resoldre'ls.

1. Cerca i elimina tots els processos apt-get o apt

Executeu l'ordre següent per a les ordres grep juntament amb una canalització.

$ ps -A | grep apt

Per a cada procés apt-get o apt que podeu veure a la sortida de l'ordre anterior, mateu cada procés amb l'ordre següent.

L'ID del procés (PID) es troba a la primera columna de la captura de pantalla anterior.

$ sudo kill -9 processnumber
OR
$ sudo kill -SIGKILL processnumber

Per exemple, a l'ordre següent on 9 és el número de senyal per al senyal SIGKILL, matarà el primer procés apt:

$ sudo kill -9 13431
OR
$ sudo kill -SIGKILL 13431

2. Suprimeix els fitxers de bloqueig

Un fitxer de bloqueig simplement impedeix l'accés a un altre fitxer o algunes dades del vostre sistema Linux, aquest concepte també està present a Windows i altres sistemes operatius.

Un cop executeu una ordre apt-get o apt, es crea un fitxer de bloqueig a qualsevol d'aquests directoris /var/lib/apt/lists/, /var/lib/dpkg/ i /var/cache/apt/archives/.

Això ajuda a evitar que el procés apt-get o apt que ja s'està executant sigui interromput per un usuari o per altres processos del sistema que haurien de treballar amb fitxers utilitzats per apt-get o apt. Quan el procés s'ha acabat d'executar, el fitxer de bloqueig s'elimina.

Important: en cas que encara estigui sortint un bloqueig als dos directoris anteriors sense que no s'executi cap procés apt-get o apt notable, això pot significar que el procés s'ha mantingut per una raó o una altra, per tant, heu de suprimir els fitxers de bloqueig per tal de esborra l'error.

Primer executeu l'ordre següent per eliminar el fitxer de bloqueig al directori /var/lib/dpkg/:

$ sudo rm /var/lib/dpkg/lock

Després força els paquets a reconfigurar així:

$ sudo dpkg --configure -a

Alternativament, suprimiu els fitxers de bloqueig del /var/lib/apt/lists/ i el directori de la memòria cau com es mostra a continuació:

$ sudo rm /var/lib/apt/lists/lock
$ sudo rm /var/cache/apt/archives/lock

A continuació, actualitzeu la llista de fonts de paquets de la següent manera:

$ sudo apt update
OR
$ sudo apt-get update

En conclusió, hem recorregut dos mètodes importants per fer front a un problema comú que s'enfronten els usuaris d'Ubuntu (i els seus derivats), mentre executem apt-get o apt, així com les ordres d'aptitude.

Teniu altres mètodes fiables per compartir per fer front a aquest error comú? A continuació, poseu-vos en contacte amb nosaltres mitjançant el formulari de comentaris que trobareu a continuació.

A més, també podeu aprendre les ordres kill, pkill i killall per finalitzar un procés a Linux.