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