apt в Linux: как работает пакетный менеджер Debian и Ubuntu

apt в Linux: как работает пакетный менеджер Debian и Ubuntu Полезное

apt (Advanced Package Tool) — это высокоуровневый пакетный менеджер в Debian, Ubuntu и производных от них дистрибутивах: он ставит, обновляет, удаляет и ищет программы, автоматически подтягивая нужные зависимости из репозиториев. Ниже разберем, чем apt отличается от apt-get и dpkg, где он хранит списки пакетов и репозитории и какие команды нужны в повседневной работе — update, upgrade, install, remove, purge, search.

Что такое apt и зачем он нужен

Программы в Debian и Ubuntu распространяются в виде пакетов — файлов с расширением .deb. В одном пакете лежат исполняемые файлы, конфигурация и метаданные: имя, версия и список зависимостей (других пакетов, без которых программа не заработает).

Ставить такие пакеты вручную неудобно: у одной программы бывают десятки зависимостей, а у них — свои. apt берет эту работу на себя. Вы просите установить пакет по имени — apt находит его в репозитории, вычисляет полное дерево зависимостей, скачивает все нужное и ставит в правильном порядке.

Репозиторий — это сервер (или локальный носитель) с коллекцией пакетов и индексом: перечнем того, что доступно и каких версий. Список подключенных репозиториев хранится в конфигурации системы (пути ниже). Именно из репозиториев apt берет и сами программы, и информацию об обновлениях.

dpkg, apt-get и apt: чем отличаются

Эти три инструмента часто путают, хотя они работают на разных уровнях. Короткий словарь, чтобы развести их сразу:

  • dpkg — низкоуровневая утилита. Ставит и удаляет один конкретный .deb-файл, который у вас уже есть на диске. Не ходит в репозитории и не разрешает зависимости: если пакету чего-то не хватает, dpkg просто сообщит об ошибке.
  • apt-get (вместе с apt-cache) — классический высокоуровневый интерфейс поверх dpkg. Умеет работать с репозиториями и разрешать зависимости. Стабильный набор опций, поэтому его удобно использовать в скриптах.
  • apt — более новая единая команда, объединившая самые частые операции apt-get и apt-cache в одном инструменте с удобным для человека выводом: прогресс-бар, цветной текст, сводка изменений. Рассчитана на работу руками в терминале.
Инструмент Уровень Репозитории и зависимости Когда брать
dpkg низкий нет поставить один локальный .deb, посмотреть, что установлено
apt-get / apt-cache высокий да скрипты и автоматизация (стабильные опции)
apt высокий да повседневная работа руками в терминале

Важная оговорка: apt не заменяет apt-get полностью. Разработчики намеренно не гарантируют неизменность интерфейса apt между версиями, поэтому для скриптов рекомендуют apt-get. Для интерактивной работы apt удобнее — на нем и сосредоточимся.

Где apt хранит списки пакетов и репозитории

Полезно знать три места, куда apt пишет и откуда читает:

  • Список репозиториев — файл /etc/apt/sources.list и отдельные файлы в каталоге /etc/apt/sources.list.d/. В свежих релизах (Debian 12+, Ubuntu 24.04+) по умолчанию используется новый формат deb822 — файлы с расширением .sources в том же каталоге (например, /etc/apt/sources.list.d/ubuntu.sources). Старый однострочный формат тоже поддерживается.
  • Скачанный индекс пакетов — каталог /var/lib/apt/lists/. Сюда команда update складывает перечни доступных пакетов из каждого репозитория. Это локальная копия, по которой apt отвечает на search, show и install.
  • Кеш скачанных пакетов — каталог /var/cache/apt/archives/. Сюда попадают сами .deb-файлы перед установкой; их можно удалить командой sudo apt clean, если нужно освободить место.

Различайте два перечня: индекс из /var/lib/apt/lists/ — это «что вообще доступно в репозиториях», а список установленного на вашей машине ведет dpkg (посмотреть — apt list --installed).

Основные команды apt

Общий синтаксис такой: apt <команда> <пакеты> <опции>. Команды, которые меняют систему, требуют прав суперпользователя, поэтому идут через sudo. Команды, которые только читают (search, show, list), в sudo не нуждаются.

Минимальный рабочий сценарий — обновить индекс и поставить программу:

sudo apt update
sudo apt install htop

Первая команда освежает локальный индекс, вторая ставит утилиту htop со всеми зависимостями. Разберем команды по отдельности.

update — обновить индекс репозиториев

sudo apt update

Команда обходит все подключенные репозитории и обновляет локальный индекс в /var/lib/apt/lists/. Она не устанавливает и не обновляет сами программы — только освежает информацию о том, что доступно. Типичный вывод в конце сообщает, сколько пакетов можно обновить:

