如何修復 apt update 錯誤並安全執行 apt --fix-broken

如何修復 apt update 錯誤並安全執行 apt --fix-broken

Kevin Wu
2026年8月27日· 更新於 2026年10月4日· 8 分鐘讀完

要修復 apt update 錯誤並修好損壞的套件,先保留完整輸出並把錯誤分類,然後才執行對應的修復:已確認相依套件損壞時,先用 sudo apt-get --simulate --fix-broken install 預覽,再執行真正的 --fix-broken install。apt update 失敗亦可能來自 DNS 或網絡、已停用或過時的軟件庫、簽署認證、另一個套件程序、中斷的 dpkg 設定,或檔案系統已滿。這些類別需要不同的處理;籠統的強制選項可能掩蓋證據,甚至授權有害的移除操作。

關鍵要點

  • 更改設定前,保存確切的軟件庫 URL、套件名稱和最後幾行錯誤。
  • apt-get check 用於診斷相依狀態;--fix-broken 用於要求修復;--simulate 用於預覽操作。三者不能互換。[1]
  • 可能有其他程序持有套件管理器的鎖時,切勿刪除鎖檔案。
  • 拒絕任何會移除無關桌面、核心、保安元件或資料類套件的方案。

使用裝置故障排查指南把觀察和猜測分開記錄。如果問題由某個下載的套件開始,亦請覆核安全安裝下載的 DEB 套件。

修復 apt update 錯誤應按甚麼次序進行?

步驟 1:保存完整的故障資料

保存失敗的指令、軟件庫 URL、套件名稱和最後幾行錯誤。記下近期對軟件庫、DEB、保留(hold)或升級所作的改動,但不要公開登入憑證。

步驟 2:為證據分類

從以下類別中選擇:網絡或 DNS、軟件庫或發行版本、簽署認證、正在持有鎖的程序、中斷的 dpkg 狀態、損壞的相依套件,或磁碟空間及 inode 耗盡。

步驟 3:恢復前置條件

在讓套件工具寫入之前,先恢復基本的可用空間和軟件庫的連通。檔案系統已滿或索引無法使用,可能令其後的修復因第二個原因而失敗。

步驟 4:檢查套件狀態

執行 apt-get check、dpkg --audit 和 apt-mark showhold。不要把保留的套件、已解開的套件和缺少的軟件庫索引視為同一情況。

步驟 5:尊重鎖的持有者

如果持有鎖的是正常的套件程序,就等它完成,或按其有記錄的服務程序處理。不要刪除鎖檔案,亦不要再執行另一個互相競爭的寫入程序。

步驟 6:修復已確認的所屬層面

只修正已確認的軟件庫或簽署設定;只有在明確出現「設定被中斷」的狀態時,才使用 dpkg --configure -a。

步驟 7:模擬 APT 相依套件修復

對已確認損壞的 APT 相依套件,先執行 --simulate --fix-broken 形式,逐項檢查每項安裝、升級、降級和移除,才決定是否容許真正的交易。

步驟 8:重複檢查並驗證

重複最初的操作、apt-get check 和 dpkg --audit。驗證受影響的程式或服務,並把修復前後的輸出保存在維護記錄中。

這個次序刻意把改動延後至確定故障類別之後。模擬成功只是一個方案;索引更新成功亦不證明 dpkg 狀態是乾淨的。如果兩個分支同時存在,先處理前置條件——例如先恢復可用空間才修復套件,或先恢復有效的索引,才讓相依求解器擷取某個版本。

如何保留並分類錯誤?

在終端機執行一次失敗的指令,並保存其完整輸出。不要把密鑰、私人軟件庫憑證或內部主機名稱貼到公開工單。記下 Ubuntu 版本、時間、上一次成功的套件操作、近期對軟件庫或 DEB 的改動,以及剩餘空間。

按錯誤字眼選擇分支:

