LinuxRuLinux без лишней теории
Пакеты Debian

Команды apt: как ставить, искать и удалять пакеты в Ubuntu и Debian

Редакция LinuxRu8 мин чтенияИнструкции

Команды apt покрывают почти всю работу с программами в Debian и Ubuntu: apt install ставит пакет, apt remove и apt purge удаляют его без конфигов или вместе с ними, apt autoremove чистит лишние зависимости. Ниже рабочие примеры для Ubuntu 26.04 LTS и Debian 13, новый формат источников deb822 и правильное подключение ключей репозиториев.

Команды apt: как ставить, искать и удалять пакеты в Ubuntu и Debian
Фото: Software: the MATE and fastfetch developers Screenshot: user3412, GPL, Wikimedia Commons
Содержание
  1. apt и apt-get
  2. Установка
  3. Удаление
  4. Поиск и информация
  5. Шпаргалка
  6. Источники
  7. Ключи
  8. Если apt сломался
  9. Частые вопросы

apt, apt-get и dpkg: кто за что отвечает

В Debian и Ubuntu пакетами управляют три слоя. Внизу dpkg: он распаковывает .deb-файл, регистрирует его в базе и запускает скрипты установки, но про зависимости ничего не знает. Над ним APT: скачивает пакеты из репозиториев, вычисляет зависимости и передаёт работу dpkg. Команда apt появилась как удобная обёртка для человека: цветной вывод, прогресс-бар, понятные сообщения. Классические apt-get и apt-cache никуда не делись и лучше подходят для скриптов, потому что их вывод не меняется от версии к версии.

Практическое правило простое. В терминале руками пишите apt, в bash-скриптах и Ansible используйте apt-get. Сам apt при перенаправлении вывода даже предупреждает, что у него нестабильный интерфейс для командной строки.

Всё, что меняет систему, выполняется через sudo. Поиск, просмотр информации и списки пакетов работают от обычного пользователя. Если вы только привыкаете к sudo и правам, загляните в статью про пользователей и sudo.

Установка пакетов: apt install и его варианты

Перед установкой обновите списки пакетов, иначе apt может попытаться скачать версию, которой на зеркале уже нет:

sudo apt update
sudo apt install htop

Можно ставить сразу несколько программ через пробел. Ключ -y отвечает "да" на вопрос о подтверждении, удобно в скриптах, но вручную лучше читать, что именно apt собирается сделать.

sudo apt install git curl vim
sudo apt install -y build-essential
# поставить без рекомендуемых пакетов, экономит место на сервере
sudo apt install --no-install-recommends nginx

Локальный .deb-файл

Скачанный с сайта разработчика .deb ставьте через apt, а не голым dpkg: apt подтянет зависимости из репозиториев. Обратите внимание на ./ перед именем, без него apt будет искать пакет в репозитории.

sudo apt install ./google-chrome-stable_current_amd64.deb

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

Узнать доступные версии помогает apt policy, а поставить нужную можно через знак равенства. Если программа сломалась после ручной правки файлов, выручает переустановка:

apt policy nginx
sudo apt install nginx=1.26.3-3
sudo apt install --reinstall nginx

Номер версии в примере условный: подставьте тот, что показал apt policy в вашей системе.

Как удалить пакет в Ubuntu: remove, purge, autoremove

Удаление пакета в Ubuntu и Debian делается тремя командами, и путать их не стоит. apt remove убирает программу, но оставляет её системные настройки в /etc. Это удобно, если вы собираетесь поставить её обратно. apt purge удаляет пакет вместе с конфигами. Ни одна из команд не трогает файлы в домашнем каталоге: настройки программ в ~/.config или ~/.local/share придётся удалять руками.

sudo apt remove vlc
sudo apt purge vlc
# удалить пакет и сразу ставшие ненужными зависимости
sudo apt purge --autoremove vlc

apt autoremove убирает пакеты, которые когда-то поставились как зависимости, а теперь никому не нужны. Перед ответом "Y" прочитайте список: если там оказалась нужная вам утилита, значит, apt считает её автоматически установленной. Отметьте её как поставленную вручную, и autoremove её больше не тронет:

sudo apt-mark manual ripgrep
sudo apt autoremove

Пакеты со статусом rc в выводе dpkg -l удалены, но их конфиги остались. Найти и дочистить их можно так:

dpkg -l | grep '^rc'
sudo apt purge '~c'

Шаблон ~c в apt означает пакеты в состоянии "удалён, конфиги на месте". Если программа стояла из Snap или Flatpak, apt её не увидит: используйте snap remove или flatpak uninstall. Разница между форматами разобрана в статье Snap или Flatpak.

Поиск пакетов и сведения о них

Не знаете точное имя пакета? apt search ищет по имени и описанию, поэтому результатов бывает много. Сузить выдачу помогает поиск только по именам:

apt search ffmpeg
apt search --names-only '^python3-requests'
apt show ffmpeg

apt show выводит версию, размер, зависимости, репозиторий и описание. Для ответа на вопросы "откуда этот файл" и "что внутри пакета" нужен dpkg:

# какому пакету принадлежит файл
dpkg -S /usr/bin/curl
# какие файлы поставил пакет
dpkg -L curl
# кто из установленных зависит от пакета
apt-cache rdepends --installed libcurl4t64

Если команды нет в системе и вы не знаете, в каком она пакете, поставьте apt-file, обновите его базу через sudo apt-file update и ищите: apt-file search bin/dig. В Ubuntu на многие команды сразу подсказывает command-not-found прямо в терминале.

Шпаргалка по командам apt

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

ЗадачаКомандаАналог в apt-get / dpkg
Обновить списки пакетовsudo apt updateapt-get update
Обновить установленноеsudo apt upgradeapt-get upgrade --with-new-pkgs
Обновление со сменой зависимостейsudo apt full-upgradeapt-get dist-upgrade
Установитьsudo apt install пакетapt-get install
Удалить, оставив конфигиsudo apt remove пакетapt-get remove
Удалить с конфигамиsudo apt purge пакетapt-get purge
Убрать лишние зависимостиsudo apt autoremoveapt-get autoremove
Найти пакетapt search словоapt-cache search
Сведения о пакетеapt show пакетapt-cache show
Список установленныхapt list --installeddpkg -l
Что можно обновитьapt list --upgradableapt-get -s upgrade
Очистить кэш .debsudo apt cleanapt-get clean

Про регулярное обновление и переход между релизами есть отдельная статья: обновление Ubuntu. Если работаете ещё и с Fedora, сравните с командами dnf: логика похожа, названия подкоманд местами другие.

Репозитории: sources.list и формат deb822

Список репозиториев раньше жил в одном файле /etc/apt/sources.list, по строке на источник. В Ubuntu начиная с 24.04 и в Debian 13 основной формат другой, deb822: файлы с расширением .sources в каталоге /etc/apt/sources.list.d/. В Ubuntu 26.04 LTS официальные репозитории описаны в ubuntu.sources, в Debian 13 после установки обычно лежит debian.sources. Выглядит запись так:

Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Старые однострочные .list пока читаются, но apt в новых версиях напоминает о переходе. В apt 3.x есть команда, которая переводит старые файлы в новый формат и сохраняет копии с расширением .bak:

sudo apt modernize-sources
sudo apt update

Проверьте сгенерированные файлы. Если у стороннего репозитория поле Signed-By осталось пустым, apt такой файл не примет: путь к ключу придётся вписать руками. Опции в квадратных скобках из старых строк тоже стоит перенести вручную. Полное описание полей есть в man-странице sources.list(5).

PPA в Ubuntu

Личные архивы Launchpad подключаются одной командой, она сама создаёт файл источника и скачивает ключ. Удаление тем же инструментом с ключом --remove:

sudo add-apt-repository ppa:git-core/ppa
sudo add-apt-repository --remove ppa:git-core/ppa

Ключи репозиториев без apt-key

