2010-12-03

更新套件庫或安裝套件遇到「無法將 /var/lib/dpkg/lock 鎖定」 解法


我想蠻多人更新套件庫或安裝套件時,會出現這個訊息 E: 無法將 /var/lib/dpkg/lock 鎖定 - open (11: 資源暫時無法取得) ,原因是使用 apt-get , aptitude , synaptic , software-center …等等的程式還沒有關閉。

如果忘記是那個程式沒關的話,可使用 lsof (list open files) 找出是那個程序佔用檔案,再用手動關閉或是使用指令的方法,殺掉正在執行程序。



1、用 lsof 找出目前是那個程序在使用 /var/lib/dpkg/lock

sudo lsof /var/lib/dpkg/lock

從訊息可看出目前是 aptitude 在佔用 /var/lib/dpkg/lock ,你可以找找目前是不是剛剛有使用 aptitude ,若有的話等程式跑完應該就可更新/安裝了。

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
aptitude 19100 root    4uW  REG   8,41        0 1178238 /var/lib/dpkg/lock

2、如果,找出來的程序是己經沒在執行又遺忘在那開啟的話,直接用 kill 殺掉那個程序也行,我這裡是 aptitude 他的 PID 是 19100,我把那個程序殺掉就能正常使用了。

sudo kill 19100

更多losf指令用法可參考:
lsof | danielmiessler.com
lsof 指令