[LINUX] 大量出現dpkg: warning: files list file for package ‘xxx’ missing; assuming package has no files currently installed的可能解法

如果說某天不知道什麼原因刪除或衝突,造成安裝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途中斷訊又重來喔。

其他參考:

  • https://caloskao.org/ubuntu-dpkg-warning-files-list-file-for-package-missing-assuming-package-has-no-files-currently-installed/
  • https://gist.github.com/jeffersfp/33037aa05b042f35277a6c057930c81b
  • https://askubuntu.com/questions/949760/dpkg-warning-files-list-file-for-package-missing
  • 發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    請輸入下列驗證碼計算後阿拉伯數字 (Translate it, if not Taiwanese to post reply) *