GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak opravit chybu „E:Nelze získat zámek /var/lib/dpkg/lock“ v Ubuntu Linux

Nedávno jsem se pokoušel nainstalovat aplikaci pomocí příkazu apt na Ubuntu, když jsem narazil na následující chybu:

E:Nelze získat zámek /var/lib/dpkg/lock – otevřít (11:Zdroj dočasně nedostupný)
E:Nelze zamknout administrační adresář (/var/lib/dpkg/), používá jej jiný proces?

Ve skutečnosti existuje podobná chyba, kterou můžete vidět:

E:Nelze získat zámek /var/lib/apt/lists/lock – otevřít (11:Zdroj dočasně nedostupný)
E:Nelze zamknout adresář /var/lib/apt/lists/
E:Nelze získat zámek /var/lib/dpkg/lock – otevřít (11:Zdroj dočasně nedostupný)
E:Nelze zamknout administrační adresář (/var/lib/dpkg/), používá jej jiný proces?

V některých případech jej můžete vidět při používání Centra softwaru:

Tyto chyby jsou velmi podobné jiné běžné chybě Ubuntu, Nelze zamknout adresář /var/cache/apt/archives/, a zajímavé je, že opravy jsou také podobné.

Oprava chyby „Nelze zamknout administrační adresář (/var/lib/dpkg/)“

Tato chyba se zobrazuje, protože se nějaký jiný program pokouší aktualizovat Ubuntu. Když příkaz nebo aplikace aktualizuje systém nebo instaluje nový software, uzamkne soubor dpkg (správce balíčků Debian).

Toto zamykání se provádí tak, aby dva procesy neměnily obsah současně, protože by to mohlo vést k neoprávněné situaci a možnému rozbití systému.

Podívejme se, jaké kroky můžete podniknout k vyřešení tohoto problému „nelze uzamknout administrativní adresář“.

Metoda 0:

První věc, kterou byste měli udělat, je zkontrolovat, zda nějaký jiný program nemůže spouštět aktualizaci systému nebo instalovat program.

Pokud používáte příkazový řádek, zkontrolujte, zda aplikace jako Software Center, Software Updater, Správce balíčků Synaptic, Gdebi nespouští nějakou aktualizaci/instalaci. V takovém případě počkejte, až program dokončí proces běhu.

Pokud žádná taková aplikace neběží, zkontrolujte všechna otevřená okna terminálu a zjistěte, zda nespouštíte aktualizaci nebo neinstalujete program. Pokud ano, počkejte na dokončení.

Pokud se nic z výše uvedeného neděje, zkontrolujte, který další proces spouští příkaz apt (správce balíčků pro manipulaci se softwarem). Použijte tento příkaz:

ps aux | grep -i apt

Pro mě to ukázalo tento výstup:

[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

Pokud vidíte, že apt je používán programem jako apt.systemd.daily update , máš štěstí, můj milý čtenáři.

Toto je démon, který běží na pozadí a automaticky kontroluje aktualizace systému při spuštění systému.

V Ubuntu 18.04 a vyšších verzích se může dokonce pokusit stáhnout a nainstalovat důležité aktualizace zabezpečení sám. Alespoň to vidím ve výchozím nastavení v nástroji Software &Updates na ploše Ubuntu.

Pokud jste na serveru Ubuntu, můžete zkontrolovat, zda máte povoleny bezobslužné aktualizace, zkontrolováním obsahu souboru /etc/apt/apt.conf.d/20auto-upgrades .

Pokud tedy vidíte, že apt.systemd.daily používá proces apt, vše, co musíte udělat, je počkat několik minut. Po dokončení automatické aktualizace byste měli být schopni nainstalovat software jako obvykle.

Jako trvalé řešení můžete zcela zakázat kontrolu automatických aktualizací a bezobslužných upgradů, ale z bezpečnostních důvodů to nedoporučuji.

Nyní to byl jednoduchý scénář a dalo se s ním snadno zacházet. Ale nemusí tomu tak být vždy. Pokud apt používá nějaký jiný program, musíte s ním zacházet jinak.

Metoda 1:

Použijte příkazový řádek Linuxu k nalezení a ukončení běžícího procesu. Chcete-li to provést, použijte příkaz níže:

ps aux | grep -i apt

Zobrazí se vám ID procesu, na kterém běží apt nebo apt-get. V příkladu níže je ID procesu 7343. Poslední řádek obsahující ‚grep –color=auto‘ můžete ignorovat.

Pomocí id procesu jej můžete ukončit odesláním signálu SIGTERM. Nahraďte číslem, které jste získali ve výstupu předchozího příkazu.

sudo kill <process_id>

Zkontrolujte, zda byl proces zabit spuštěním „ps aux | grep -i apt’ příkaz. Pokud stále běží, vynuceně ho zabijte signálem SIGKILL:

sudo kill -9 <process_id>

Dalším, jednodušším způsobem by bylo použití příkazu killall. Toto zruší všechny instance běžícího programu:

sudo killall apt apt-get

Metoda 2

Výše uvedená metoda by ve většině případů problém vyřešila. Můj případ byl ale trochu jiný. Aktualizoval jsem svůj systém a omylem jsem zavřel terminál. Z tohoto důvodu nebyly spuštěny žádné procesy apt, ale stále mi to ukazovalo chybu.

Doporučil bych vyzkoušet výše uvedené dvě metody nebo jednoduše nejprve restartovat systém. Pokud nic z toho nefunguje, pak tuto možnost odstranění souborů zámku zvolíte pouze vy.

V tomto případě je hlavní příčinou soubor zámku. Jak již bylo zmíněno dříve, soubory zámku se používají k tomu, aby zabránily dvěma nebo více procesům používat stejná data. Když jsou spuštěny příkazy apt nebo apt-get, vytvářejí na několika místech soubory zámku. Pokud předchozí příkaz apt nebyl správně ukončen, soubory zámku nebudou smazány, a proto zabrání jakýmkoli novým instancím příkazů apt-get nebo apt.

Chcete-li problém vyřešit, vše, co musíte udělat, je odstranit soubory zámku. Než to však uděláte, bylo by dobré zastavit jakýkoli proces, který používá soubory zámku.

Pomocí příkazu lsof získáte ID procesu procesu obsahujícího soubory zámku. Zkontrolujte chybu a zjistěte, na jaké soubory zámku si stěžuje, a získejte ID procesů, které tyto soubory zámku uchovávají.

Spusťte tyto příkazy jeden po druhém.

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

Je možné, že příkazy nevrátí nic nebo vrátí pouze jedno číslo. Pokud vrátí alespoň jedno číslo, použijte číslo (čísla) a ukončete procesy takto (nahraďte čísly, které jste získali z výše uvedených příkazů):

sudo kill -9 <process_id>

Nyní můžete bezpečně odstranit soubory zámku pomocí následujících příkazů:

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

Poté překonfigurujte balíčky:

sudo dpkg --configure -a

Nyní, když spustíte příkaz sudo apt update, vše by mělo být v pořádku.

Odstraňování problémů 1:„Nelze získat zámek frontendu dpkg“

Pokud se zobrazí chyba podobná této:

[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?

Měli byste zjistit, který proces drží lock-frontend pomocí příkazu lsof, jak je popsáno v předchozích částech:

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

Ukázalo se mi toto:

[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

Pokud vidíte „unattende Sloupec COMMAND znamená, že jsou spuštěny bezobslužné aktualizace zabezpečení. Měli byste vyčkat na dokončení procesu . V podstatě to je to, o čem jsem hovořil v metodě 0, ale pravděpodobně jste to přeskočili.

Pokud je COMMAND něco jiného, ​​můžete proces ukončit a poté odstranit soubor zámku. ID procesu můžete vidět ve sloupci PID. Použijte tento PID k ukončení procesu. Poté odstraňte soubor zámku a spusťte příkaz aktualizace, abyste zjistili, zda byl opraven.

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

Co je to lsof:warning can't stat() fuse.gvfsd-fuse file system?

Poznámka:Pokud vidíte „lsof:warning can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Po spuštění dříve zmíněného příkazu lsof mohou být výstupní informace neúplné, nepropadejte panice.

To není chyba. Jde jen o to, že lsof se také pokouší podívat do připojených souborových systémů a varování se týká těchto připojených systémů.

Soubory jsou uzamčeny procesy na vašem hlavním souborovém systému, takže pokud se zobrazí nějaké varování a žádný výstup, znamená to pouze, že tyto zamykací soubory nepoužívá žádný proces.

Odstraňování problémů 2:„dpkg:chyba:frontend dpkg je uzamčen jiným procesem“

Pokud se při provádění kroků v metodě 2 zobrazí chyba „dpkg frontend je uzamčen jiným procesem“, musíte provést jeden další krok.

Nejprve zjistěte ID procesu, který drží soubor zámku.

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

Výše uvedený příkaz vám poskytne podrobnosti o procesech používajících soubory zámku. K ukončení tohoto programu použijte ID procesu:

sudo kill -9 PID

Nyní můžete odstranit zámek a znovu nakonfigurovat dpkg:

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

Osvědčilo se vám to? Která metoda vám to vyřešila?

Doufám, že vám tento malý tip pomohl opravit chybu „Could not get lock /var/lib/dpkg/lock“. Pokud ano, dejte mi prosím vědět do komentářů, která metoda se vám osvědčila.

Pokud stále čelíte problému, dejte mi vědět. Pokusím se vám pomoci.

Jakékoli další návrhy jsou také vítány v komentářích.



Ubuntu
  1. Ubuntu E:Nelze získat chybu lock /var/lib/dpkg/lock – opravit to hned?

  2. Jak zabít proces držení zámku Apt?

  3. Jak opravit chybu „Nelze získat zámek / var / lib / dpkg / lock – otevřít (11 zdrojů dočasně nedostupných)

  1. Oprava chyby „dpkg:chyba:parsování souboru „/var/lib/dpkg/updates/0014′“ v Ubuntu

  2. Oprava E:Nelze získat zámek /var/cache/apt/archives/lock [Rychlý tip]

  3. Jak opravit chybu „Lockfile / var / lib / dpkg / lock-frontend nelze otevřít“

  1. Jak opravit dílčí proces /usr/bin/dpkg vrátil kód chyby (1) v Ubuntu

  2. Jak opravit Na Ubuntu se nepodařilo získat chybu lock /var/lib/dpkg/lock

  3. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?