問題描述
我在網上搜索了這些信息,發現了不同的命令行,就像這些:
sudo apt-get remove application
sudo apt-get remove application*
sudo apt-get remove --purge application
sudo apt-get remove --purge application*
sudo apt-get purge application
sudo apt-get purge application*
那麽,什麽是正確的方式?是否有必要使用”*”?
之後,我也發現了這些命令:
sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)
最佳解決方法
-
apt-get remove packagename
將刪除二進製文件,但不會刪除packagename
包的配置或數據文件。它也會在安裝時保持依賴關係不變。 -
apt-get purge packagename
或apt-get remove --purge packagename
將刪除有關程序包packagename
的所有信息,但不包括與安裝時一起安裝的相關信息。兩個命令都是等價的。當您想要從應用程序’全麵啟動’時尤其有用,因為您搞錯了配置。但是,它不會刪除駐留在用戶主目錄中的配置或數據文件,通常位於隱藏文件夾中。有沒有簡單的方法讓他們被刪除。 -
apt-get autoremove
刪除孤立的軟件包,即已安裝的軟件包,這些軟件包曾經作為依賴項安裝,但不再使用。在刪除已安裝您不再感興趣的依賴關係的軟件包後使用它。 -
aptitude remove packagename
或aptitude purge packagename
(同樣)也會嘗試移除packagename
所需的其他軟件包,但其餘軟件包不需要這些軟件包。請注意,aptitude
隻會記住它已安裝的軟件包的相關性信息。
還有更多的存在。可以使用Lower-level dpkg
命令(高級)或GUI工具,如Muon,Synaptic,Software Center等。沒有單個’correct way’用於移除應用程序或執行與包管理相互作用的其他任務。
您找到的列表隻是示例。確保您理解含義並在接受該操作之前嘗試執行其操作(在按照建議實際執行操作之前,您需要按Y
)。
問題中的星號可能是錯誤的; apt-get
接受正則表達式而不是shell作為glob模式。所以會發生什麽
sudo apt-get remove application*
是以下內容:
-
該shell試圖展開
application*
查看當前目錄中的文件。如果(通常情況下)它什麽也沒有發現,它將返回未改變的glob模式(假設bash
在這裏默認行為—zsh
將會出錯)。 -
apt-get
將刪除名稱中包含滿足正則表達式application*
的字符串的包,即applicatio
,後跟任意數量的n
:applicatio
,application
,applicationn
,libapplicatio
等。 -
要看看這可能是危險的,嘗試(沒有root用於雙重安全)
apt-get -s remove "wine*"
(-s
將模擬事情而不是做它)—它會說將刪除所有名稱中包含”win”的包,幾乎整個係統…
可能,這個命令是真的
sudo apt-get remove "^application.*"
(注意引號和點),它將刪除名稱以application
開頭的所有包。
這些命令,
sudo updatedb # <-- updates the locate database (index). harmless
sudo locate application # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.
完全超出了包管理的範圍。不要使用包管理器刪除屬於包的文件!它會變得困惑,並且是做錯事情的錯誤方式。
如果您不知道文件屬於哪個包,請嘗試以下操作:
dpkg -S /path/to/file
次佳解決方法
對於Ubuntu 12.04或更高版本,正確的方法是:
sudo apt-get --purge autoremove packagename
如詳細的here。
不要使用packagename*
,因為它可以刪除非預期的軟件包並導致比解決問題更多的問題。或者如果必須的話,至少應該先用-s
,--simulate
,--dry-run
標誌運行它,以便確切地看到它會做什麽而不做它。
第三種解決方法
你可以使用這個命令:
sudo apt-get purge --auto-remove packagename
它將清除所需的軟件包以及與這些軟件包一起安裝的依賴項。 --auto-remove
選項(作為autoremove
的別名)與sudo apt-get autoremove
類似。通過使用這個命令,我們可以運行一個命令:
sudo apt-get purge --auto-remove packagename
代替:
sudo apt-get purge packagename
sudo apt-get autoremove
第四種方法
您可以安全地使用sudo apt-get remove --purge application
或sudo apt-get remove applications
99%的時間。當您使用purge
標誌時,它也會刪除所有配置文件。這可能是也可能不是你想要的,取決於你是否想重新安裝所述應用程序。 application*
將匹配以application
開頭的所有應用程序,這些應用程序通常是要刪除的主應用程序的插件,附加功能等。即
sudo apt-get remove gedit*
將刪除gedit
,gedit-plugins
和gedit-common
。通常不需要這樣做,因為大多數插件/相關程序都依賴於主應用程序,並且在卸載主應用程序時將自動刪除(或標記為刪除)。
您的最後一條命令就是從已知具有淩亂的卸載程序的應用程序中刪除剩菜,它隻是刪除應用程序的任何殘餘部分。
第五種方法
我收到了一些刪除軟件包的錯誤消息,我發現這種方法的唯一方法是:
mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package
我發現雖然隻使用
dpkg --remove --force-remove-reinstreq package
不會刪除軟件包,它顯示了要移動的文件的正確路徑:
mv /var/lib/dpkg/info/package.* /tmp/
用您的應用程序名稱替換軟件包。在Ubuntu中使用sudo,在Debian中成為root。