Reading package lists... Done
Building dependency tree... Done
12 packages can be upgraded. Run 'apt list --upgradable' to see them.

Запускать update перед каждой установкой не обязательно, но полезно делать это перед установкой набора пакетов и перед обновлением системы — иначе apt будет опираться на устаревший индекс.

upgrade — обновить установленные пакеты

sudo apt upgrade

Устанавливает доступные обновления для уже установленных пакетов. Перед выполнением apt покажет список того, что будет обновлено, установлено дополнительно или удалено, и спросит подтверждение — прочитайте этот список, прежде чем нажать Y. Обычный upgrade старается ничего не удалять; если для обновления нужно удалить пакет, он отложит такое обновление.

Более полное обновление делает full-upgrade (в apt-get ему соответствует dist-upgrade):

sudo apt full-upgrade

Эта команда разрешает удалять пакеты, если это нужно, чтобы обновить остальные. Она мощнее, но и опаснее — именно поэтому внимательно смотрите на строку «будет удалено» в подтверждении.

install — установить пакеты

sudo apt install nginx

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

sudo apt install git curl
sudo apt install nginx=1.24.0-1ubuntu1

Той же командой apt install обновляют один конкретный пакет до последней доступной версии, не трогая остальные.

remove и purge — удалить пакеты

Обе команды меняют состояние системы, требуют sudo и показывают список к удалению перед подтверждением — его тоже стоит прочитать, чтобы случайно не снести нужное.

sudo apt remove nginx
sudo apt purge nginx

Разница между ними — в конфигурации:

  • remove удаляет пакет, но оставляет его конфигурационные файлы в системе (например, в /etc/). Если позже поставить пакет заново, настройки подхватятся.
  • purge удаляет пакет вместе с его системными конфигами. Личные файлы в домашнем каталоге (~/.config, ~/.local) apt не трогает — их пакетный менеджер не отслеживает.

Отдельно стоит autoremove — убирает пакеты, которые ставились автоматически как зависимости и больше никому не нужны:

sudo apt autoremove

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

search, show и list — найти и посмотреть

Эти команды только читают данные и работают без sudo.

apt search nginx
apt show nginx

search ищет слово в именах и описаниях пакетов из индекса, show показывает подробности одного пакета: версию, размер, зависимости, описание. Искать только по имени (не по описанию) помогает опция --names-only, она понимает регулярные выражения:

apt search --names-only '^python3-'

Команда list выводит пакеты по фильтру:

apt list --installed
apt list --upgradable

--installed покажет установленное, --upgradable — то, для чего вышли новые версии (после свежего update).

Выводы

  • apt — высокоуровневый пакетный менеджер Debian и Ubuntu: ставит, обновляет, удаляет и ищет программы, сам разрешая зависимости из репозиториев.
  • Три инструмента разного уровня: dpkg работает с одним локальным .deb без зависимостей; apt-get подходит для скриптов (стабильные опции); apt удобен для работы руками.
  • Ключевые команды: update (обновить индекс, не программы), upgrade/full-upgrade (обновить пакеты), install, remove (без конфигов) и purge (с конфигами), search/show/list.
  • Списки репозиториев — в /etc/apt/sources.list и /etc/apt/sources.list.d/; скачанный индекс — в /var/lib/apt/lists/; кеш пакетов — в /var/cache/apt/archives/.
  • Команды, меняющие систему (upgrade, remove, purge, autoremove, full-upgrade), запускайте через sudo и сначала читайте список изменений, который apt показывает перед подтверждением.

Где применяется / связь с практикой

Освойте тему на практике

Уверенная работа с apt — базовый навык системного администратора и DevOps-инженера: развертывание сервисов, подготовка серверов, сборка Docker-образов (внутри Dockerfile пакеты ставятся тем же apt install) — все опирается на пакетный менеджер и понимание репозиториев. Разобраться с устройством Linux системно, от файловой системы и прав до управления пакетами и сервисами, помогает курс Linux Basic.

Освойте тему на практике

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

Смежные темы: Основы работы со скриптами, Docker: основы работы.

FAQ

Нужно ли запускать apt update перед каждой установкой?
Нет. Достаточно делать это периодически, особенно перед установкой сразу нескольких пакетов и перед обновлением системы — чтобы apt работал по свежему индексу репозиториев, а не по устаревшему.

Можно ли поставить программу из .deb-файла, скачанного вручную?
Да, командой sudo apt install ./имя-пакета.deb (с путем к файлу) — apt подтянет зависимости из репозиториев. Утилита dpkg -i тоже установит файл, но зависимости придется доставлять отдельно.

Что делать, если apt пишет об ошибке зависимостей или «broken packages»?
Сначала запустите sudo apt update, затем sudo apt --fix-broken install — команда попробует доустановить недостающие зависимости и привести систему в согласованное состояние.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)