# Advanced Package Tool (APT) **Advanced Package Tool** (**APT**) — набор программ для установки, обновления и удаления программных пакетов применяемый в основном в дистрибутиве Debian и других дочерних по отношению к нему дистрибутивах (например: Ubuntu, Linux Mint). Так же APT используется в дистрибутивах основанных на Mandrake (Mandriva, ALT Linux и PCLinuxOS). APT может автоматически устанавливать и настраивать программы для UNIX-подобных операционных систем как из предварительно откомпилированных пакетов, так и из исходных кодов. Пакеты берутся из интернет-репозиториев, либо их можно установить с имеющихся носителей. Для своей работы **APT** в качестве бэкенда использует утилиту [dpkg](https://ru.wikipedia.org/wiki/Dpkg) которая сама не может самостоятельно работать с удаленными репозиториями или отслеживать взаимозависимости между пакетами. Таким образом, **APT** решает три ключевые задачи: * Установка/удаление программ с автоматическим разрешением зависимостей * Обновление системы и отдельных пакетов * Поиск и анализ доступного ПО . ## Команды для основных действий с программными пакетами Основной синтаксис команды apt следующий: ``` sudo apt <действие> <пакет(ы)> <доп. параметры> ``` для выполнения требуются права root. |< 100% 20% 80% >| |Команда |Исполняемое действие | |:---:|:---| |apt update |Обновление баз данных пакетов (указанных в `/etc/apt/sources.list`)| |apt upgrade |Обновление системы| |apt search **пакет** |Поиск пакетов| |apt search **^пакет**|Поиск пакетов по регулярному выражению| |apt show **пакет** |Поиск пакетов и вывод информации о пакете. Отображается версия, размер, описание, зависимости и др.| |apt install **пакет** |Установить пакет| |apt purge **пакет** |Удалить пакет и его конфигурационные файлы. Возможно использовать для уже удаленного пакета.| |apt remove **пакет** |Удалить пакет| |apt autoremove |Удаление всех пакетов-сирот| |apt autoclean |Очистка кэша неустановленных пакетов| |apt clean |Очистка кэша пакетов| |apt edit-sources | Открывает файл `/etc/apt/sources.list` в текстовом редакторе для редактирования, после сохранения изменений и закрытия редактора, выполняет проверку файла на предмет ошибок. В случае наличия ошибок, выводит предложение на повторное редактирование файла, чтобы исправить ошибки. | |apt full-upgrade |Переход от одной основной версии дистрибутива к следующей| . ### Вывод списка пакетов Команда ``` apt list <параметр> ``` используется для вывода списка пакетов соответствующих заданному критерию. |Команда |Результат действия | |:---:|:---| |apt list -\-installed |Вывести список установленных в системе пакетов | |apt list -\-upgradable |Вывести список пакетов, которые требуют обновления (у которых вышла новая версия) | |apt list -\-all-versions |Вывести список всех пакетов доступных для вашей системы | Для того, чтобы проверить данные по какому-то конкретному пакету используется команда ``` apt list <имя_пакета> ``` например ``` apt list nginx ``` . ### Расширенный поиск Общий синтаксис команды поиска следующий: ``` apt search <имя_или_описание> ``` Результат её выполнения позволит получить полное представление о всех доступных пакетах соответствующих указанному критерию. Например ``` apt search editor ``` даст список пакетов у которых слово **editor** есть как в имени пакета, так и в описании пакета, то есть - **_вообще всех редакторов_**, доступных для установки. Для уточнения результатов поиска можно использовать командные опции, а так же регулярные выражения и подстановочные знаки. Применяемые опции: * **--installed** - показать только установленные пакеты. * **--upgradable** - показать пакеты, для которых есть обновления. * **--names-only** - искать //только по именам// пакетов (без выдачи пакетов у которых упоминание о vim есть в описаниях). * **--show-types** - добавляет к выводу информацию о типе каждого пакета (например, «библиотека», приложение», «зависимость»). Это полезно, чтобы сразу понять, с чем имеем дело. Регулярные выражения //напрямую// использовать в `apt search` //нельзя// т.к. эта команда ищет только по подстрокам (в имени и описании пакета). Например при выполнении команды `apt search libssl*` — shell сначала раскроет libssl* в список файлов/пакетов, которые есть в текущей директории, и только потом передаст результат в apt для поиска. Результат этого будет почти всегда не тот, что нужен. Команда `apt search` ожидает обычный текст или регулярное выражение (зависит от версии и реализации), а не shell-wildcards (специальные символы которые способна обрабатывать командная оболочка, например bash). #### Способы применяемые для поиска с использованием регулярных выражений Так как `apt search` не поддерживает регулярные выражения и специальные метасимволы (вроде *, ?, +, [] и т. д.) в том смысле, в каком их используют в shell или в grep, то для поиска с использованием регулярных выражений применяют следующие способы: **Способ 1**: применение `apt search --names-only` и `grep` В этом способе сначала производится сужение поиска до имён пакетов, а потом фильтрация через grep с применением регулярного выражения. Пример: ```bash apt search --names-only . | grep -E '^lib.*dev$' ``` здесь * **-\-names-only** заставляет apt search просматривать только имена пакетов, а не в описания. * **grep -E** включает расширенные регулярные выражения (Extended Regular Expressions). Без **-E** многие спецсимволы (вроде +, ?, ()) работали бы буквально, а не как операторы.. В результате код из примера найдёт пакеты, имя которых начинается с lib, а заканчивается на dev (например, libpng-dev). **Способ 2**: применение `apt-cache` + `grep` Применение `apt-cache search` даёт более простой формат вывода, удобный для дальнейшего парсинга. Применение: ```bash apt-cache search '^lib' | grep -E '^lib[a-z]+(-[a-z]+)?-dev' ``` здесь * **^lib** указанный аргументом в `apt-cache search` — это подстрока (не регулярное выражение), которая уменьшает объём данных. * **grep -E** производит фильтрацию по **_регулярному выражению_** Разбор _**регулярного выражения**_ из примера выше: * **^** — якорь «начало строки». Гарантирует, что совпадение начинается с самого начала имени пакета, а не где‑то в середине. * **lib** — буквально текст «lib». * **[a-z]+** — одна или более строчных латинских букв. То есть после lib должно идти хотя бы одно слово из букв (например, png, xml, jpeg). * **(-[a-z]+)?** — необязательная группа: * **(** и **)** — группируют часть выражения. * **-[a-z]+** — дефис и затем одна или более строчных букв (например, -dev, -tools, но тут это часть промежуточной части имени). * **?** — означает «0 или 1 раз»: эта часть может быть, а может и не быть. * **-dev** — буквально «-dev» в конце имени пакета. То есть шаблон ищет пакеты вида **lib<буквы>-dev** или **lib<буквы>-<буквы>-dev**. Примеры имен подходящих под шаблон: * **libpng-dev** → lib + png + (нет промежуточной части) + -dev * **libjpeg-turbo-dev** → lib + jpeg + -turbo (это как раз необязательная часть определяемая в (-[a-z]+)?) + -dev Пример неподходящего имени: * **libxml2-dev** не подойдёт, потому что в [a-z]+ нет цифр, а тут есть 2. Если нужно чтоб шаблон искал имена с цифрами, используют [a-z0-9]+.
**Важно!** Всегда используйте кавычки вокруг выражения для grep, чтобы оболочка не раскрывала спецсимволы: ```bash # Правильно grep -E '^foo.*bar' # Может сломаться, если в текущей директории есть файлы foo* grep -E ^foo.*bar ```
Метасимволы используемые в регулярных выражениях применяемых при фильтрации через grep: |Символ |Описание | |:---:|:---| | **^** |начало строки (имени пакета) | | **$** |конец строки | | **.** |любой символ | | **[abc]**, **[^abc]** |набор/исключения символов | | ** * ** |0 и более повторений | | **+** |1 и более повторений | | **?** |0 или 1 вхождение | | **(**...**)** |группировка | | **|** |логическое ИЛИ | . ## Графические фронтенды Существуют программы предоставляющие пользователю графический интерфейс для работы с APT: * [Synaptic](https://ru.wikipedia.org/wiki/Synaptic) * [PackageKit](https://ru.wikipedia.org/wiki/PackageKit) * [Aptitude](https://ru.wikipedia.org/wiki/Aptitude) (aptitude так же имеет псевдографический интерфейс использующий ncurses) ## Полное руководство по команде apt в Linux Можно посмотреть [здесь](https://blog.sedicomm.com/2018/04/06/ispolzovanie-komand-apt-v-linux-polnoe-rukovodstvo/)