Управление пакетами в Ubuntu (продолжение)

Как я уже писал, команда apt-cache search ищет пакеты в кэше компьютера пользователя. Однако, на практике время от времени возникает потребность разобраться, что откуда устанавливалось, т.е., поискать пакеты и в репозиториях (в серверах). Очень помогает в этом команда aptitude search. Признаться, я долго «вкуривал» язык запросов утилиты aptitude, но когда «вкурил», то осознал, что поиск по репозиториям может быть столь же полезным, как органайзер забывчивым...

Общий синтаксис команды:

aptitude search 'выражение'

Выражение состоит из термов, соединённых символами булевой алгебры.

Каждый терм, в свою очередь, состоит из функции и аргумента.

Функция терма – это инструкция, поясняющая, что и где селектировать (фильтровать). Аргумент простого терма – это строковый литерал без пробелов и знаков препинания, отражающий некое ключевое понятие, такое, как шаблон поиска (паттерн, образец) или выполняемое действие.

Шаблон поиска – слово, предположительно встречающееся в описании пакета, или наименование пакета, репозитория, архива, а также поддерживателя (мейнтейнера) пакета. Шаблон не обязательно должен содержать полное слово. В качестве шаблона допускается использовать любую часть слова. Наиболее часто аргументом терма является именно шаблон. Если требуется отбирать пакеты, наименования которых начинаются с шаблона, то шаблон предваряется «домиком», т.е. символом ^. Удобно, чтобы отбросить, например, библиотеки, начинающиеся с «lib»

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

Аргумент сложного терма – другие термы.

Как увидим далее, функции термов и булевы символы могут употребляться в полной и/или сокращённой нотации. Если функция записана в полной нотации, то аргумент такой функции заключается в скобки. Если выражение поиска содержит хотя бы одни скобки, то выражение выделяется парой апострофов. Этого требует интерпретатор bash.

Примеры простых термов:

?description(firefox) – селекция пакетов, в описании которых содержится шаблон «firefox».

~dfirefox – тот же терм в сокращённой нотации. Скобки не обязательны.

Символы булевой алгебры, соединяющие термы, также могут быть записаны в полной и сокращённой нотации. Полная нотация логических символов:

?not – отрицание,

?or – логическое «ИЛИ»,

?and – логическое «И».

Сокращённая нотация логических символов:

| – логическое «ИЛИ»,

! – логическое отрицание.

Логическое «И» в сокращённой нотации выглядит, как конкатенация (слияние) термов. Пример логического сложения (дизъюнкции) термов:

~dвеб-браузер|~dbrowser – селекция пакетов, в описании которых содержится «веб-браузер» или «browser».

А вот это выражение отфильтрует из репозиториев только те пакеты, которые уже установлены у пользователя:

'?installed(~dвеб-браузер|~dbrowser)'

Здесь аргументом функции ?installed является дизъюнкция термов. То же в сокращённой нотации:

'~i(~dвеб-браузер|~dbrowser)'

Как видим, синтаксис поисковых выражений допускают одновременное использование и полной, и сокращённой нотации.

Вот небольшая таблица других наиболее употребительных функций, в скобках приводится сокращённая нотация::

?new – селекция новых пакетов, которые появились в репозитории, но ещё не были проидексированы (~N),

?broken – поиск «битых» пакетов (~b),

?obsolete – поиск устаревших пакетов, которые больше не поддерживаются,

?config_files – поиск удалённых пакетов, для которых в системе остались конфигурационные файлы (~c),

?origin – поиск пакетов в конкретном репозитории (указывается наименование репозитория, ~O),

?archive – поиск пакета в архивах репозиториев (~A).

Полный список функций можно найти здесь

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

aptitude search '(?new(~dbrowser|~nbrowser|~dбраузер))(!~n^lib)(!~n^python)'

А вот эта команда покажет, какие пакеты вы установили из архивов нестабильной ветки:

aptitude search ~Aunstable~i

Действие команды aptitude search можно значительно усилить, добавив дополнительную конвейерную фильтрацию. Например, команда

aptitude search '(~i(~dbrowser|~nbrowser|~dбраузер))(!~n^lib)(!~n^python)(!~dhelp)' | grep browser

выведет только установленные пакеты, которые aptitude search выводит со словом browser. Команда

aptitude search ?obsolete

выведет пакеты, которые в репозиториях не поддерживаются. Чаще всего это deb-пакеты, скачанные из сайтов разработчиков, а не из репозиториев.

Вот команда, которая выведет пакеты, установленные не из репозиториев Ubuntu:

aptitude search '?installed?not(?origin(Ubuntu))'

Хотя можно и так:

aptitude search '?not(?origin (Ubuntu))?installed'

Короче, посмотрите по репозиториям, освежите память, обнаружите много интересного и, возможно, неожиданного. Успехов!

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя mike

Приношу извинения читателям. Выражения (при необходимости) выделяются одинарными кавычками (клавиша с буквой Э), а не апострофами (клавиша с буквой Ё). Вечно путаю эти наименования!  Но употребляю правильно. Надеюсь, моя оплошность не будет причиной кликов по zeliboba_fffuuuu