Администрирование Linux-серверов

APT в Ubuntu и Debian: установка, обновление, удаление и очистка пакетов

Как работать с APT в Ubuntu Server и Debian: обновлять индексы, устанавливать и обновлять пакеты, удалять их и очищать зависимости и кэш.

9 минут
абстрактная иллюстрация управления пакетами Linux
В Ubuntu Server и Debian для интерактивной работы с программами обычно используют APT. apt update обновляет локальные сведения о пакетах, а apt install, apt upgrade, apt remove и другие команды меняют состав системы. Изменяющие систему команды запускают с административными правами, например через sudo, и перед подтверждением всегда читают рассчитанный список устанавливаемых, обновляемых и удаляемых пакетов.

APT получает пакеты из уже настроенных репозиториев пакетов. Набор пакетов и версий зависит от выпуска ОС, архитектуры и подключённых источников. Формат и расположение настройки источников, их названия и доступность различаются между выпусками Debian и Ubuntu и конкретными конфигурациями; актуальные сведения нужно сверять с Debian Reference и руководством Ubuntu Server по управлению пакетами. Изменение репозиториев, PPA, ключей и политик доверия в этой инструкции не рассматривается.

APT и apt-get

apt предназначен прежде всего для интерактивной работы администратора и выводит удобный для человека результат. Для скриптов и автоматизации интерфейс apt не следует считать неизменно стабильным: выбор между apt и apt-get, а также допустимые параметры нужно сверять с документацией используемого выпуска. Общее различие DEB-, RPM-, APT- и DNF-стеков описано в статье «Пакеты Linux: DEB, RPM, APT, YUM и DNF — как устроена установка программ».

Обновить индекс пакетов: apt update

Индекс пакетов содержит сведения о доступных версиях, архитектурах и зависимостях пакетов. Команда apt update загружает актуальные индексы из уже настроенных репозиториев, но не устанавливает и не обновляет программы.

Обновить локальные индексы пакетов из настроенных источников.
sudo apt update

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

Разница между apt update, apt upgrade и apt full-upgrade

КомандаЧто делаетМожет удалить установленные пакеты
apt updateОбновляет локальные индексы доступных пакетов.Нет
apt upgradeОбновляет установленные пакеты; при необходимости может установить новые зависимости.Нет
apt full-upgradeОбновляет систему с более свободным разрешением зависимостей.Да, если это требуется для разрешения зависимостей

Проверить пакет и доступные версии

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

Показать известные APT версии указанного пакета. Вместо `<пакет>` укажите имя, например `curl`.
apt list --all-versions <пакет>
Показать установленную версию, версию-кандидат и источники известных версий.
apt-cache policy <пакет>
Вывод apt list может содержать предупреждение о нестабильности CLI для скриптов. В интерактивном сеансе это не мешает просмотру, но не делает формат вывода контрактом для автоматизации.

Установить пакет или обновить один пакет через apt install

Команда apt install устанавливает отсутствующий DEB-пакет вместе с необходимыми зависимостями. Если пакет уже установлен, apt install <пакет> может обновить именно его до выбранной APT версии-кандидата. Это не эквивалентно полному обновлению системы: другие установленные пакеты сами по себе не становятся целью команды.

Установка пакета Linux через APT

Ниже <пакет> — имя пакета из настроенных репозиториев.

  1. 1
    При необходимости обновите индексы
    Если сведения о репозиториях не обновлялись недавно, выполните sudo apt update. Команда только получает актуальные метаданные.
  2. 2
    Просмотрите план без изменений
    Выполните apt -s install <пакет>. Режим симуляции покажет рассчитанные установки, обновления и удаления, но не изменит систему.
  3. 3
    Установите пакет
    Выполните sudo apt install <пакет>. Перед ответом на запрос подтверждения проверьте разделы с новыми, обновляемыми и удаляемыми пакетами.
  4. 4
    Проверьте установленную версию
    Выполните apt-cache policy <пакет> и сравните строку Installed с ожидаемой версией. Наличие пакета не подтверждает работоспособность самого приложения или его службы.
Установить отсутствующий пакет либо запросить обновление уже установленного пакета до версии-кандидата.
sudo apt install <пакет>
Запросить конкретную доступную версию пакета.
sudo apt install <пакет>=<версия>

Конкретная версия доступна не всегда

Версию можно запросить только если она есть в настроенных источниках, подходит для архитектуры системы и её зависимости разрешимы. Запрос версии может потребовать согласованных версий зависимостей или быть отклонён APT. Не подставляйте номер версии из примера: используйте версию из вывода apt list --all-versions или apt-cache policy на целевом сервере.

Обновить установленные пакеты: upgrade и full-upgrade

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

Обновить установленные пакеты без удаления уже установленных пакетов.
sudo apt upgrade

apt full-upgrade разрешает зависимости более свободно и при необходимости может удалить установленные пакеты. Поэтому особенно внимательно проверьте рассчитанную пакетную транзакцию до подтверждения, включая список удаляемых компонентов.

Выполнить полноценное обновление с возможностью удаления пакетов при разрешении зависимостей.
sudo apt full-upgrade

Полное обновление рабочего сервера требует планирования

Не подтверждайте full-upgrade, если состав транзакции не понятен или в нём есть неожиданные удаления. Планирование окна работ, обновления ядра, проверка необходимости перезагрузки и варианты отката рассмотрены отдельно в статье «Обновление Linux-сервера: пакеты, ядро, перезагрузка и откат».

Как заранее посмотреть изменения APT

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

Симулировать установку или обновление одного пакета без изменений в системе. Ключ `-s` означает `--simulate`.
apt -s install <пакет>
Показать, что изменилось бы при обычном обновлении установленных пакетов.
apt -s upgrade
Показать план полного обновления, включая возможные удаления пакетов.
apt -s full-upgrade

Симуляция — снимок текущего состояния

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

Удалить пакет: apt remove и apt purge

apt remove удаляет пакет, но обычно оставляет конфигурационные файлы, которые учитывает пакетная система. Это позволяет при повторной установке вернуть часть прежней настройки. Зависимости, ставшие ненужными, не обязательно удаляются этой командой.

Удалить пакет, обычно сохранив его учитываемую пакетной системой конфигурацию.
sudo apt remove <пакет>

apt purge удаляет пакет и его конфигурационные файлы, которые учитывает пакетная система. Команду можно применять к установленному пакету или к уже удалённому пакету, если его остаточная конфигурация всё ещё зарегистрирована в базе пакетов.

Удалить пакет вместе с конфигурационными файлами, учитываемыми пакетной системой.
sudo apt purge <пакет>

Purge не означает удаление всех данных приложения

apt purge не гарантирует удаления пользовательских данных, журналов, баз данных, файлов в домашних каталогах и других объектов, созданных приложением или администратором вне контроля пакетной системы. Перед удалением серверного приложения отдельно определите, где хранятся его данные и конфигурация.

Удалить ненужные зависимости: apt autoremove

APT различает пакеты, помеченные как установленные вручную и автоматически. apt autoremove предлагает удалить автоматически установленные пакеты, которые APT больше не считает необходимыми для вручную установленных пакетов. Это полезная очистка, но не обязательная и не безусловно безопасная: рассчитанный список нужно проверить.

Показать автоматически установленные пакеты, которые APT предлагает удалить, без изменения системы.
apt -s autoremove
Удалить автоматически установленные и более не нужные, по мнению APT, пакеты после проверки списка.
sudo apt autoremove

Если пакет нужен, но APT считает его автоматической зависимостью, отметьте его как установленный вручную до запуска autoremove.

Пометить пакет как установленный вручную, чтобы APT не предлагал удалить его только как ненужную автоматическую зависимость.
sudo apt-mark manual <пакет>
После apt-mark manual <пакет> повторите apt -s autoremove и убедитесь, что пакет исчез из списка на удаление. Отметка вручную влияет на расчёт необходимости пакета, но не устанавливает его и не меняет его версию.

Очистить кэш APT: clean и autoclean

При загрузке пакетов APT сохраняет архивы DEB в кэше пакетов. Очистка этого кэша не удаляет установленные программы и не заменяет autoremove: это разные операции.

Разница между apt clean и apt autoclean

КомандаЧто удаляетЧто не удаляет
apt cleanВсе загруженные архивы пакетов из кэша APT.Установленные пакеты и индексы репозиториев.
apt autocleanТолько архивы пакетов, которые больше нельзя скачать из настроенных источников.Доступные для повторной загрузки архивы, установленные пакеты и индексы репозиториев.
Удалить все загруженные архивы пакетов из кэша APT.
sudo apt clean
Удалить из кэша только устаревшие архивы, которые уже нельзя скачать из настроенных репозиториев.
sudo apt autoclean
Ни clean, ни autoclean не очищают списки и индексы репозиториев, полученные через apt update. После clean APT при необходимости скачает нужный DEB-архив заново.

Когда не продолжать операцию APT

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

Блокировки и прерванный dpkg — отдельная диагностика

Сообщения о блокировке менеджера пакетов, dpkg was interrupted или неразрешимых зависимостях не следует исправлять удалением lock-файлов и случайными командами. Не запускайте параллельные пакетные транзакции. Диагностика таких состояний описана в статье «Не устанавливаются пакеты в Linux: блокировки, зависимости и ошибки APT/DNF».

Термины в статье

Зависимость пакета — требование пакета к другому пакету или его версии, без выполнения которого установка, запуск либо корректное обновление ПО невозможны или ограничены.
Индекс пакетов — набор метаданных репозитория, содержащий сведения о версиях, зависимостях, архитектурах и расположении доступных пакетов.
Кэш пакетов — локально сохранённые менеджером пакетов архивы пакетов и, в зависимости от реализации, метаданные репозиториев для повторного использования.
Менеджер пакетов — средство установки, обновления, удаления и учёта программных пакетов; высокоуровневые менеджеры также работают с репозиториями и разрешают зависимости.
Пакетная транзакция — согласованный набор действий по установке, обновлению, удалению и настройке пакетов, формируемый менеджером пакетов в рамках одной команды или задания.
Репозиторий пакетов — структурированный источник пакетов и метаданных, из которого менеджер пакетов получает версии ПО, зависимости, обновления и информацию о подписях.
Системная служба — программный компонент, которым ОС управляет как логической единицей для фонового выполнения задач или предоставления функций программам и пользователям.
Удержание пакета — состояние пакета, запрещающее менеджеру пакетов автоматически устанавливать, обновлять, удалять или менять его версию.
APT — система управления пакетами в Debian-подобных Linux, которая получает пакеты из репозиториев, разрешает зависимости и передаёт установку низкоуровневому менеджеру dpkg.
DEB-пакет — архивный формат распространения ПО в Debian-совместимых Linux, содержащий файлы программы, метаданные и сведения о зависимостях.
Debian — универсальный дистрибутив Linux с пакетами DEB и системой APT, известный консервативной веткой Stable и разделением репозиториев по веткам разработки.
dpkg — низкоуровневый менеджер пакетов Debian, устанавливающий пакеты из локальных .deb-файлов, удаляющий установленные пакеты и ведущий их базу без загрузки зависимостей из репозиториев.
PPA — размещённый в Launchpad репозиторий DEB-пакетов для отдельных выпусков Ubuntu, который подключается к APT как дополнительный источник.
sudo — утилита контроля и делегирования привилегий, которая по заданной политике запускает команду от имени целевого пользователя, обычно root.
Ubuntu Server — серверный вариант дистрибутива Ubuntu на базе Debian с APT и типовыми средствами автоматизации, доступный в виде установочных и готовых образов.

Вопросы по теме

Все вопросы и ответы

Чем отличаются apt update и apt upgrade?

apt update только обновляет локальные индексы: сведения о доступных версиях, архитектурах и зависимостях из настроенных репозиториев. apt upgrade обновляет уже установленные пакеты до доступных версий и при необходимости добавляет зависимости. Успешный apt update сам по себе не означает, что программы на сервере обновлены.

Что делать при ошибке «dpkg was interrupted»?

Не удаляйте lock-файлы и не запускайте случайные команды для исправления состояния. Такая ошибка, как и сообщения о блокировке менеджера пакетов или неразрешимых зависимостях, требует отдельной диагностики. Не выполняйте параллельные пакетные транзакции: это может ухудшить состояние базы пакетов.

Что делает apt autoremove и может ли он удалить нужное?

apt autoremove предлагает удалить автоматически установленные пакеты, которые APT больше не считает нужными для пакетов, установленных вручную. Да, список может содержать нужный пакет, поэтому его необходимо проверить через apt -s autoremove. Если пакет нужен, отметьте его вручную командой sudo apt-mark manual <пакет> и повторите симуляцию.

Нужно ли запускать apt update перед каждой установкой?

Нет, не обязательно. apt update нужен, когда локальные индексы могли устареть, были изменены источники пакетов или требуется увидеть свежие версии из репозиториев. Команда загружает только метаданные и не устанавливает программы. Перед установкой или обновлением полезно сначала проверить рассчитанный APT план в режиме симуляции.

Может ли apt upgrade удалить установленные пакеты?

Нет, apt upgrade не удаляет уже установленные пакеты. Если для обновления конкретного пакета потребовалось бы удаление, команда может оставить его без изменений. В отличие от неё, apt full-upgrade разрешает зависимости более свободно и при необходимости способен удалить пакеты, поэтому его план нужно особенно внимательно проверять.

Удалит ли apt purge все данные серверного приложения?

Нет, apt purge удаляет пакет и конфигурационные файлы, которые учитывает пакетная система, но не гарантирует очистку всех данных приложения. Пользовательские данные, журналы, базы данных, файлы в домашних каталогах и другие объекты вне контроля пакетной системы могут остаться. Перед удалением серверного приложения отдельно определите расположение его данных и конфигурации.