Старые инструкции из интернета до сих пор советуют apt-key add. Не делайте так: утилита много лет числилась устаревшей, а в свежих версиях apt (Debian 13, актуальные Ubuntu) её уже нет. Главная претензия к ней в том, что ключ попадал в общее хранилище и мог подписывать любой репозиторий в системе. Современная схема: каждый ключ лежит отдельным файлом, и в описании репозитория прямо указано, каким ключом он подписан.

Пример для стороннего репозитория. Каталог /etc/apt/keyrings предназначен как раз для ключей, которые администратор добавляет вручную:

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://example.org/repo-key.asc | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg

Затем файл источника /etc/apt/sources.list.d/example.sources:

Types: deb
URIs: https://example.org/apt
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/example.gpg

Ключ в текстовом виде с расширением .asc современный apt тоже понимает, конвертировать через gpg не обязательно. Адрес ключа берите только с официального сайта проекта. Чтобы отключить репозиторий, удалите или переименуйте его .sources, затем удалите файл ключа и выполните sudo apt update.

Ошибка NO_PUBKEY или The following signatures couldn't be verified после apt update почти всегда значит, что ключ репозитория сменился или не указан в Signed-By. Скачайте свежий ключ с сайта проекта по той же схеме и не поддавайтесь соблазну дописать trusted=yes: такой флаг отключает проверку подписи целиком.

Типовые ошибки apt и как их чинить

Could not get lock /var/lib/dpkg/lock-frontend

Пакетами уже занимается другой процесс: Центр приложений, автоматические обновления (unattended-upgrades) или второй терминал. Подождите пару минут и проверьте, кто держит блокировку. Удалять lock-файлы вручную нельзя, так легко получить полуустановленные пакеты.

ps aux | grep -E 'apt|dpkg' | grep -v grep

Прерванная установка и сломанные зависимости

Если пропал свет посреди обновления или вы закрыли терминал, сначала дайте dpkg закончить настройку, потом попросите apt исправить зависимости:

sudo dpkg --configure -a
sudo apt --fix-broken install

Откат обновления

Отдельной команды "отменить" у apt нет. Посмотрите, что ставилось, в журнале /var/log/apt/history.log, затем верните прежнюю версию через apt install пакет=версия, если она ещё есть в репозитории или в кэше /var/cache/apt/archives. Чтобы пакет не обновлялся, пока вы разбираетесь, заморозьте его:

sudo apt-mark hold firefox
apt-mark showhold
sudo apt-mark unhold firefox

Перед крупными изменениями проще сделать снимок системы: в Ubuntu и Mint для этого есть Timeshift. А если пакетный кэш разросся и съел диск, помогут sudo apt clean и советы из статьи как освободить место на диске.

Частые вопросы

Чем apt отличается от apt-get?

Это интерфейсы к одному и тому же APT. apt удобнее человеку: прогресс-бар, цвет, объединённые команды поиска и показа. apt-get и apt-cache стабильны по выводу и лучше подходят для скриптов.

Как удалить пакет в Ubuntu полностью, вместе с настройками?

Выполните sudo apt purge --autoremove имя_пакета. Это удалит пакет, его конфиги в /etc и ненужные зависимости. Пользовательские настройки в домашнем каталоге удалите вручную, обычно они лежат в ~/.config или ~/.local/share.

Безопасно ли запускать apt autoremove?

Обычно да, но всегда читайте список перед подтверждением. Если там нужный пакет, пометьте его командой sudo apt-mark manual имя, и autoremove его больше не предложит.

Почему apt пишет, что apt-key устарел или не найден?

Утилита apt-key выведена из употребления и в свежих версиях apt удалена. Ключ стороннего репозитория кладут отдельным файлом в /etc/apt/keyrings и указывают в поле Signed-By файла .sources.

Как узнать, какой пакет установил команду?

Используйте dpkg -S с полным путём к файлу, например dpkg -S /usr/bin/curl. Путь к команде покажет command -v имя.

Документация и источники

Читайте также

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