Алексей Федорчук
Как можно было видеть из обзора интерактивной aptitude
, эта программа предоставляет очень широкие возможности по управлению пакетами. Что, однако, компенсируется — да простят меня записные дебианисты и просто её поклонники — неудобством и крайней нелогичностью её интерфейса в этом режиме. Это если не говорить о визуальной заторможенности даже на современных машинах. Моё сугубое ИМХО — использование интерактивной aptitude
, про крайней мере, в Ubuntu, целесообразно в двух случаях:
- при необходимости массового изменения статуса пакетов и фиксации их версий;
- после массового удаления пакетов, на предмет выявления «осиротевших» их зависимостей.
Для первой задачи альтернативы интерактивной aptitude
просто нет, а две последующие решаются её средствами… может быть, не проще, но безусловно наглядней (повторяю, это не более чем моё очень скромное ИМХО). Для обычной же жизнедеятельности — поиска нужных пакетов, получения информации о них, установки и удаления — aptitude
гораздо эффективней использовать в командном режиме.
Введение
Командный метод использования aptitude
не будет непривычен тому, кто знаком с утилитами apt-get
и apt-cache
. Конструкция ее директив предполагает наличие оператора и, обычно, также аргумента — имени пакета, шаблона имени, ключевого слова или фильтра. Кроме того, операторы могут предваряться специфичными для них опциями.
Командные директивы с использованием основных операторов можно сгруппировать следующим образом:
- директивы поиска;
- директивы вывода информации;
- директивы манипуляции с пакетами;
- директивы манипуляции со статусом;
- директивы обновления системы;
- директивы «очистки»;
- разные разности.
Очевидно, что все операторы команды aptitude
, служащие для получения информации о пакетах, могут выполняться от лица обычного пользователя. В примерах на последдующих страницах это символизируется использованием $ в качестве приглашения командной строки.
Операторы, вносящие изменения в систему, требуют привилегий администратора — и их желательно временно получить посредством команды sudo aptitude ...
для выполнения единичной директивы или sudo -s
на неопределённый срок. Использование sudo -i
, меняющей всё пользовательское окружение, не рекомендуется, так как настройки aptitude
делаются в аккаунте обычного пользователя.
Особенности aptitude
проще всего рассмотреть на примере конкретных командных директив. После чего можно будет провести сравнение с другими пакетными менеджерами. Я ограничусь примерами, которые кажутся мне (на основе собственного опыта) наиболее частыми. Больше подробностей по использованию aptitude
можно найти в официальном руководстве, написанном её создателем — Дэниелом Барроузом. Оно имеет версии на нескольких языках, среди которых русского опять не обнаруживается.
Поиск пакетов
Резонные люди обычно начинают работу с пакетами поиском нужного для установки пакета. В случае с aptitude
это делается так:
$ aptitude search keyword
ответом на что будет список всех пакетов, в названии которых имеется указанное ключевое слово — по умолчанию aptitude
не ищет заданное слово в описаниях пакетов. В отличие от apt
, вывод aptitude
содержит также информацию о статусах пакета — основном и, если имеется, дополнительном. Так, поиск по ключевому слову aptitude:
$ aptitude search aptitude
даст примерно следующий вывод:
i A aptitude — средство управления пакетами с текстовым интерфейсом p aptitude:i386 — средство управления пакетами с текстовым интерфейсом i A aptitude-common — не зависящие от архитектуры файлы для менеджера пакетов aptitude p aptitude-dbg — отладочные символы для менеджера пакетов aptitude p aptitude-dbg:i386 — отладочные символы для менеджера пакетов aptitude v aptitude-doc - p aptitude-doc-cs — Руководство по консольному менеджеру пакетов aptitude на чешском языке p aptitude-doc-en — руководство на английском языке для aptitude p aptitude-doc-es — Руководство по консольному менеджеру пакетов aptitude на испанском языке p aptitude-doc-fi — Руководство по консольному менеджеру пакетов aptitude на финском языке p aptitude-doc-fr — Руководство по консольному менеджеру пакетов aptitude на французском языке p aptitude-doc-it — Italian manual for aptitude, a terminal-based package manager p aptitude-doc-ja — Руководство по консольному менеджеру пакетов aptitude на японском языке
Вместо ключевого слова оператору search
в качестве аргумента можно задать фильтр. Он предваряется символом тильды ~
. В качестве фильтра можно задать условия поиска, например, в именах пакетов:
$ aptitude search ~naptitude
Что эквивалентно приведённой выше умолчальной форме директивы. А для поиска в описаниях пакетов можно использовать такую конструкцию:
$ aptitude search '~daptitude'
Что даст куда более длинный вывод:
p apt-cacher — кеширующий прокси-сервер для работы с репозиторями пакетов Debian p apticron — Simple tool to mail about pending package updates i A aptitude — средство управления пакетами с текстовым интерфейсом p aptitude:i386 — средство управления пакетами с текстовым интерфейсом i A aptitude-common — не зависящие от архитектуры файлы для менеджера пакетов aptitude p aptitude-dbg — отладочные символы для менеджера пакетов aptitude p aptitude-dbg:i386 — отладочные символы для менеджера пакетов aptitude p aptitude-doc-cs — Руководство по консольному менеджеру пакетов aptitude на чешском языке p aptitude-doc-en — руководство на английском языке для aptitude p aptitude-doc-es — Руководство по консольному менеджеру пакетов aptitude на испанском языке p aptitude-doc-fi — Руководство по консольному менеджеру пакетов aptitude на финском языке p aptitude-doc-fr — Руководство по консольному менеджеру пакетов aptitude на французском языке p aptitude-doc-it — Italian manual for aptitude, a terminal-based package manager p aptitude-doc-ja — Руководство по консольному менеджеру пакетов aptitude на японском языке p cron-apt — автоматическое обновление пакетов с помощью apt-get p cupt — alternative front-end for dpkg — console interface p cupt:i386 — alternative front-end for dpkg — console interface p dselect — утилита для управления пакетами Debian p dselect:i386 — утилита для управления пакетами Debian p gbrainy — brain teaser game and trainer to have fun and to keep your brain trained p libcwidget-dev — high-level terminal interface library for C++ (development files) p libcwidget-dev:i386 — high-level terminal interface library for C++ (development files) p pkgsync — automated package list
Можно также выбирать пакеты, входящие в определённые секции (~sname
) или (задачи ~tname
). Например, директива
$ aptitude search '~sgnome'
выберет все пакеты, входящие в секцию gnome
, а конструкция
$ aptitude search '~tubuntu-desktop'
выведет список пакетов, составляющих задачу ubuntu-desktop
.
Внимание: в командной оболочке zsh
, которую я использую, фильтр обязательно заключается в строгие кавычки, как в приведённых примерах. В используемой по умолчанию в Ubuntu оболочке bash
в большинстве случаев можно обойтись без них. Хотя и вреда от кавычек не будет ни малейшего.
Литеры, используемые для фильтров, легко запомнить, если осознать простую их мнемонику:
n
— от name,d
— от description,s
— от section,t
— от task,m
— от maintainer.
Ключевое слово после литеры — это просто последовательность символов, поэтому на запрос вида
$ aptitude search 'napt'
последует вывод из длинного списка пакетов, не обязательно имеющих отношение к утилитам семейства APT. Чтобы избежать этого, можно прибегнуть к регулярным выражениям, таким же, как используются, например, в утилите grep
. Так, директива
$ aptitude search 'n^apt'
отфильтрует только пакеты, начинающиеся с apt
.
В директивах поиска можно использовать и логические операторы. Так, команда
$ aptitude search '~n^apt' '~n^dpkg'
выловит пакеты, имеющие отношение к apt
и dpkg
— логический оператор И подразумевается по умолчанию. Конструкция вида
$ aptitude search '~n^apt|~n^dpkg'
свяжет аргументы оператора поиска логическим ИЛИ. А вот в команде
$ aptitude search '~n^apt!~n^aptitude'
символ восклицательного знака означает логическое отрицание: в её выводе будут присутствовать пакеты, начинающиеся на apt
, за исключением пакетов, содержащих в своем имени aptitude
в начальной позиции.
Пакеты можно также фильтровать по их статусу. Так, команда
$ aptitude search '~i'
выведет список всех инсталлированных пакетов, а команда
$ aptitude search '~U'
список пакетов, для которых в данный момент доступны обновления.
Запросы по ключевой последовательности символов можно комбинировать с запросами по статусу. Так, команда
$ aptitude search '~i~naptitude' i A aptitude — средство управления пакетами с текстовым интерфейсом i A aptitude-common — не зависящие от архитектуры файлы для менеджера пакетов aptitude
из всего множества пакетов, имеющих отношение к aptitude
, выберет только установленные в системе. А команда
$ aptitude search '~i~tubuntu-desktop'
проделает то же самое для пакетов, установленных в составе соответствующего метапакета.
Здесь я привёл лишь некоторые примеры запросов на поиск пакетов, которые использую более-менее регулярно. А вообще-то эта тема лимитируется только потребностями и фантазией.
Информация о пакетах
Следующий этап применения aptitude
— получение информации о тех пакетах, которые можно заподозрить в полезности. Этой цели служит оператор show
, требующий аргумента в виде имени пакета. Например, информация о самом пакете aptitude
выглядит так:
$ aptitude show aptitude Пакет: aptitude Состояние: установлен Автоматически установлен: да Версия: 0.6.8.1-2ubuntu2 Приоритет: необязательный Раздел: admin Сопровождающий: Ubuntu Developers Архитектура: amd64 Размер в распакованном виде: 4 855 k Зависимости: aptitude-common (= 0.6.8.1-2ubuntu2), libapt-pkg4.12 (>= 0.9.3), libboost-iostreams1.49.0 (>= 1.49.0-1), libc6 (>= 2.14), libcwidget3, libept1.4.12 (>= 1.0.9), libgcc1 (>= 1:4.1.1), libncursesw5 (>= 5.6+20070908), libsigc++-2.0-0c2a (>= 2.0.2), libsqlite3-0 (>= 3.6.5), libstdc++6 (>= 4.6), libtinfo5, libxapian22 Рекомендует: sensible-utils, apt-xapian-index, libparse-debianchangelog-perl Предлагает: aptitude-doc-en | aptitude-doc, tasksel, debtags Конфликтует: ia32-apt-get (< 22), ia32-apt-get (< 22), aptitude Описание: средство управления пакетами с текстовым интерфейсом aptitude — утилита для управления пакетами со множеством полезных функций, в том числе: mutt-подобный синтаксис для удобного поиска пакетов, отложенное выполнение запрошенных пользователем действий (как у dselect), получение и вывод на экран списка изменений для большинства пакетов и параметры командной строки как у apt-get. Также aptitude занимает немного места и следит за чистотой системы, удаляя ненужные более вспомогательные пакеты. Сайт: http://aptitude.alioth.debian.org/
Здесь мало чего заслуживает комментирования. Разве что хотел бы обратить внимание на пункт Зависимости
: в их списке можно увидеть libapt
, но самого apt
‘а не найти. Это — свидетельство того, что aptitude
не является фронт-эндом для последнего, о чём уже упоминалось в прошлом очерке.
Оператор show
показывает, от каких пакетов зависит тот, что указан в качестве её аргумента. Информацию обратного характера, то есть пакетов, зависящих от данного, можно получить с помощью оператора why
. Например, директива
$ aptitude why aptitude
покажет, для каких пакетов зависимостью является пакет aptitude
i tasksel Зависит aptitude (>= 0.2.15-1)
А оператор why-not
, напротив, выведет список пакетов, которые с данным сосуществовать не могут по тем или ниным причинам:
$ aptitude why-not aptitudep B dpackage:i386 Предоставляет dpackage pB dpackage:i386 Предлагает apt:i386 pB apt:i386 Предлагает aptitude:i386 | synaptic:i386 | wajig:i386 p aptitude:i386 Конфликтует aptitude
Установка и удаление пакетов
Установка выбранных пакетов осуществляется посредством оператора install
, требующем в качестве аргумента имени пакета:
# aptitude install package_name
При этом последовательно будут выполнены следующие действия:
- просмотр официальных репозиториев, перечисленных в конфигурационном файле
/etc/apt/source.list
, и PPA-репозиториев, которым соответствуют файлы в каталоге/etc/apt/sources.list.d
(файлы эти — те же, что и для утилит семейства APT); - скачивание deb-пакета из Сети, помещение его в локальный кэш пакетов (в каталог
/var/cache/apt/archives
); - распаковка архива, инкорпорация его компонентов в файловую систему и, при необходимости, выполнение действий по настройке, автоматически или, если требуется, в интерактивном режиме.
При разрыве связи во время скачивания пакета его уже полученный фрагмент помещается в каталог /var/cache/apt/archives/partial/
, и повторение процедуры install
продолжает докачку с места обрыва.
Оператор install
команды aptitude
, в отличие от одноименного из apt-get
, по умолчанию получает из репозитория, помещает в локальный кэш, устанавливает и настраивает не только «жесткие» зависимости пакета (собственно depends
), но и часть «мягких» (те, что относятся к категории recommends
). На усмотрение пользователя остается только установка «мягких» зависимостей из категории suggests
. Хотя, такое положение можно изменить — или соответствующими настройками, или, как мы увидим далее, опциями командной строки.
Установка версий пакетов осуществляется в соответствие с описанием их локального кэша. Каковой время от времени (а также после подключения дополнительных репозиториев) нуждается в обновлении. Это осуществляется посредством оператора update
, в аргументах не нуждающегося.
Пакет, «испорченный» по какой-либо причине (например, неаккуратным вмешательством в конфигурационные файлы) можно «починить». Команда
# aptitude reinstall package_name
вернет его в первозданное состояние.
Установленные пакеты, оказавшиеся не нужными, могут быть удалены. Директива
# aptitude remove package_name
удалит указанный в качестве аргумента пакет с сохранением его конфигурационных файлов. Именно таким пакетам присваивается статус c
, что маркируется соответствующей литерой в выводе команды aptitude search
. Полная же очистка системы от всех следов пакета достигается применением оператора purge
:
# sudo aptitude purge package_name
В этом случае пакет в выводе команды aptitude search
маркируется литерой p
, то есть становится неотличимым от пакета, которого в системе никогда не было. Однако оператор purge
не удаляет конфигурационные файлы пакета из домашнего каталога пользователя — это придется проделать самостоятельно.
Можно удалить сразу несколько пакетов. Для этого не всегда нужно перечислять их в качестве аргументов оператора remove
или purge
. В некоторых случаях можно прибегнуть к удалению по маске, то есть к конструкции типа
# aptitude purge ’~nzsh’
В данном примере будут бесследно удалены все пакеты, имеющие компонент zsh в своем имени.
По умолчанию оба оператора удаления — и remove
, и purge
, — деинсталлируют не только пакет, указанный в качестве аргумента, но и все те, которые были установлены автоматически в качестве его зависимостей — разумеется, только в том случае, если в системе не осталось других программ, которые их используют.
Ранее говорилось о возможности инверсии умолчального отношения к рекомендованным зависимостям. Так, избежать принудительного выполнения «рекомендаций» можно с помощью опции -R
(или --without-recommends
), данной в командной директиве установки конкретного пакета. Напротив, если игнорирование «рекомендаций» запечатлено в конфигурационном файле как умолчальное, установить их для отдельного пакета можно, прибегнутв к опции -r
(--with-recommends
), которая инвертирует действие опции -R
, то есть заставит установить все рекомендуемые зависимости.
Должен предупредить: применение опции -R
к установленной системе Ubuntu требует осторожности. Базовая ее инсталляция осуществляется по принципу «плюс recommends». И применение к ней aptitude -R
делает как бы «ненужными» многие пакеты. Так что перед тем, как нажать Enter в ответ на предложение
Хотите продолжить? [Y/n/?]
внимательно прочтите весь предшествующий ему вывод. Впрочем, привычка читать вывод перед тем, как «давить батоны», не будет лишней при работе с любой программой…
Командная aptitude: изменения статуса пакетов
На странице про интерактивную aptitude
говорилось о возможности изменения статуса пакетов через её меню. Однако и в командном режиме это делается ничуть не сложнее. Так, перманентно зафиксировать версию пакета (пакетов) можно с помощью директивы
# aptitude hold package_name
Это придаст перечисленным статус h
, в результате чего они будут игронироваться при тотальном обновлении системы. Обратная процедура, то есть снятие фиксации версии, выполняется командой
# aptitude unhold package_name
Если версия пакета должна быть зафиксирована только на одну, ближайшую, операцию обновления, надо прибегнуть к директиве
# aptitude keep package_name
Для изменения дополнительного статуса A
, очень важного при управлении пакетами, используется пара операторов markauto
и unmarkauto
. Первый помечает именованный пакет или их группу по шаблону как установленные автоматически в качестве зависимостей. Так, командой
# aptitude markauto ’~slibs’
в качестве автоматически установленных (статус A
) будут помечены все пакеты из секции libs
— то есть практически все библиотеки. Следствием чего явится автоматическое удаление неиспользуемых библиотек после деинсталляции последнего зависимого от них пакета.
Если же для некоторых библиотек это по каким-либо причинам нежелательно, их можно «размаркировать» (то есть снять дополнительный статус A
) командой
# aptitude unmarkauto package_name
переведя таким образом в категорию пакетов, установленных вручную. И, следовательно, могущих быть удаленными только явным образом.
Обращаю внимание на символ #
в приведённых примерах: он подчёрикает, что все операции по изменению статуса пакетов требуют прав root’а, так как связаны с изменением локального кеша.
Командная aptitude: обновление системы
Программа aptitude
позволяет выполнить и тотальное обновление системы, причём в двух различных режимах safe-upgrade
и full-upgrade
. Правда, оба они начинаются с обновления локального кэша, то есть выполнения директивы
# aptitude update
После чего можно переходить собственно к обновлению. И для начала — в его «безопасном» варианте, то есть в режиме
# aptitude safe-upgrade
Без указания аргумента (или аргументов) эта директива обновит все установленные пакеты на новые их версии, доступные в репозитории. Но только в том случае, если это не повлечёт за собой инсталляции новых пакетов в качестве их зависимостей. Или, напротив, удаления зависимостей, уже имеющихся. Если то или другое явление имеет место быть — нас об этом проинформируют, но сама процедура обновления выполнена не будет. И тогда можно будет прибегнуть к директиве
# aptitude full-upgrade
Она выполнит принудительное обновление системы, то есть: для всех обновляемых пакетов при необходимости установит новые пакеты-записимости и удалит старые.
В двух словах: safe-upgrade
обновит все пакеты системы, если это не потребует изменения их «списочного состава», full-upgrade
приведёт последний в соответствие с новыми реалиями.
Если в качестве аргументов любого из операторов указать список пакетов, то, как легко догадаться, обновлению подвергнутся только в нём поименованные — при тех же условиях.
Важно, что пакеты, имеющие статус h
(то есть с зафиксированной версией), не подвергнутся обновлению ни при выполнении оператора safe-upgrade
, ни при dist-upgrade
.
Как и при выполнении оператора install
, процедуры safe-upgrade
и full-upgrade
безболезненно переживают разрыв связи (или, например, прерывание по нажатию клавишной комбинации Control+C): повторный их запуск возобновляет установку с момента прерывания.
Оистка системы
Как уже говорилось на одной из предыдущих страниц, установка пакетов начинается с их скачивания из сети и помещения в каталог /var/cache/apt/archives
. И сами собой они оттуда не удаляются, зазря занимая место на диске. Хотя в большинстве случаев ни для чего уже не нужны никому (за исключением некоторых специальных случаев): при необходимости переустановки пакета обычно его проще скачать заново, и часто уже обновлённый. Разумеется, при наличии нормального подключения к сети — но в ином случае применение Ubuntu не целесообразно вообще, лучше поискать дистрибутив, не столь ориентированный на онлайн.
То же самое бедствие, только в ещё больших масштабах, имеет место быть при регулярном обновлении системы — в этом случае в означенном каталоге скапливаются просто геологические напластования разных версий одних и тех же пакетов.
Благо, aptitude
позволяет избавиться и от промежуточных продуктов собственной жизнедеятельности. Для начала — deb-файлов тех пакетов, которые ныне не установлены в системе (то есть устаревших версий — при регулярном употреблении операторов safe-upgrade
и full-upgrade
их накапливается изрядное количество). Делается это так:
# aptitude autoclean
Если deb-файлы устаревших версий пакетов не нужны заведомо, то те, что соответствуют версиям актуальным, теоретически могут пригодиться — например, для переноса индивидуализированной системы на другие машины. Но это — ситуация достаточно редкая: обычно и от них имеет смысл избавляться, по крайней мере, время от времени. И для этого тоже предусмотрена специальная директива:
# aptitude clean
Которая полностью очистит каталог /var/cache/apt/archives
.
Разные разности
Командная aptitude
«умеет много гитик», с которыми можно ознакомиться в документации к этой программе. И рассмотрение которых я оставляю заинтересованным лицам. Здесь же хотелось бы упомянуть одно одной из таких «гитик» — возможности тэгирования пакетов. То есть присвоения некоему их набору пользорвательского тэга (user-tag) с произвольным именем. Это можно сделать при установке пакетов:
# aptitude install --add-user-tag myset [package list]
То есть присвоить указанный тэг набору своих любимых приложений. А можно проделать это в любой момент времени после установки пакетов с помощью конструкции вида:
# aptitude add-user-tag myset geany pidgin abiword gnumeric
И в дальнейшем использовать этот тэг для поиска:
$ aptitude search '?user-tag(myset)'
избирательного обновления
# aptitude safe-upgrade '?user-tag(myset)'
и прочих манипуляций. При наличии некоторой толики фантазии механизму тэгирования пакетов можно придумать немало применений.
Если необходимость в тэгировании пакетов отпала, тэги легко ликвидировать такой командой:
# aptitude remove-user-tag tag_name
В общем, после знакомства с aptitude
можно сделать вывод, что она предоставляет все возможности, обеспечиваемые утилитами apt-get
и apt-cache
плюс ряд дополнительных, подчас неоценимых, удобств. И потому использование ее в командном режиме, казалось бы, предпочтительно перед указанными средствами комплекта APT. Однако реалзизация apt
для Mint обеспечивает практически тот же функционал — за исключением разве что, сложного поиска по шаблонам. Однако читатель сам сможет сделать заключение: использовать ему aptitude
или нет.