Как я уже писал, команда 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'
Короче, посмотрите по репозиториям, освежите память, обнаружите много интересного и, возможно, неожиданного. Успехов!
Комментарии
Приношу извинения читателям. Выражения (при необходимости) выделяются одинарными кавычками (клавиша с буквой Э), а не апострофами (клавиша с буквой Ё). Вечно путаю эти наименования! Но употребляю правильно. Надеюсь, моя оплошность не будет причиной кликов по zeliboba_fffuuuu