Korjaa Ubuntun "Hallintahakemistoa (/var/lib/dpkg/) ei voida lukita"


Kun käytän apt-get-komentoa tai suhteellisen uutta APT-paketinhallintatyökalua Ubuntu Linuxissa tai sen johdannaisia, kuten Linux Mint (jota itse käytän ensisijaisena käyttöjärjestelmänä päivittäisessä työssäsi), olet saattanut kohdata virheen – "hallintahakemiston lukitseminen (/var/lib/dpkg/) on toinen prosessi, joka käyttää sitä komentoriviltä.

Tämä virhe voi olla niin ärsyttävä etenkin uusille Linux (Ubuntu) -käyttäjille, jotka eivät välttämättä tiedä tarkalleen virheen syytä.

Alla on esimerkki, joka näyttää lukitustiedoston virheen Ubuntu 16.10:ssä:

tecmint@TecMint:~$ 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?

Alla oleva tulos on toinen saman virheen mahdollinen esiintymä:

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?

Kuinka voit ratkaista yllä olevan virheen, jos törmäät siihen tulevaisuudessa? On olemassa useita tapoja käsitellä näitä virheitä, mutta tässä oppaassa käymme läpi kaksi helpointa ja luultavasti tehokkainta tapaa ratkaista se.

1. Etsi ja tappaa kaikki apt-get- tai apt-prosessit

Suorita alla oleva komento luodaksesi luettelo kaikista prosesseista, joiden nimi koostuu sanasta apt, saat luettelon, joka sisältää kaikki apt tai apt-get<. prosessoi käyttämällä ps- ja grep-komentoja yhdessä liukuhihnan kanssa.

ps -A | grep apt

Lopeta jokainen prosessi alla olevan komennon avulla jokaisessa apt-get- tai apt-prosessissa, jonka näet yllä olevan komennon tulosteessa.

Prosessi ID (PID) löytyy yllä olevan kuvakaappauksen ensimmäisestä sarakkeesta.

sudo kill -9 processnumber
OR
sudo kill -SIGKILL processnumber

Esimerkiksi alla oleva komento, jossa 9 on signaalin numero SIGKILL-signaalille, lopettaa ensimmäisen apt-prosessin:

sudo kill -9 13431
OR
sudo kill -SIGKILL 13431

2. Poista lukkotiedostot

Lukitustiedosto yksinkertaisesti estää pääsyn muihin tiedostoihin tai joihinkin tietoihin Linux-järjestelmässäsi. Tämä käsite on olemassa Windowsissa ja myös muissa käyttöjärjestelmissä.

Kun suoritat komennon apt-get tai apt, johonkin näistä hakemistoista /var/lib/apt/lists/ luodaan lukitustiedosto., /var/lib/dpkg/ ja /var/cache/apt/archives/.

Tämä auttaa välttämään jo käynnissä olevan apt-get- tai apt-prosessin keskeytymisen joko käyttäjän tai muiden järjestelmäprosessien toimesta, joiden on toimittava käyttäjän käyttämien tiedostojen kanssa. apt-get tai apt. Kun prosessi on suoritettu, lukkotiedosto poistetaan.

Tärkeää: jos lukko poistuu edelleen kahdesta yllä olevasta hakemistosta ilman havaittavaa apt-get- tai apt-prosessia, tämä voi tarkoittaa, että prosessi keskeytettiin yhdestä syystä tai toinen, siksi sinun on poistettava lukitustiedostot virheen poistamiseksi.

Suorita ensin alla oleva komento poistaaksesi lukitustiedoston /var/lib/dpkg/-hakemistosta:

sudo rm /var/lib/dpkg/lock

Myöhemmin pakota paketit määrittämään uudelleen seuraavasti:

sudo dpkg --configure -a

Vaihtoehtoisesti voit poistaa lukitustiedostot hakemistosta /var/lib/apt/lists/ ja välimuistihakemistosta seuraavasti:

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

Päivitä seuraavaksi pakettien lähdeluettelo seuraavasti:

sudo apt update
OR
sudo apt-get update

Lopuksi totean, että olemme käyneet läpi kaksi tärkeää tapaa käsitellä Ubuntun (ja sen johdannaisten) käyttäjien kohtaamia yleisiä ongelmia, kun suoritimme apt-get tai apt sekä aptitude komennot.

Onko sinulla muita luotettavia jaettavia menetelmiä tämän yleisen virheen käsittelemiseksi? Ota sitten meihin yhteyttä alla olevan palautelomakkeen kautta.

Lisäksi saatat haluta oppia löytämään ja lopettamaan käynnissä olevia prosesseja ja lukea yksinkertaisen oppaan kill-, pkill- ja killall-komentojen lopettamiseen Linuxissa.