如何修復(fù) Ubuntu 中的“Unable to lock the administration directory (/var/lib/dpkg/)”
在 Ubuntu 或者它的衍生版如 Linux Mint(我已經(jīng)作為日常工作使用的系統(tǒng))中使用 apt-get 命令或者其相對(duì)更新的APT 管理工具時(shí),你可能會(huì)在命令行中看到一個(gè) unable to lock the administration directory (/var/lib/dpkg/) is another process using it 的錯(cuò)誤。
這個(gè)錯(cuò)誤尤其對(duì)那些對(duì)這個(gè)錯(cuò)誤原因不了解的 Linux(Ubuntu)新手而言更加惱人。
下面是一個(gè)例子,展示了出現(xiàn)在 Ubuntu 16.10 上的文件鎖定錯(cuò)誤:
- 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?
下面的輸出是另外一個(gè)可能顯示的錯(cuò)誤:
- 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?
你將來(lái)遇到這個(gè)錯(cuò)誤該怎么去解決?有好幾種方法處理這個(gè)錯(cuò)誤,但是本篇中我們會(huì)用兩種或許是最簡(jiǎn)單和最有效的方法來(lái)解決它。
1、找出并殺掉所有 apt-get 或者 apt 進(jìn)程
運(yùn)行下面的命令來(lái)生成所有含有 apt 的進(jìn)程列表,你可以使用 ps 和 grep 命令并用管道組合來(lái)得到含有 apt 或者 apt-get 的進(jìn)程。
- $ ps -A | grep apt
找出 apt 以及 apt-get 進(jìn)程
你可以看到上面命令輸出的每個(gè) apt-get 或者 apt 進(jìn)程,使用下面的命令殺掉每個(gè)進(jìn)程。
上面截圖中的***列是進(jìn)程 ID(PID)。
- $ sudo kill -9 processnumber
- 或者
- $ sudo kill -SIGKILL processnumber
比如,下面命令中的9是 SIGKILL 的信號(hào)數(shù),它會(huì)殺掉***個(gè) apt 進(jìn)程:
- $ sudo kill -9 13431
- 或者
- $ sudo kill -SIGKILL 13431
2、 刪除鎖定的文件
鎖定的文件會(huì)阻止 Linux 系統(tǒng)中某些文件或者數(shù)據(jù)的訪問(wèn),這個(gè)概念也存在于 Windows 或者其他的操作系統(tǒng)中。
一旦你運(yùn)行了 apt-get 或者 apt 命令,鎖定文件將會(huì)創(chuàng)建于/var/lib/apt/lists/、/var/lib/dpkg/、/var/cache/apt/archives/ 中。
這有助于運(yùn)行中的 apt-get 或者 apt 進(jìn)程能夠避免被其它需要使用相同文件的用戶或者系統(tǒng)進(jìn)程所打斷。當(dāng)該進(jìn)程執(zhí)行完畢后,鎖定文件將會(huì)刪除。
重要提醒:萬(wàn)一你在沒(méi)有看到 apt-get 或者 apt 進(jìn)程的情況下在上面兩個(gè)不同的文件夾中看到了鎖定文件,這是因?yàn)檫M(jìn)程由于某個(gè)原因被殺掉了,因此你需要?jiǎng)h除鎖定文件來(lái)避免該錯(cuò)誤。
首先運(yùn)行下面的命令來(lái)移除 /var/lib/dpkg/ 文件夾下的鎖定文件:
- $ sudo rm /var/lib/dpkg/lock
之后像下面這樣強(qiáng)制重新配置軟件包:
- $ sudo dpkg --configure -a
也可以刪除 /var/lib/apt/lists/ 以及緩存文件夾下的鎖定文件:
- $ sudo rm /var/lib/apt/lists/lock
- $ sudo rm /var/cache/apt/archives/lock
接下來(lái),更新你的軟件包源列表:
- $ sudo apt update
- 或者
- $ sudo apt-get update
總結(jié)一下,對(duì)于 Ubuntu(以及它的衍生版)用戶在使用 apt-get 或者 apt 也叫 aptitude 命令時(shí)遇到的問(wèn)題,我們已經(jīng)用兩種方法來(lái)解決了。
你有什么可以分享出來(lái)的有效的方法來(lái)處理這個(gè)錯(cuò)誤么?在下面的評(píng)論區(qū)聯(lián)系我們。
除此之外,你可能還希望了解如何找出并殺掉運(yùn)行的進(jìn)程,你可以閱讀這篇用 kill、pkill、killall 來(lái)中止進(jìn)程指南來(lái)了解。