如何修復Linux中損壞的軟件包?
譯文【51CTO.com快譯】Apt和DNF等Linux軟件包管理器功能異常強大、界面異常直觀,但這并不意味著就不會出岔子。有時軟件包安裝會出問題,您得收拾殘局。軟件包管理器能夠修復損壞的軟件包并跳過損壞的更新,使系統(tǒng)重新運行并避免將來遇到麻煩。本文介紹如何在Linux中修復損壞的軟件包。
這些提示和技巧可在大多數情況下幫助您解決問題。它們都相當普遍,但是每種情況都不盡相同,因此試著自行解決問題時牢記這一點。
修復Ubuntu中損壞的軟件包
Apt有幾個標志(flag),可用于修復安裝過程中因某個原因而損壞的缺失的依賴項或軟件包。一個常見的情況是安裝第三方.deb,發(fā)現它有您不了解的依賴項。這些依賴項可能不會自行獲取,dpkg會抱怨缺少軟件包。不管怎樣,您可以嘗試下列步驟。
圖1
首先,運行更新以確保沒有所需軟件包的較新版本。
- sudo apt update --fix-missing
下一步,您可以試著強制Apt查找并更正所有缺失的依賴項或損壞的軟件包。實際上,這將安裝所有缺失的軟件包,并修復現有的安裝。
- sudo apt install –f
軟件包安裝中可能出錯誤的另一個地方是配置過程。在后臺負責這部分的是dpkg,而不是Apt,因此有理由認為:軟件包在配置期間失靈時,dpkg是用來修復它的工具。
圖2
先嘗試強制dpkg重新配置所有損壞的或部分配置的軟件包。
- sudo dpkg --configure -a
如果這解決不了問題,可以采取更強制的方法。先列出dpkg標記為要重新安裝的所有軟件包。
- sudo dpkg -l | grep ^..r
您應該在這里看到有問題的軟件包。只要沒有似乎不屬于這里的任何軟件包,您都可以強行刪除損壞的軟件包。
- sudo dpkg --remove --force-remove --reinstreq
dpkg完成后,試著用Apt清理一下。
- sudo apt clean
- sudo apt update
運氣好的話,它們會讓您回到開始的地方。它不會給您試圖安裝的損壞軟件包,但至少Apt可以再次發(fā)揮作用。
永久DPKG鎖
有一個不太常見的問題:可笑的dpkg鎖阻止您執(zhí)行任何操作。每當您試著使用Apt或dpkg,都會出現錯誤,提示另一個應用程序已經在使用Apt或dpkg,實際上并非如此。
實際上,很容易刪除阻止您使用Apt、回去執(zhí)行要執(zhí)行的操作的鎖定文件。有時,安裝出現錯誤后,這些鎖定文件仍會在那里,阻止文件被自動刪除。這種情況下,您需要自行操作。
- sudo rm /var/lib/apt/lists/lock
另外,刪除緩存中的鎖。
- sudo rm /var/cache/apt/archives/lock
修復Fedora/CentOS/RHEL中損壞的軟件包
修復Fedora/CentOS/RHEL中損壞的軟件包不大常見,因為yum和dnf在確保軟件包正確安裝方面做得非常好。然而有時軟件包使用還是會出問題。在基于rpm的系統(tǒng)上執(zhí)行此操作的命令是:
- sudo rpm –Va
圖3
-V選項用于驗證,這意味著它將檢查安裝文件方面的信息,并與rpm數據庫中存儲的信息進行比較。這一點幫助不大,因為它通常會給出一長串文件,但如果您遇到某個應用程序的問題,至少有地方可以入手。您可以對該列表中看到的任何可能帶來麻煩的軟件包運行dnf重新安裝。
- sudo dnf --refresh reinstall PACKAGE_NAME
這將所有元數據設為到期,以便它可搜索您啟用的每個存儲庫,查找該軟件包的新版本。如果您發(fā)現該軟件包有壞的依賴項,DNF可能會告訴您使用--skip-broken標志。這還可能意味著您沒有啟用特定的存儲庫來提取依賴項,因此您可能得搜尋一番。
結束語
但愿這些修復方法管用,那樣您可以正常使用Linux系統(tǒng)了。請記住,要處理完全失控的情況,最佳方法是試著恢復到以前的狀態(tài)。除非您知道自己到底在干什么,否則不要忙中添亂。
原文標題:How to Fix Broken Packages in Linux,作者:John Perkins
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】