Пакетные менеджеры apt и apt-get
Введение
В этой статье мы рассмотрим следующие утилиты:
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.
Список рассмотренных команд:
| Действие | apt | apt-get / apt-cache / apt-mark |
|---|---|---|
| Обновление индексов | apt update | apt-get update |
| Список пакетов | apt list | |
| Список доступных обновлений | apt list --upgradable | |
| Список установленных пакетов | apt list --installed | |
| Список пакетов с фильтрацией | apt list '*apache*' | |
| Установка обновлений | apt upgrade | apt-get upgrade |
| Установка обновлений полное | apt full-upgrade | apt-get dist-upgrade |
| Поиск пакета | apt search apache | apt-cache search apache |
| Информация о пакете | apt show apache2 | apt-cache show apache2 |
| Зависимости пакета | apt depends apache2 | apt-cache depends apache2 |
| Установленная и доступная версии пакета | apt policy apache2 | apt-cache policy apache2 |
| Установка пакета | apt install apache2 | apt-get install apache2 |
| Установка локального пакета | apt install ./exmpl.deb | apt-get install ./exmpl.deb |
| Удаление пакета | apt remove apache2 | apt-get remove apache2<br> |
| Удаление с конфигами | apt purge apache2 | apt-get purge apache2 |
| Переустановка пакета | apt install --reinstall apache2 | apt-get install --reinstall apache2 |
| Обновление пакета | apt install --only-upgrade apache2 | pt-get install --only-upgrade apache2 |
| Скачивание пакета | apt download apache2 | apt-get download apache2 |
| Заморозка пакета | apt-mark hold apache2 | |
| Разморозка пакета | apt-mark unhold apache2 | |
| Список замороженных пакетов | apt-mark showhold | |
| Исправление ошибок | apt -f install | apt-get -f install |
| Очистка от ненужных пакетов | apt autoremove | apt-get autoremove |
| Очистка кеша | apt clean | apt-get clean |
| Мягкая очистка кеша | apt autoclean | apt-get autoclean |
Если понравилась статья, подпишись на мой канал в VK или Telegram .