Пакетные менеджеры apt и apt-get

В этой статье мы рассмотрим пакетные менеджеры apt и apt-get, которые используются для работы с пакетами приложений в Debian, Ubuntu, Linux Mint и других Linux-дистрибутивах на базе Debian.

Введение

В этой статье мы рассмотрим следующие утилиты:

  • apt-get — используется для установки, удаления и обновления пакетов.
  • apt-cache — используется для получения информации о пакетах.
  • apt-mark — используется для установки меток на пакеты. Например, можно, поставив метку, запретить пакету обновляться.
  • apt — более современная и удобная утилита для ручной работы в терминале.

Утилита apt создана для интерактивной работы, у неё нет стабильного CLI. В скриптах лучше использовать apt-get и apt-cache.

Обе утилиты и apt, и apt-get для установки и удаления пакетов используют низкоуровневый пакетный менеджер dpkg, про который я писал здесь .

Примеры из статьи выполнялись на Debian 13 и должны аналогично работать в Ubuntu 26.04. Работа с пакетами — это административное действие, поэтому вам придётся работать от имени пользователя root или использовать sudo. Я в примерах буду использовать sudo.

Все рассматриваемые команды имеют подкоманды, и в зависимости от подкоманды могут иметь различные опции. Например, переустановка приложения:

sudo apt install --reinstall apache2
  • apt — утилита.
  • install — подкоманда установки пакета.
  • --reinstall — опция переустановки.
  • apache2 — имя пакета.

Обновление системы

Обновление списка пакетов (индексов)

В Debian и Ubuntu, прежде чем обновлять систему, нужно выяснить, какие обновления доступны в репозиториях, то есть обновить список пакетов с помощью команды apt-get update или apt update.

sudo apt-get update
sudo apt update

При этом команда apt update дополнительно покажет количество пакетов, которые можно обновить, и команду, с помощью которой можно посмотреть список таких пакетов.

Просмотр списка доступных обновлений

Если есть пакеты, которые можно обновить, то мы можем посмотреть их с помощью команды apt list --upgradable. Для apt-get нет прямого аналога.

apt list --upgradable

Можно добавить опцию -a, чтобы увидеть все доступные версии.

Установка обновлений

Перед обновлением расскажу про зависимости пакетов. Работа некоторых приложений зависит от других приложений или библиотек. Поэтому почти каждый пакет имеет список зависимостей других пакетов. Обычно вручную с зависимостями не работают. Утилиты (apt или apt-get) при установке определённого пакета также устанавливают все необходимые зависимости.

Точно так же и при обновлении. Если приложение после обновления начало зависеть от других пакетов, то их тоже нужно установить или обновить.

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

Без возможности удаления пакетов (мешающих обновлению) вы можете выполнить обновление с помощью команд apt-get upgrade и apt upgrade, при этом они немного различаются.

sudo apt-get upgrade  # никогда не удаляет пакеты и не ставит новые
sudo apt upgrade  # может доустанавливать новые пакеты, но тоже ничего не удаляет

Если для обновления пакета нужно удалить другой пакет, upgrade этого не сделает: пакет останется на старой версии, а в конце вы увидите сообщение The following packages have been kept back. Если нужен новый пакет-зависимость, apt upgrade доустановит его, а apt-get upgrade — нет, поэтому у apt-get удержанных пакетов бывает больше.

Пример стандартной последовательности обновления:

sudo apt update && sudo apt upgrade

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

sudo apt-get dist-upgrade
sudo apt full-upgrade

Можно также выполнять apt dist-upgrade, что является синонимом apt full-upgrade.

Перед реальным запуском можно выполнить: sudo apt full-upgrade -s. Опция -s имитирует действие не выполняя его.

Получение информации о пакетах

Просмотр списка пакетов

Чтобы получить список пакетов в репозиториях, можно выполнить apt list, но так как список огромный, можем добавить опцию --installed, чтобы увидеть только установленные пакеты.

apt list --installed

Либо можем отфильтровать по имени пакета:

apt list '*apache*'

