題 Aptitude vs. apt-get:使用哪種推薦(又稱“正確”)工具?


前段時間我讀過這篇文章 aptitude 是在基於Debian的系統上安裝的首選工具。但是當你四處搜索如何管理基於Debian的系統時,很少提到aptitude。大多數人似乎更喜歡 apt-get  - 對於Debian wiki頁面來說甚至都是如此!

因此,我想知道我是否遺漏了一些東西。哪個是正確的工具?


93
2018-01-09 09:42


起源


有趣的是,Ubuntu不再安裝 aptitude 默認情況下。 - Mechanical snail
對我來說唯一最重要的區別是,在徹底閱讀完文檔之後,我找不到通過aptitude獲取包的來源的方法。 apt-get source package-name 會做到這一點,但我看到沒有天賦等同 - EricR
有一點是 aptitude search package-name 在aptitude工作。另一個是 aptitude why package-name 也很有用,但不是 apt-get。我也是命令行的東西 aptitude 有點清理相比 apt-get。但正如你所注意到的那樣 aptitude build-dep package-name 但不是 aptitude source package-name。 - Anders


答案:


aptitude 和 apt-get 為許多任務工作相同,但對於最棘手的情況,例如分發升級(apt-get dist-upgrade 與 aptitude full-upgrade),他們有不同的規則,在他們不同意的實踐中,能力傾向的規則幾乎總是更好。

您看到更多文檔的原因 apt-get 過度 aptitude 主要是慣性: aptitude 這麼長時間以來,APT並沒有成為APT推薦的前端,現有的大部分文檔都沒有更新過,而且有很多人認識到它的優點。 aptitude 過度 apt-get 但是用 apt-get 本能。

我最近達到了我通常關注的地步 apt 用一個 i而不是一個 - 當我打字。

後記 請注意使用的規則 apt-get 和 aptitude 正在移動目標 - 正如Hubert在評論中指出的那樣,Debian Lenny推薦的升級路徑現在正在使用 apt-get不是 aptitude。這反映了這一事實 apt-get 跟踪當前包裹的狀態較少 aptitude,所以不必擔心APT狀態不“乾淨”,因為 apt-get 規則比以前更聰明。我仍然使用和推薦 aptitude 過度 apt-get,但這是一個更細微的建議


72
2018-02-26 19:42



除此之外,aptitude允許輕鬆瀏覽可能的衝突解決方案,而使用apt-get,您通常只有一種可能的方式顯示,或者您接受它,或者您必須手動解決(f.e. using dpkg)。 - liori
apt-get 確實具有更高內存效率的優勢。對於大多數用戶來說,這不太可能引人注目;直到我嘗試使用32MB RAM在完整的Debian安裝上升級軟件包時,我才真正意識到這一點。 aptitude每次運行大約一個小時,最終在交換中掙扎; apt-get明顯更快。 - intuited
官方Debian擠壓文檔明確聲明不使用 aptitude 從Lenny升級,即使它支持以前的升級,所以我不認為這只是慣性...... - Hubert Kario
@HubertKario - 是的,的確如此。我已經更新了我的答案。 - Charles Stewart
我只能說 apt-get 幾乎總是拋出錯誤(來自Ubuntu服務器12.10,14.04的體驗) aptitude 實際上可以做點什麼。我仍然不明白apt-get是如何存在的。 - Totty.js


aptitude 可以方便地顯示您已在系統上安裝的搜索中的哪些程序(借助於...) grep):

aptitude search flash | grep ^i

其實, aptitude搜索的功能遠遠超過你所獲得的搜索功能 grep,因為它支持上下文搜索:

例如,這會找到已安裝的軟件包名稱中包含“flash”的所有軟件包:

aptitude search '~iflash'

“短形式”的等效“長形式” ~i

aptitude search '?installed(flash)'

請注意,默認情況下,搜索模式是免費的(非錨定)。要錨定它們,你需要使用錨模式'^'(字符串的開頭)和/或'$'(字符串結尾)。

要查找名稱以“ttf”或“font”開頭的所有包:

aptitude search '(^ttf|^font)'

(注意:這是針對某個bug的解決方法 aptitude,作為正確的正則表達式 '^(ttf|font)' 無法正常工作 - 它找到名稱以'ttf'開頭的包 包含 “字體”)。

其他俏皮 aptitude 特徵:

顯示名稱中包含“firmware”的所有軟件包,其描述中也包含“無線”:

aptitude search 'firmware ~dwireless'

或長形式:

aptitude search '?and(?name(firmware),?description(wireless))'

(注意:在簡短形式中,以空格分隔的參數在引號內是AND;如果作為單獨的argv []命令行參數傳遞,則它們是ORed。)

p   atmel-firmware       - Firmware for Atmel at76c50x wireless networking chips.
p   firmware-atheros     - Binary firmware for Atheros wireless cards
...
p   libertas-firmware    - Firmware for Marvell's libertas wireless chip series
p   zd1211-firmware      - Firmware images for the zd1211rw wireless driver

~U 顯示所有可從當前版本升級到新版本的軟件包:

# aptitude update ; aptitude versions '~U'
Package virtualbox-4.1:            
i   4.1.18-78361~Debian~squeeze                       100
p   4.1.20-80170~Debian~squeeze     <NULL>            500

顯示推薦'gcc-multilib'的軟件包

$ aptitude search '~DRecommends:gcc-multilib'
i   libc6-dev-i386   - Embedded GNU C Library: 32-bit development libraries for AMD64

解釋為什麼可能需要安裝'fuse-utils'

$ aptitude why fuse-utils
i   xorg           Depends    xterm | x-terminal-emulator
pi  gnome-terminal Provides   x-terminal-emulator
pi  gnome-terminal Recommends gvfs
pi  gvfs           Depends    libgdu0 (>= 2.29.90)
pi  libgdu0        Depends    udisks (< 1.1.0)
pi  udisks         Recommends ntfsprogs
pi  ntfsprogs      Depends    fuse-utils (> 2.5.0)

(這個例子顯示了自Squeeze(?)安裝所有“Recommends”軟件包後默認產生的一些瘋狂。安裝gnome-terminal最終安裝了ntfsprogs和fuse-utils,egad!我想大多數人只想要終端視角和不是內置的NTFS集成,這是可選的,除非他們指定它。)

找到提供服務“mail-transport-agent”的所有包:

$ aptitude search '?provides(mail-transport-agent)'
p   citadel-mta          - complete and feature-rich groupware server (mail transport agent)
...
p   nullmailer           - simple relay-only mail transport agent
p   postfix              - High-performance mail transport agent
i   sendmail-bin         - powerful, efficient, and scalable Mail Transport Agent
p   ssmtp                - extremely simple MTA to get mail off the system to a mail hub
p   xmail                - advanced, fast and reliable ESMTP/POP3 mail server

顯示已安裝的所有軟件包名稱,這些軟件包名稱不是Essential或依賴項自動安裝的:

$ aptitude search '~i!(~E|~M)' -F '%p'

不幸的是,這些東西記錄很少,很難找到,但是 這裡是最好的參考(來自'aptitude'維護者)。


19
2018-06-20 10:53



搜索功能可從 apt-get 通過 apt-cache search NAME - EricR
@EricR是的,但我沒有找到這些搜索功能 - niceman


根據 關於包管理的Debian GNU / Linux FAQaptitude比apt-get更複雜,取決於不太複雜的包管理工具apt-get和dpkg。

因此,對於更簡單的需求,您可以使用更簡單的工具,而對於更複雜的需求,您可以依賴更複雜的工具(apitude)。

引自Debian FAQ:“aptitude提供了dselect和apt-get的功能,以及任何程序中都沒有的許多其他功能。”


4
2017-08-15 21:52





aptitude標記由於與auto標記的依賴性而安裝的軟件包。如果您現在清除或刪除軟件包,aptitude將自動刪除自動安裝的軟件包,這些軟件包將在您要清除或刪除的軟件包旁邊不再使用。

這就是為什麼我個人認為才能總是比apt更好的主要原因。


3
2017-08-16 00:54



引用需要,但這將是一個引人注目的差異。 - Kzqai
引文: debian-handbook.info/browse/stable/... - deizel
其實 apt-get 也是這樣做的 apt-get autoremove <package-name>。都 apt-get 和 aptitude 標記自動安裝的包 - Legionair
但 aptitude 每次使用時都要清理自動包。而 apt-get 你需要明確地開始。 - Anders


沒有正確的工具,你可以根據你認為最方便的任務來混合和匹配兩者。 aptitude是測試/ sid用戶的一個很好的工具,但是從一個穩定版到另一個版本的分離升級往往不太可靠。看我的文章 apt-get,aptitude,...為您挑選合適的包管理器


2
2018-06-21 08:49