GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come risolvere l'errore "E:impossibile ottenere il blocco /var/lib/dpkg/lock" in Ubuntu Linux

Recentemente stavo cercando di installare un'applicazione usando il comando apt su Ubuntu quando ho riscontrato il seguente errore:

E:Impossibile ottenere il blocco /var/lib/dpkg/lock – aperto (11:Risorsa temporaneamente non disponibile)
E:Impossibile bloccare la directory di amministrazione (/var/lib/dpkg/), viene utilizzata da un altro processo?

In effetti, potresti vedere un errore simile:

E:Impossibile ottenere il blocco /var/lib/apt/lists/lock – aperto (11:Risorsa temporaneamente non disponibile)
E:Impossibile bloccare la directory /var/lib/apt/lists/
E:Impossibile ottenere il blocco /var/lib/dpkg/lock – aperto (11:Risorsa temporaneamente non disponibile)
E:Impossibile bloccare la directory di amministrazione (/var/lib/dpkg/), viene utilizzata da un altro processo?

In alcuni casi, potresti vederlo durante l'utilizzo del Software Center:

Questi errori sono molto simili a un altro errore comune di Ubuntu, Impossibile bloccare la directory /var/cache/apt/archives/, e la cosa interessante è che anche le correzioni sono simili.

Risolto errore "Impossibile bloccare la directory di amministrazione (/var/lib/dpkg/)"

Viene visualizzato questo errore perché qualche altro programma sta tentando di aggiornare Ubuntu. Quando un comando o un'applicazione aggiorna il sistema o installa un nuovo software, blocca il file dpkg (gestore di pacchetti Debian).

Questo blocco viene eseguito in modo che due processi non modifichino il contenuto contemporaneamente in quanto potrebbero portare a situazioni ingiustificate e un possibile sistema rotto.

Vediamo quali passaggi puoi intraprendere per risolvere questo problema di "impossibile bloccare la directory di amministrazione".

Metodo 0:

La prima cosa da fare è controllare se qualche altro programma potrebbe eseguire l'aggiornamento del sistema o installare un programma.

Se stai usando la riga di comando, controlla se un'applicazione come Software Center, Software Updater, Synaptic Package Manager, Gdebi sta eseguendo aggiornamenti/installazioni. In tal caso, attendi che il programma termini il processo in esecuzione.

Se non è presente alcuna applicazione in esecuzione, controlla tutte le finestre del terminale aperte e verifica se stai eseguendo un aggiornamento o installando un programma. Se sì, aspetta che finisca.

Se non si verifica nessuno dei precedenti, controlla quale altro processo sta eseguendo il comando apt (gestore di pacchetti per la gestione del software). Usa questo comando:

ps aux | grep -i apt

Per me, ha mostrato questo output:

[email protected]:~$ ps aux | grep -i apt
root      1464  0.0  0.0   4624   772 ?        Ss   19:08   0:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
root      1484  0.0  0.0   4624  1676 ?        S    19:08   0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
_apt      2836  0.8  0.1  96912  9432 ?        S    19:09   0:03 /usr/lib/apt/methods/http
abhishek  6172  0.0  0.0  21532  1152 pts/1    S+   19:16   0:00 grep --color=auto -i apt

Se vedi che apt è utilizzato da un programma come apt.systemd.daily update , sei fortunato, mio ​​caro lettore.

Questo è un demone che viene eseguito in background e controlla automaticamente gli aggiornamenti di sistema all'avvio del sistema.

In Ubuntu 18.04 e versioni successive, potrebbe anche provare a scaricare e installare da solo gli importanti aggiornamenti di sicurezza. Almeno questo è ciò che vedo nelle impostazioni predefinite nello strumento Software e aggiornamenti sul desktop di Ubuntu.

Se sei su un server Ubuntu, puoi controllare se hai aggiornamenti automatici abilitati controllando il contenuto del file /etc/apt/apt.conf.d/20auto-upgrades .