Кавычки нужны, чтобы шаблон *apache* дошёл до apt в исходном виде. Без кавычек bash сначала пытается раскрыть *apache* как шаблон имён файлов в текущем каталоге и, если находит подходящие файлы, подставляет вместо него их имена.

Поиск пакета по ключевому слову

Если мы примерно знаем название приложения, которое нам нужно, то можем попытаться найти пакет, используя ключевое слово. При этом поиск идёт по имени и описанию пакета. Такой поиск выполняется с помощью команд apt-cache search <ключевое слово> или apt search <ключевое слово>.

apt-cache search apache
apt search apache

Просмотр информации о пакете

Зная имя пакета, можем посмотреть информацию о нём с помощью команд apt-cache show <пакет> или apt show <пакет>.

apt-cache show apache2
apt show apache2

Поиск зависимостей

Зависимости можно посмотреть в информации о пакете с помощью уже рассмотренных команд apt-cache show <пакет> или apt show <пакет>. Но для этого есть ещё одна команда: apt-cache depends <пакет> или apt depends <пакет>.

apt-cache depends apache2
apt depends apache2

Просмотр установленной и доступной версии пакета

Можем посмотреть установленную (Installed) и доступную (Candidate) версии пакета, а также репозитории с приоритетами.

apt policy apache2
apt-cache policy apache2

Работа с отдельными пакетами

Установка

Установить пакет из репозитория можно с помощью команд apt-get install <пакет> или apt install <пакет>. При этом установится пакет и его зависимости.

sudo apt-get install apache2
sudo apt install apache2

С помощью apt локальный .deb-пакет можно установить с автоматическим разрешением зависимостей из репозиториев.

sudo apt-get install ./example.deb
sudo apt install ./example.deb

Обязательно используйте ./, иначе пакет будет искаться в репозиториях.

Удаление

Чтобы удалить пакет обычно используют команды apt-get remove <пакет> или apt remove <пакет>. Но эти команды удалят только само приложение, не удалив его конфиги.

sudo apt-get remove apache2
sudo apt remove apache2

А чтобы удалить приложение вместе с конфигами, используйте purge вместо remove.

sudo apt-get purge apache2
sudo apt purge apache2

Можем использовать опцию -s для имитации удаления.

Внимание: purge удаляет конфигурацию из /etc, а для некоторых пакетов (например, серверов баз данных) может удалить и данные. Перед удалением сделайте резервную копию.

Переустановка

Для переустановки используйте команды apt-get install --reinstall <пакет> или apt install --reinstall <пакет>.

sudo apt-get install --reinstall apache2
sudo apt install --reinstall apache2

Обновление отдельного пакета

Если нам нужно обновить не всю систему, а отдельный пакет, то тут нужно использовать знакомую команду apt-get install <пакет> или apt install <пакет>. При этом, если пакета нет в системе, то он установится, а если есть, то обновится.

sudo apt-get install apache2
sudo apt install apache2

Но можно обновить пакет так, чтобы он не устанавливался, если его нет в системе.

sudo apt-get install --only-upgrade apache2
sudo apt install --only-upgrade apache2

Скачивание пакета без установки

Если вам просто нужно скачать пакет, а не устанавливать его в систему, то используйте команду apt-get download <пакет> или apt download <пакет>.

apt-get download apache2
apt download apache2

При этом зависимости скачиваться не будут.

В Linux Mint 22.3 (на базе Ubuntu 24.04) apt download ведёт себя иначе: Mint подменяет эту подкоманду собственным скриптом, и вместо одного пакета вы получите архив с пакетом, всеми зависимостями и скриптом установки. apt-get download работает стандартно.

Заморозка пакета

Если вы хотите, чтобы система больше не обновляла какой-то отдельный пакет, то выполните apt-mark hold <пакет>.

sudo apt-mark hold apache2

К сожалению, аналога для apt нет.

Чтобы разморозить пакет (снять метку):

sudo apt-mark unhold apache2

Посмотреть список замороженных пакетов:

apt-mark showhold

