如果說某天不知道什麼原因刪除或衝突,造成安裝apt套件更新時,跳出類似這樣的訊息:
dpkg: warning: files list file for package ‘xxx’ missing; assuming package has no files currently installed
NOTE: xxx為某個package名稱
一般解法是apt reinstall xxx來重新安裝和更新。
可是,如果像我不知道動到系統什麼,忽然大量的數十筆(近百筆)列出這樣的錯誤訊息。
一步一步複製貼上來重新安裝,實在是太沒效率了。
所以,可以寫一個簡單的FOR迴圈,來把找到的異常套件檔案,重新再一次灌回來。
首先,要先撈出這堆異常的套件有哪些,先存在一個文字檔裡面。
我的方法是這樣:
sudo apt install xxx | grep "assuming package has no files currently installed" >> warm.txt
或者
dpkg -S dummy query 2 >> warm.txt
撈好以後,可以用VIM或其他方便使用的文字編輯軟體。
人工的刪除不要的資訊文字,只留下每一行找到的xxx套件名稱。
檔案存成warm-edited.txt。
如下類似顯示清單:
python3-setuptools
libcaca0:arm64
libpam-modules:arm64
libxpm4:arm64
libgles2-mesa:arm64
...等
最後,下個以下的FOR迴圈一行指令(sudo或是sudo su在管理者權限下),來重新安裝。
i=0; for package in $(cat ./warm-edited.txt); do i=$(($i+1)}; echo "NUMBER $i ... sudo apt reinstall -y $package ... "; sudo apt reinstall -y $package; done;
過程中就等他逐步掃描改好只剩套件名稱的warm-edited.txt檔案,一路自動重新安裝了。
不過,途中可能會遇到關鍵設定檔案,系統會問是否保留或換成最新的版本。
這個會停在那個畫面等處理按ENTER,所以可能要用遠端桌面來跑terminal,避免意外ssh途中斷訊又重來喔。
其他參考: