Команды apt: установка, обновление и удаление пакетов в Ubuntu и Debian
apt — менеджер пакетов Ubuntu и Debian: sudo apt update обновляет списки пакетов, sudo apt upgrade ставит обновления, sudo apt install имя устанавливает пакет, sudo apt remove удаляет его (purge — вместе с конфигами), а apt autoremove убирает ненужные зависимости. Найти пакет помогают apt search и apt show, а сломанные зависимости чинит sudo apt --fix-broken install.
apt — стандартный менеджер пакетов в Ubuntu, Debian и их производных (Linux Mint, Pop!_OS). Он скачивает программы из репозиториев, сам подтягивает зависимости и обновляет систему одной командой. Ниже — все apt команды, которые нужны в повседневной работе, сгруппированные по задачам, плюс типичные ошибки и их решения.
Как устроена работа apt
Пакет — это архив .deb с программой, метаданными и списком зависимостей. Репозитории — серверы, где лежат пакеты; их адреса прописаны в /etc/apt/sources.list и в каталоге /etc/apt/sources.list.d/. apt хранит локальную копию списка доступных пакетов и при установке сверяется именно с ней, поэтому её нужно регулярно обновлять.
Под капотом apt вызывает низкоуровневый dpkg, который распаковывает и регистрирует пакеты, но не умеет разрешать зависимости. Команды apt-get и apt-cache — старый интерфейс с той же функциональностью: стабильный вывод, удобен в скриптах. apt — более новая обёртка для людей: прогресс-бар, цвет, короче команды.
Почти все изменяющие команды требуют прав администратора, поэтому запускаются через sudo. Поиск и просмотр информации работают и без него.
Шпаргалка: основные apt команды
| Команда | Что делает |
|---|---|
sudo apt update | обновить списки пакетов из репозиториев |
sudo apt upgrade | установить обновления, не удаляя пакеты |
sudo apt full-upgrade | обновить с удалением/заменой пакетов при необходимости |
sudo apt install пакет | установить пакет с зависимостями |
sudo apt reinstall пакет | переустановить пакет |
sudo apt remove пакет | удалить пакет, оставив конфиги |
sudo apt purge пакет | удалить пакет вместе с системными конфигами |
sudo apt autoremove | удалить ставшие ненужными зависимости |
apt search слово | найти пакет по имени и описанию |
apt show пакет | описание, версия, зависимости, размер |
apt list --installed | список установленных пакетов |
apt list --upgradable | что можно обновить |
apt policy пакет | установленная и доступные версии, источники |
sudo apt clean | очистить кэш скачанных .deb |
sudo apt --fix-broken install | починить сломанные зависимости |
apt update и apt upgrade: как обновить систему
Это две разные операции, и их часто путают. apt update ничего не устанавливает: он только скачивает свежие списки пакетов. apt upgrade уже ставит новые версии установленных программ, опираясь на эти списки.
$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
12 packages can be upgraded. Run 'apt list --upgradable' to see them.
$ apt list --upgradable
$ sudo apt upgrade
Обычная связка для сервера — одной строкой, с автоматическим подтверждением:
sudo apt update && sudo apt upgrade -y
Чем upgrade отличается от full-upgrade
apt upgrade может установить новые зависимости, но никогда не удаляет уже установленные пакеты. Если обновление требует удалить что-то (например, при смене версии ядра или библиотеки), такие пакеты будут «отложены» — в выводе появится строка The following packages have been kept back. apt full-upgrade (аналог apt-get dist-upgrade) разрешает удаления и доводит обновление до конца. Перед ним внимательно читайте, что apt собирается удалить.
Обновить только один пакет
sudo apt install --only-upgrade nginx
Если пакет не установлен, команда с --only-upgrade его не поставит — это защищает от случайной установки.
apt install: установка пакетов
sudo apt install nginx # один пакет
sudo apt install git curl htop # несколько сразу
sudo apt install -y docker.io # без вопроса Y/n
sudo apt install nginx=1.24.0-2ubuntu7 # конкретная версия
sudo apt install --no-install-recommends ffmpeg # без рекомендуемых пакетов
sudo apt install ./google-chrome-stable_current_amd64.deb # локальный .deb
При установке apt показывает, какие пакеты будут добавлены и сколько места займут, и спрашивает подтверждение. Флаг -y отвечает «да» автоматически — удобно в скриптах и Dockerfile, но в интерактивной работе лучше читать список.
По умолчанию apt ставит не только обязательные зависимости (Depends), но и рекомендуемые (Recommends). На серверах и в контейнерах --no-install-recommends заметно уменьшает объём.
Установка .deb-файла: apt или dpkg -i
Скачанный .deb лучше ставить через apt install ./файл.deb — путь обязательно с ./ или полный, иначе apt будет искать пакет с таким именем в репозитории. В отличие от dpkg -i, apt сам скачает недостающие зависимости. Если вы уже поставили пакет через dpkg и получили ошибку зависимостей, её исправит sudo apt --fix-broken install.
sudo dpkg -i package.deb
sudo apt --fix-broken install
apt или snap
В Ubuntu есть и второй менеджер — snap. Snap-пакет несёт все зависимости внутри себя и работает в изолированной песочнице: не ломается от конфликта версий, но занимает больше места. Не ставьте одну программу и через apt, и через snap «на всякий случай»: apt — по умолчанию для системных утилит, dpkg — для отдельных .deb-файлов, snap — для приложений с частыми обновлениями (snap find, sudo snap install, snap list, откат — sudo snap revert).
apt remove, purge и autoremove: удаление пакетов
| Команда | Программа | Конфиги в /etc | Зависимости |
|---|---|---|---|
apt remove | удаляется | остаются | остаются |
apt purge | удаляется | удаляются | остаются |
apt autoremove | — | — | удаляются ненужные |
sudo apt remove nginx
sudo apt purge nginx # то же + конфиги
sudo apt autoremove # хвосты зависимостей
sudo apt autoremove --purge # хвосты вместе с их конфигами
remove подходит, если вы планируете вернуть программу и хотите сохранить её настройки. purge — для полной переустановки с чистого листа. Учтите: файлы в домашнем каталоге пользователя (например, ~/.config) не удаляет ни одна из команд.
Найти пакеты, которые удалены, но оставили конфиги, можно так — у них статус rc:
dpkg -l | grep '^rc'
Поиск пакетов и информация о них
apt search postgresql # поиск по имени и описанию
apt search --names-only '^php8' # только по имени, с регулярным выражением
apt show htop # версия, размер, зависимости, описание
apt policy docker.io # какие версии доступны и откуда
apt list --installed | grep python3
apt-cache depends curl # от чего зависит пакет
apt-cache rdepends libssl3 # кто зависит от пакета
Какому пакету принадлежит файл
$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl
$ dpkg -L curl # какие файлы установил пакет
Если команды ещё нет в системе, Ubuntu при попытке её запустить сама подскажет нужный пакет (сообщение Command 'tree' not found, but can be installed with: sudo apt install tree). Для поиска по файлам в не установленных пакетах есть утилита apt-file: apt-file search bin/dig после sudo apt-file update.
Фиксация версии: apt-mark hold
Иногда пакет нельзя обновлять — например, версию СУБД или ядра на продакшене меняют только вручную. Для этого пакет «замораживают»:
sudo apt-mark hold postgresql-16
apt-mark showhold
sudo apt-mark unhold postgresql-16
Ещё одна полезная пара — apt-mark manual и apt-mark auto. Пакеты, поставленные как зависимость, помечены автоматическими и попадут под autoremove, когда станут не нужны. Пометка manual защищает пакет от этого.
Репозитории: как добавить и где они лежат
Список источников — в /etc/apt/sources.list и файлах /etc/apt/sources.list.d/*.list. В Ubuntu 24.04 и Debian 12+ всё чаще используется формат deb822 с расширением .sources (например, /etc/apt/sources.list.d/ubuntu.sources).
Сторонний репозиторий с ключом
Современный способ — хранить ключ репозитория отдельно и привязать его через signed-by. Команда apt-key устарела и в новых версиях удалена.
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce
PPA в Ubuntu
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo add-apt-repository --remove ppa:deadsnakes/ppa
PPA — личные репозитории на Launchpad. Подключайте только те, которым доверяете: пакеты из них ставятся с правами root.
Кэш и место на диске
Скачанные пакеты остаются в /var/cache/apt/archives/. На маленьких дисках и в Docker-образах кэш стоит чистить.
du -sh /var/cache/apt/archives
sudo apt clean # удалить весь кэш .deb
sudo apt autoclean # удалить только устаревшие версии
В Dockerfile установку принято писать одним слоем и сразу убирать списки пакетов:
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl ca-certificates \
&& rm -rf /var/lib/apt/lists/*
В скриптах используют apt-get, а не apt: у apt нестабильный интерфейс, и он прямо предупреждает об этом (WARNING: apt does not have a stable CLI interface). Чтобы установщик не задавал вопросов, добавляют DEBIAN_FRONTEND=noninteractive.
Типичные ошибки apt и как их исправить
Could not get lock /var/lib/dpkg/lock-frontend
Другой процесс уже работает с пакетами: открыт второй терминал с apt, «Центр приложений» или фоновые автообновления unattended-upgrades. Подождите несколько минут и проверьте, кто держит блокировку:
ps aux | grep -E 'apt|dpkg'
Не удаляйте lock-файлы вручную, пока процесс жив: прерванная установка может оставить систему в несогласованном состоянии. Если процесс действительно завис или был убит, после его завершения выполните sudo dpkg --configure -a.
Unable to locate package
apt не нашёл пакет. Чаще всего вы не сделали sudo apt update на свежей системе, опечатались в имени или пакет лежит в отключённом компоненте (universe в Ubuntu). Компонент включается командой sudo add-apt-repository universe.
Unmet dependencies / held broken packages
Зависимости не сходятся — обычно после ручной установки .deb или смешивания репозиториев разных версий дистрибутива.
sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy проблемный-пакет
dpkg was interrupted
Установка была прервана (закрыли терминал, пропало питание). Сообщение прямо подсказывает решение: sudo dpkg --configure -a.
NO_PUBKEY при apt update
У стороннего репозитория нет или устарел ключ подписи. Скачайте актуальный ключ с сайта проекта в /etc/apt/keyrings/ и пропишите его в signed-by, как в примере с Docker выше.
Автоматические обновления безопасности
В Ubuntu Server по умолчанию стоит пакет unattended-upgrades, который сам ставит обновления безопасности. Проверить и включить его можно так:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log
Нужна ли перезагрузка после обновления, показывает файл /var/run/reboot-required: если он существует, обновилось ядро или ключевые библиотеки.
Итог
Базовые apt команды укладываются в короткий цикл: update перед любыми действиями, install для установки, upgrade для обновления, remove или purge для удаления и autoremove для уборки. Для версий есть apt policy и apt-mark hold, для поломок — --fix-broken install и dpkg --configure -a, а в скриптах используйте apt-get. Управление пакетами разобрано на практике в курсе по Linux.
Частые вопросы
Чем apt отличается от apt-get?
Это интерфейсы к одной системе пакетов. apt удобнее для работы в терминале (прогресс, цвет, короткие команды), а apt-get имеет стабильный вывод и рекомендуется для скриптов и Dockerfile.
Нужно ли делать apt update перед каждой установкой?
Желательно, если списки давно не обновлялись: иначе apt может не найти пакет или попытаться скачать версию, которой уже нет на зеркале, и выдать ошибку 404.
Как посмотреть историю установок и удалений apt?
История пишется в /var/log/apt/history.log (старые записи в архивах history.log.N.gz), а подробный лог dpkg — в /var/log/dpkg.log.
Как откатить пакет на предыдущую версию?
Посмотрите доступные версии через apt policy пакет и установите нужную командой sudo apt install пакет=версия, затем зафиксируйте её через apt-mark hold, чтобы следующее обновление не вернуло новую.
Можно ли использовать apt в CentOS или Fedora?
Нет, там другой формат пакетов (rpm) и свои менеджеры — dnf и yum. apt работает в Debian, Ubuntu и производных от них дистрибутивах.
Эта тема подробно разобрана с практикой в курсе «Linux: с нуля до уверенного администрирования».
Перейти к курсу