Исправление ошибок с зависимостями

Если в процессе установки некоторого пакета или при обновлении всей системы вы столкнётесь с проблемой с зависимостями, то можете воспользоваться командами apt-get -f install или apt -f install. Эти команды пытаются решить проблемы с зависимостями путём удаления или установки новых пакетов.

sudo apt-get -f install
sudo apt -f install

Только внимательно смотрите на список удаляемых пакетов!

Очистка системы от ненужных пакетов

Удаление ненужных зависимостей

Когда мы устанавливаем пакет, то устанавливаются и его зависимости. А при удалении пакета зависимости остаются и больше не используются. Чтобы удалить подобные пакеты, которые установились, но больше не нужны в системе, применяются команды apt-get autoremove или apt autoremove.

sudo apt-get autoremove
sudo apt autoremove

Перед запуском посмотрите, что будет удалено: sudo apt autoremove -s.

Очистка кэша скачанных пакетов

При установке какого-нибудь пакета он вначале скачивается в каталог /var/cache/apt/archives/, а затем устанавливается в систему. Эти установочные файлы тоже можно удалять, освобождая место на диске. Для этого используйте команды apt-get clean или apt clean.

sudo apt-get clean
sudo apt clean

Помимо clean есть более мягкая команда autoclean — она удаляет файлы пакетов, которых уже нет в репозиториях (устаревшие версии).

sudo apt-get autoclean
sudo apt autoclean

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

В следующих файлах мы можем посмотреть историю установок пакетов:

  • /var/log/apt/history.log — действия apt
  • /var/log/dpkg.log — действия dpkg

Смотрим на корову 🙂

А ещё с помощью apt-get и apt мы можем посмотреть на корову:

apt moo
apt-get moo

Вывод у обеих команд одинаковый:

                 (__)
                 (oo)
           /------\/
          / |    ||
         *  /\---/\
            ~~   ~~
..."Have you mooed today?"...

Итог

В статье мы разобрали основные операции с пакетами в Debian и Ubuntu. Для ручной работы удобнее apt, в скриптах лучше использовать apt-get и apt-cache. Перед рискованными действиями (purge, full-upgrade, autoremove, -f install) внимательно читайте список изменений. Скачанные пакеты хранятся в /var/cache/apt/archives/, а историю установок можно посмотреть в /var/log/apt/history.log.

Список рассмотренных команд:

Действиеaptapt-get / apt-cache / apt-mark
Обновление индексовapt updateapt-get update
Список пакетовapt list
Список доступных обновленийapt list --upgradable
Список установленных пакетовapt list --installed
Список пакетов с фильтрациейapt list '*apache*'
Установка обновленийapt upgradeapt-get upgrade
Установка обновлений полноеapt full-upgradeapt-get dist-upgrade
Поиск пакетаapt search apacheapt-cache search apache
Информация о пакетеapt show apache2apt-cache show apache2
Зависимости пакетаapt depends apache2apt-cache depends apache2
Установленная и доступная версии пакетаapt policy apache2apt-cache policy apache2
Установка пакетаapt install apache2apt-get install apache2
Установка локального пакетаapt install ./exmpl.debapt-get install ./exmpl.deb
Удаление пакетаapt remove apache2apt-get remove apache2<br>
Удаление с конфигамиapt purge apache2apt-get purge apache2
Переустановка пакетаapt install --reinstall apache2apt-get install --reinstall apache2
Обновление пакетаapt install --only-upgrade apache2pt-get install --only-upgrade apache2
Скачивание пакетаapt download apache2apt-get download apache2
Заморозка пакетаapt-mark hold apache2
Разморозка пакетаapt-mark unhold apache2
Список замороженных пакетовapt-mark showhold
Исправление ошибокapt -f installapt-get -f install
Очистка от ненужных пакетовapt autoremoveapt-get autoremove
Очистка кешаapt cleanapt-get clean
Мягкая очистка кешаapt autocleanapt-get autoclean

Если понравилась статья, подпишись на мой канал в  VK  или  Telegram .