Aptitude vs. apt-get: Какой рекомендуемый (иначе называемый «правильный») инструмент использовать?

94

Некоторое время назад я прочитал, что aptitudeэто предпочтительный инструмент для установки в системах на основе Debian. Но когда вы ищите, как администрировать систему на основе Debian, aptitude редко упоминается. Большинство людей предпочитают apt-get- и это даже верно для вики-страниц Debian!

Таким образом, мне интересно, если я что-то пропустил. Какой инструмент лучше использовать?

Vokuhila-Oliba
источник
Интересно, что Ubuntu больше не устанавливается aptitudeпо умолчанию.
Механическая улитка
2
Единственное самое важное для меня отличие состоит в том, что после тщательного прочтения документации я не могу найти способ получить исходный код пакета через aptitude. apt-get source package-nameсделаю это, но я не видел эквивалента способностей
EricR
2
Одна вещь, которая aptitude search package-nameработает в способности. Другое aptitude why package-nameтоже полезно, но не в apt-get. Я также считаю, что командная строка aptitudeнемного очищена по сравнению с apt-get. Но, как вы заметили, есть, aptitude build-dep package-nameно нет aptitude source package-name.
Андерс

Ответы:

73

aptitudeи apt-getработают одинаково для многих задач, но в самых сложных случаях, таких как обновление дистрибутива ( apt-get dist-upgradeпротив aptitude full-upgrade), у них разные правила, и правила aptitude почти всегда лучше на практике, где они не согласны.

Причина вы видите больше документации по apt-getОвер aptitudeв основном инерция: aptitudeне было рекомендуемую передний конец 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, но это более нюансированная рекомендация

Чарльз Стюарт
источник
6
В дополнение к этому, aptitude позволяет легко просматривать возможные способы разрешения конфликтов, в то время как с помощью apt-get у вас обычно отображается только один возможный способ, и вы либо принимаете его, либо вам приходится выполнять разрешение вручную (например, с помощью dpkg).
Лиори
20
apt-getимеет преимущество в том, что более эффективно использует память. Это вряд ли будет заметно для большинства пользователей; Я не знал об этом, пока не попытался обновить пакеты при полной установке Debian с 32 МБ ОЗУ. aptitudeзакончил тем, что побежал в обмене в течение приблизительно часа за пробег; apt-get был значительно быстрее.
интуитивно
4
В официальной документации Debian Squeeze прямо сказано, что не следует использовать aptitudeдля обновления с Lenny, хотя это поддерживалось для предыдущих обновлений, поэтому я не думаю, что это только инерция ...
Хьюберт Карио
@HubertKario - Да, действительно. Я обновил свой ответ.
Чарльз Стюарт
Могу только сказать, что apt-getпочти всегда выдает ошибки (опыт работы с Ubuntu server 12.10, 14.04), хотя на aptitudeсамом деле может что-то делать. Я до сих пор не понимаю, как apt-get все еще существует.
Totty.js
20

aptitudeпозволяет удобно показывать, какие программы в поиске вы уже установили в системе (с помощью grep):

aptitude search flash | grep ^i

На самом деле, aptitudeпоиск гораздо более мощный, чем то, что вы получаете по каналу grep, поскольку он поддерживает контекстный поиск:

например, это находит все пакеты с 'flash' в имени пакета, которые установлены:

aptitude search '~iflash'

Эквивалентная «длинная форма» «короткой формы» ~i:

aptitude search '?installed(flash)'

Обратите внимание, что шаблоны поиска по умолчанию бесплатны. Чтобы привязать их, вам нужно использовать шаблоны привязки ' ^' (начало строки) и / или ' $' (конец строки).

Чтобы найти все пакеты, имена которых начинаются с «ttf» или «font»:

aptitude search '(^ttf|^font)'

(Примечание: это обходной путь для ошибки aptitude, поскольку правильное регулярное выражение '^(ttf|font)'не работает должным образом - он находит пакеты, имена которых начинаются с 'ttf' или содержат 'font'.)

Другие отличные aptitudeособенности:

Показать все пакеты с «firmware» в названии, которые также имеют «wireless» в их описании:

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 (?) Устанавливает все пакеты «Recommended» по умолчанию. Установка gnome-терминала заканчивается установкой 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

Показать все установленные имена пакетов, которые не являются необходимыми или автоматически устанавливаются зависимостями:

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

К сожалению, этот материал довольно плохо документирован и его трудно найти, но вот лучшая ссылка (от сопровождающего aptitude).

Крис П
источник
4
Функции поиска доступны apt-getчерезapt-cache search NAME
EricR
@EricR правда, но я не нашел возможности поиска как эти
niceman
4

Согласно часто задаваемым вопросам Debian GNU / Linux об управлении пакетами , aptitude более сложна, чем apt-get, и зависит от менее сложных инструментов управления пакетами apt-get и dpkg.

Следовательно, для более простых нужд вы можете использовать более простые инструменты, в то время как для более сложных потребностей вы можете рассчитывать на более сложный инструмент (apitude).

Цитируется из FAQ по Debian: «aptitude предоставляет функции dselect и apt-get, а также множество дополнительных функций, которых нет ни в одной программе».

Пальюка
источник
3

aptitude отмечает пакеты, которые были установлены из-за зависимости от тега auto. Если вы сейчас удалите или удалите пакет, aptitude автоматически удалит автоматически установленные пакеты, которые больше не используются вместе с пакетом, который вы хотите очистить или удалить.

Это главная причина, почему я лично считаю, что способность всегда лучше, чем способность.

Fleshgrinder
источник
Цитирование необходимо, но это будет неоспоримым отличием.
Kzqai
Образец цитирования: debian-handbook.info/browse/stable/…
deizel
На самом деле apt-getэто тоже, с apt-get autoremove <package-name>. Оба apt-getи aptitudeотметьте автоматически установленные пакеты
Legionair
Но aptitudeочищайте автоматические пакеты каждый раз, когда он используется. Пока apt-getнужно начинать с этого явно.
Андерс
2

Там нет подходящего инструмента, вы можете смешивать и сочетать оба в зависимости от того, который вы считаете наиболее удобным для текущей задачи. aptitude - отличный инструмент для тестирования пользователей / sid, но он, как правило, менее надежен для дистрибуции с одной стабильной на другую. Смотрите мою статью apt-get, aptitude, ... выберите правильный менеджер пакетов для вас .

Рафаэль Герцог
источник