Featured image of post Ubuntu - APT install 或 update 時出現 /var/lib/dpkg/lock-frontend 的解決方法

Ubuntu - APT install 或 update 時出現 /var/lib/dpkg/lock-frontend 的解決方法

五年前有寫過一篇類似的文章,不過錯誤訊息稍微有些不同,印像中當時執行的 Ubuntu 版本是 16 或是 18。

本篇適用於 Ubuntu 20 以後的版本,舊版文章請參考這邊

在 Ubuntu 上安裝或更新套件時有時會遇到 APT 套件管理器被鎖定的情況

1
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 2734 (jammy)... 5s

建議是找出程序並正常結束它,而不是本文的強制結束,因為其他程序可能正在安裝套件,中斷的話會破壞套件完整性,使系統某個功能損壞,而需要透過其他方法介入修補。

因為這種情況最常發生在桌面板的 GUI 介面下,套件管理器會跳出提示通知更新,但本身會一直卡在 GUI 的確認對話框;如果是使用 SSH 遠端機器的話是沒辦法介入 GUI 介面的,所以這種情況就適用本文的解法。

前面的訊息結尾有顯示是 PID 2734 使用中,但可能不只一個 PID 佔住,可以透過 lsof 查詢所有使用中的 PID

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

輸出如下,可以看到有兩個處理程序佔用

1
2
3
4
5
6
7
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/125/gvfs
      Output information may be incomplete.
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
jammy   2734 root    8uW  REG    8,5        0 2621854 /var/lib/dpkg/lock-frontend
jammy   9282 root    8u   REG    8,5        0 2621854 /var/lib/dpkg/lock-frontend

使用 sudo kill -9 <PID> 強制結束

1
2
sudo kill -9 2734;
sudo kill -9 9282;

再次執行套件管理程式,應該就可以正常執行了。

如果不行的話,就重複上面的步驟 (使用 lsof 查找佔用 lock file 的處理程序),直到可以執行為止。


Reference: 【 Solutions 】解決更新套件或安裝套件遇到 - 無法將 /var/lib/dpkg/lock 鎖定

comments powered by Disqus