Quindi se vedi che apt.systemd.daily sta usando il processo apt, tutto quello che devi fare è aspettare qualche minuto. Al termine dell'aggiornamento automatico, dovresti essere in grado di installare il software come di consueto.

Come soluzione permanente, puoi disabilitare del tutto il controllo per l'aggiornamento automatico e gli aggiornamenti automatici, tuttavia non lo consiglierò per motivi di sicurezza.

Ora, quello era lo scenario semplice e poteva essere gestito facilmente. Ma potrebbe non essere sempre così. Se qualche altro programma sta usando apt, devi gestirlo in modo diverso.

Metodo 1:

Usa la riga di comando di Linux per trovare e terminare il processo in esecuzione. Per farlo, usa il comando seguente:

ps aux | grep -i apt

Questo ti mostrerà l'id del processo in esecuzione apt o apt-get. Nell'esempio seguente, l'ID processo è 7343. Puoi ignorare l'ultima riga contenente 'grep –color=auto'.

È possibile utilizzare l'id del processo per terminarlo inviando il segnale SIGTERM. Sostituisci con il numero che hai ottenuto nell'output del comando precedente.

sudo kill <process_id>

Controlla se il processo è stato terminato eseguendo il comando 'ps aux | grep -i apt' comando. Se è ancora in esecuzione, forza l'uccisione con il segnale SIGKILL:

sudo kill -9 <process_id>

Un altro modo più semplice sarebbe usare il comando killall. Questo ucciderà tutte le istanze di un programma in esecuzione:

sudo killall apt apt-get

Metodo 2

Il metodo sopra ti risolverebbe il problema nella maggior parte dei casi. Ma il mio caso era un po' diverso. Stavo aggiornando il mio sistema e ho chiuso accidentalmente il terminale. Per questo motivo, non c'erano processi in esecuzione apt, ma mi ha comunque mostrato l'errore.

Consiglierei di provare i due metodi precedenti o semplicemente di riavviare prima il sistema. Se nulla di tutto ciò funziona, solo tu scegli questa opzione per rimuovere i file di blocco.

In questo caso, la causa principale è il file di blocco. Come accennato in precedenza, i file di blocco vengono utilizzati per impedire a due o più processi di utilizzare gli stessi dati. Quando vengono eseguiti i comandi apt o apt-get, creano file di blocco in alcuni punti. Se il precedente comando apt non è stato terminato correttamente, i file di blocco non vengono eliminati e quindi impediscono qualsiasi nuova istanza di comandi apt-get o apt.

Per risolvere il problema, tutto ciò che devi fare è rimuovere i file di blocco. Ma prima di farlo, sarebbe una buona idea interrompere qualsiasi processo che utilizza i file di blocco.

Utilizzare il comando lsof per ottenere l'ID del processo che contiene i file di blocco. Controlla l'errore e guarda di quali file di blocco si lamenta e ottieni l'ID dei processi che contengono questi file di blocco.

Esegui questi comandi uno per uno.

sudo lsof /var/lib/dpkg/lock
sudo lsof /var/lib/apt/lists/lock
sudo lsof /var/cache/apt/archives/lock

È possibile che i comandi non restituiscano nulla o restituiscano solo un numero. Se restituiscono almeno un numero, usa i numeri e uccidi i processi in questo modo (sostituisci con i numeri che hai ottenuto dai comandi precedenti):

sudo kill -9 <process_id>

Ora puoi rimuovere in sicurezza i file di blocco utilizzando i comandi seguenti:

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

Successivamente, riconfigura i pacchetti:

sudo dpkg --configure -a

Ora, se esegui il comando sudo apt update, tutto dovrebbe andare bene.

Risoluzione dei problemi 1:"Impossibile acquisire il blocco frontend dpkg"

Se vedi un errore come questo:

[email protected]:~$ sudo apt install grub-customizer 
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

Dovresti scoprire quale processo sta tenendo il lock-frontend usando il comando lsof come discusso nelle sezioni precedenti:

sudo lsof /var/lib/dpkg/lock-frontend