錯誤證據可能的分支第一項檢查
無法解析名稱或臨時解析失敗DNS 或網絡查詢該確切主機名稱,並測試 IP 路徑
缺少 Release 檔案、軟件庫沒有 Release 檔案或 404軟件庫/發行版本確認 URL、套組(suite)和廠商支援情況
公開密鑰、簽署或軟件庫未簽署認證核實官方簽署說明和系統時間
無法取得鎖或前端鎖正在運作的套件程序找出持有鎖的程序並等候其完成
dpkg 被中斷,或套件已解開但未設定dpkg 狀態先檢查狀態,在適當時才完成設定
相依關係未滿足或有被保留的損壞套件相依狀態執行 apt-get check,並檢查涉及的套件
裝置上沒有剩餘空間空間或 inode重試前檢查受影響的檔案系統

apt update 的索引錯誤與已安裝套件的損壞狀態可能同時存在,但一條指令無法修復所有類別。

修復前應檢查甚麼?

先由唯讀或診斷類指令開始:

sudo apt-get check
dpkg --audit
df -h
df -i

apt-get check 會在需要時更新套件快取,並檢查損壞的相依關係。APT 說明文件把它與 --fix-broken 分開說明,後者會嘗試糾正相依問題。dpkg --audit 用於檢查部分安裝或不一致的套件狀態。[2]磁碟空間和 inode 耗盡必須先處理,因為套件工具需要空間下載、解開和更新資料庫。

亦要查看所有被保留的套件:

apt-mark showhold

保留可能是為相容性或運作而刻意設定的。在弄清是誰設定、它阻止了哪項升級之前,不要解除保留。

如何處理網絡、軟件庫和簽署錯誤?

如果是主機名稱解析失敗,用 resolvectl query 測試該確切主機。如果系統名稱解析失敗,應診斷解析器和 IP 路徑,而不是編輯軟件庫檔案。

遇到 404、缺少 Release 檔案或不受支援的套組時,檢查軟件庫定義,並與廠商針對你的 Ubuntu 版本發布的官方文件比較。第三方軟件庫可能仍未支援新版本、已經搬遷,或已停止運作。只停用或修正你已明確識別的那個軟件庫,並保留記錄以便還原。不要為了令警告消失而刪除所有第三方軟件庫。

遇到簽署錯誤時,核實自動時間、軟件庫來源、官方的密鑰安裝方法,以及簽署密鑰是否已輪換或過期。不要使用繞過認證的選項。APT 說明文件把容許未經認證套件、force-yes 等選項列為危險,因為它們會移除保護措施。

遇到套件管理器的鎖怎麼辦?

鎖通常代表「軟件更新程式」、無人值守升級、APT 或 dpkg 已在工作。找出正常的套件程序,等它們完成。在受管理的伺服器上,先查看維護工作和記錄,才採取行動。

不要刪除鎖檔案。檔案本身並不等於持有狀態,刪除它可能令兩個寫入程序同時修改套件資料。如果某個程序看似卡住,先判斷它是否仍在下載、解開、設定或等待輸入。透過系統正常的服務或維護程序處理,而不是盲目終止程序。

如何復原中斷的 dpkg 設定?

如果錯誤明確指出 dpkg 被中斷,而沒有其他套件程序在運作,先用 dpkg --audit 查看受影響的狀態。然後,有記錄的復原方法可能需要:

sudo dpkg --configure -a

這條指令會繼續設定所有已解開但未設定的套件,所以要細閱每個提示和錯誤。它不是處理軟件庫、DNS 或簽署失敗的通用首選指令。dpkg 說明文件對 --configure -a 的描述是:設定所有已解開、未設定的套件。

如果某個套件的維護程式碼反覆失敗,保存其完整輸出,並查閱該套件的官方支援渠道。不要手動編輯 dpkg 資料庫。

甚麼時候使用 --fix-broken?

只有在 apt-get check 確認存在相依問題,而修復所需的軟件庫索引可以使用時才使用。先模擬擬議的交易:

sudo apt-get --simulate --fix-broken install

模擬不會加鎖,也不會寫入套件狀態,所以它只是預覽,並不證明真正的交易一定成功。逐項檢查每項安裝、升級、降級和移除。如果方案範圍很窄而你亦理解,才去掉 --simulate 執行同樣的修復:

sudo apt-get --fix-broken install

如果求解器建議移除無關的應用程式、桌面環境、正在運作的核心、保安元件、資料庫或重要的資料服務,就停止操作。改為解決有衝突的軟件庫、版本鎖定(pin)、本機 DEB 或被保留的套件。

如何驗證修復?

再次執行最初的操作,然後檢查套件狀態:

sudo apt update
sudo apt-get check
dpkg --audit

成功代表軟件庫索引更新時不再出現原本的錯誤,相依檢查通過,而且沒有套件處於部分設定狀態。這不證明每個第三方應用程式都運作正常;請按有記錄的健康檢查方法測試個別套件或服務。

如果涉及磁碟空間,請按恢復受影響的 Linux 檔案系統空間操作,並在重新執行套件工具前,同時驗證容量和 inode。

總結

保留錯誤,選擇相符的分支,先診斷後修復。在所屬層面糾正 DNS、軟件庫、簽署、鎖、dpkg、相依關係或空間狀態。先模擬相依修復,拒絕意料之外的移除。切勿為了令終端機暫時安靜,而犧牲套件認證或資料庫完整性。

常見問題

apt update 會安裝升級嗎?

不會。它只更新套件索引。安裝或升級是另一項操作,不過更新索引可能揭示軟件庫錯誤。

可以刪除 APT 鎖檔案嗎?

不可以。先找出正在進行套件工作的程序,等它完成,或使用有記錄的服務程序。刪除一個路徑名稱,並不能令同時寫入資料庫變得安全。

apt-get check 會改變甚麼?

它的用途是診斷性的相依檢查,不過可能會更新套件快取。它與 --fix-broken 所要求的修復並不相同。

可以不加思索地執行 --fix-broken 嗎?

不可以。它可能建議移除套件或作其他改動。先模擬,審視方案,並弄清套件或軟件庫的衝突所在。

apt --fix-broken install 和 apt-get -f install 一樣嗎?

就修復要求而言是一樣的:-f 是 --fix-broken 的簡寫,與 install 一併使用時可以不寫套件名稱,讓 APT 推斷可能的解決方案。[1]apt 前端要求的亦是同一種修復。dpkg 沒有對應選項,因為它只報告相依問題,不會下載套件來解決。無論用哪種寫法,都先模擬。

為甚麼 APT 說軟件庫沒有 Release 檔案?

軟件庫 URL 或套組可能有誤、已過時、不受支援,或發布不當。請按軟件庫擁有者的官方說明核實;不要繞過這個警告。

dpkg --configure -a 有甚麼作用?

它會嘗試設定所有已解開但尚未設定的套件。只在已確認設定被中斷的狀態下使用,而不是把它當作通用的 APT 修復指令。

遇到簽署錯誤時,應否容許未經認證的套件通過?

不應該。核實軟件庫、系統時間和現時官方的簽署設定。繞過認證會把一個有用的失敗提示,變成安裝不可信軟件的風險。


免責聲明:套件狀態和復原步驟會隨 Ubuntu 版本、軟件來源、版本 pin 和已安裝軟件改變。重要系統應保存備份和復原 console。

來源:

  1. Ubuntu Manpage Repository — apt-get(8) — https://manpages.ubuntu.com/manpages/noble/man8/apt-get.8.html
  2. Ubuntu Manpage Repository — dpkg(1) — https://manpages.ubuntu.com/manpages/noble/man1/dpkg.1.html

Sources checked 2026 年 10 月 4 日。


延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

如何修復 apt update 錯誤並安全執行 apt --fix-broken | AethoVPN