20080118

Поисковые шаблоны в Aptitude

В этом посте я расскажу о том, как искать пакеты программ Debian с помощью aptitude. В Ubuntu, понятно, всё делается точно так же.

Обычно, чтобы найти нужный пакет, достаточно написать что-нибудь вроде

$ aptitude search шаблон

и получить список пакетов, в названии которых встречается «шаблон». Например:

$ aptitude search doom
v doom-engine -
p doom-package - Installer for Doom data files
v doom-wad -
v doom-wad-editor
...


Однако в некоторых случаях, такого поиска недостаточно. Представим, например, что пользователь ищет программы для обработки изображений с помощью техники HDR (расширенного динамического диапазона). Он набирает

$ aptitude search HDR

и получает

p chdrv - Chinese terminal for the Linux console
p chdrvfont - Kuo Chiao 16x16 font for CHDRV Chinese con


Явно это не то, что его интересовало. Вот именно здесь пригодятся более «продвинутые» возможности поиска в aptitude. А именно «поисковые шаблоны». Полное описание шаблонов доступно в документации к aptitude. Здесь я расскажу только о некоторых из них.

Итак, каждый шаблон — это некое условие поиска. По умолчанию, если указать сразу несколько шаблонов, то будет выдан список пакетов, соответствующих всем указанным условиям (логическое И). Если шаблоны разделить знаком «|», то будут найдены пакеты, соответствующие хотя бы одному из условий (логическое ИЛИ). Если перед шаблоном (условием) поставить восклицательный знак, то будут найдены пакеты, для которых это условие не выполняется (логическое отрицание). Несколько шаблонов (условий) можно группировать с помощью скобок.

Шаблоны обычно начинаются со знака тильда «~». За ней следует символ, указывающий тип шаблона. Затем может идти дополнительный текст, зависящий от шаблона. Такой синтаксис шаблонов должен быть знаком пользователям почтовой программы mutt.

Итак, самые полезные, на мой взгляд, шаблоны:

~nимя — в имени встречается текст «имя» (можно использовать регулярные выражения, например, ~n^lib отбирает только имена начинающиеся с lib)
~dтекст — в описании пакета встречается «текст» (очень полезно, если название программы неизвестно, но известно, что она должна делать)
~i — отбирает только уже установленные пакеты
~N — отбирает только новые пакеты (которых раньше не было в репозитории)
~U — отбирает пакеты, которые можно обновить
~Dтребование — отбирает пакеты, которые зависят от «требования» (можно использовать регулярные выражения)
~Rзависимый — отбирает пакеты, которые необходимы для «зависимого» (можно использовать регулярные выражения)

Вернёмся к нашему примеру. Поскольку поиск по именам пакетов ничего полезного не дал, можно поискать по описаниям:

$ aptitude search ~dHDR

даёт 27 строк результатов. Уже лучше, но среди них — явно лишние. Можно ограничить выборку только теми пакетами, в описании которых говорится и про HDR, и про изображения (images):

$ aptitude search ~dHDR~dimage
i exrtools - A collection of utilities for manipulating
p libopenexr-dev - development files for the OpenEXR image li
c libopenexr2c2a - runtime files for the OpenEXR image librar
i libopenexr2ldbl - runtime files for the OpenEXR image librar
p libpfs-1.2-0 - C++ library to read and write pfs files
p libpfs-dev - C++ library to read and write pfs files (d
p octave-pfstools - octave bindings for pfstools
i openexr - viewer and docs for the OpenEXR image form
p pfstools - command line HDR manipulation programs
p pfstools-dbg - command line HDR manipulation programs (de
i qtpfsgui - graphical user interface providing a workf


Это именно то, что надо. В данном примере я соединил два поисковых шаблона вместе (логическое И).

А вот пример отрицания условия:

$ aptitude search '!~i~naptitude'
p aptitude-dbg - Debug symbols for the aptitude package man
v aptitude-doc -
p aptitude-doc-cs - Czech manual for aptitude, a terminal-base
p aptitude-doc-fi - Finnish manual for aptitude, a terminal-ba
p aptitude-doc-fr - French manual for aptitude, a terminal-bas
p aptitude-doc-ja - Japanese manual for aptitude, a terminal-b


Здесь я искал такие пакеты, в названии которых встречается «aptitude» (~naptitude), но в системе они у меня не установлены (!~i). Поисковые шаблоны были взяты в кавычки, чтобы избежать интерпретации восклицательного знака оболочкой bash.

А вот пример комбинации логического ИЛИ и логического И. Я смотрю, какие у меня установлены пакеты, такие что в названии встречается firefox или iceweasel (обратите внимание на группировку шаблонов с помощью скобок):

$ aptitude search '~i(~nfirefox|~niceweasel)'
i iceweasel - lightweight web browser based on Mozilla
i iceweasel-gnome-support - Support for Gnome in Iceweasel
i iceweasel-l10n-ru - Russian language package for Iceweasel


Поскольку firefox у меня не стоит, то найдены только пакеты iceweasel.

Конечно, использовать поисковые шаблоны можно не только из коммандной строки. Работают они и во встроенном поиске aptitude в полноэкранном режиме.

От себя могу заметить, что после того, когда я вдруг узнал про поисковые шаблоны aptitude, поиск и установка нужных программ в Debian стали намного проще и приятнее.

По теме: Как пометить пакеты в Aptitude, чтобы потом удалить.