Questo è quello che ha mostrato per me:

[email protected]:~$ sudo lsof /var/lib/dpkg/lock-frontend
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
unattende 2823 root    5uW  REG    8,2        0 145221 /var/lib/dpkg/lock-frontend

Se vedi "non presidi ' Colonna COMANDO, significa che sono in esecuzione aggiornamenti di sicurezza non presidiati. Dovresti attendere che il processo finisca . Fondamentalmente, questo è ciò di cui ho discusso nel metodo 0, ma probabilmente l'hai saltato.

Se il COMANDO è qualcos'altro, puoi terminare il processo e quindi rimuovere il file di blocco. Puoi vedere l'ID del processo sotto la colonna PID. Utilizzare questo PID per terminare il processo. Successivamente, rimuovi il file di blocco ed esegui il comando di aggiornamento per vedere se è stato corretto.

sudo kill -9 PID
sudo rm /var/lib/dpkg/lock-frontend
sudo apt update

Cos'è quel lsof:warning can't stat() fuse.gvfsd-fuse file system?

Nota:se vedi "lsof:warning can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Le informazioni di output potrebbero essere incomplete" righe dopo aver eseguito il comando lsof menzionato in precedenza, non farti prendere dal panico.

Non è un errore. È solo che lsof cerca di esaminare anche i file system montati e l'avviso riguarda quei sistemi montati.

I file sono bloccati dai processi sul tuo filesystem principale, quindi se mostra qualche avviso e nessun output, significa solo che non c'è nessun processo che usa quei file di blocco.

Risoluzione dei problemi 2:"dpkg:errore:dpkg frontend è bloccato da un altro processo"

Se viene visualizzato l'errore "dpkg frontend è bloccato da un altro processo" durante l'esecuzione dei passaggi del metodo 2, è necessario un passaggio aggiuntivo.

Innanzitutto, scopri l'ID del processo che contiene il file di blocco.

sudo lsof /var/lib/dpkg/lock-frontend

Il comando precedente ti fornirà i dettagli dei processi che utilizzano i file di blocco. Usa l'ID processo per terminare questo programma:

sudo kill -9 PID

Ora puoi rimuovere il blocco e riconfigurare dpkg:

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

Ha funzionato per te? Quale metodo te lo ha risolto?

Spero che questo piccolo suggerimento ti abbia aiutato a correggere l'errore "Impossibile ottenere il blocco /var/lib/dpkg/lock". Se sì, per favore fatemi sapere nei commenti quale metodo ha funzionato per voi.

Se hai ancora problemi, fammi sapere. Cercherò di aiutarti.

Eventuali altri suggerimenti sono ben accetti anche nei commenti.



Ubuntu
  1. Correzione dell'errore "dpkg:error:parsing file '/var/lib/dpkg/updates/0014'" in Ubuntu

  2. Correzione E:impossibile ottenere il blocco /var/cache/apt/archives/lock [Suggerimento rapido]

  3. Ubuntu E:Impossibile ottenere il blocco /var/lib/dpkg/lock error - Risolvilo ora?

  4. Come correggere l'errore "Impossibile ottenere lock / var / lib / dpkg / lock – open (11 risorsa temporaneamente non disponibile)"

  5. Come correggere l'errore "Impossibile aprire Lockfile / var / lib / dpkg / lock-frontend"

5 soluzioni - Come correggere l'errore "Comando Zsh non trovato" in Linux o macOS

Come risolvere l'errore "E:impossibile ottenere il blocco /var/lib/dpkg/lock" in Ubuntu

Correzione dell'errore "Impossibile ottenere il blocco /var/lib/dpkg/lock" una volta per tutte (Ubuntu)

Come risolvere "Le informazioni di aggiornamento sono obsolete" in Ubuntu Linux

Correzione dell'errore "Impossibile analizzare il file del pacchetto /var/lib/apt/lists" in Ubuntu e altre distribuzioni Linux

Come risolvere l'errore "Il repository non è ancora valido" in Ubuntu Linux