apt vs yum: Управление пакетами Linux для системных администраторов
Управление пакетами Linux — это механизм, с помощью которого программное обеспечение устанавливается, обновляется, настраивается и удаляется в системе Linux. apt (Advanced Package Tool) управляет пакетами `.deb` в дистрибутивах на основе Debian, таких как Ubuntu и Linux Mint, тогда как yum (Yellowdog Updater Modified) управляет пакетами `.rpm` в системах на основе Red Hat, включая CentOS и RHEL. Оба инструмента абстрагируют сложность разрешения зависимостей, взаимодействия с репозиторием и проверки целостности пакетов — однако они архитектурно различны и не взаимозаменяемы.
Понимание того, какой инструмент управляет вашей системой, — это не опциональные знания. Это напрямую влияет на то, как вы подготавливаете серверы, автоматизируете развёртывания, пишете скрипты управления конфигурацией (Ansible, Chef, Puppet) и поддерживаете циклы применения патчей безопасности в производственных средах.
Что такое менеджер пакетов Linux
Менеджер пакетов — это набор программных инструментов, автоматизирующих полный жизненный цикл программного обеспечения в системе Linux: получение пакетов из удалённых репозиториев, проверку криптографических подписей, разрешение и установку цепочек зависимостей, выполнение скриптов до/после установки и регистрацию установки в локальной базе данных пакетов.
База данных пакетов критически важна и нередко остаётся без внимания. В системах на основе Debian она находится по адресу `/var/lib/dpkg/`. В системах на основе RPM она располагается в `/var/lib/rpm/`. Обе базы данных хранят авторитетную запись о том, что установлено, в какой версии и с каким владельцем файлов — что делает их основой аудита системы и операций отката.
Менеджеры пакетов взаимодействуют с репозиториями — удалёнными серверами, хранящими курируемые коллекции скомпилированных, подписанных пакетов. Метаданные репозитория (списки пакетов, контрольные суммы, GPG-ключи) синхронизируются локально перед любой установкой, именно поэтому `apt update` или `yum check-update` должны предшествовать командам установки в автоматизированных скриптах.
apt: Advanced Package Tool для систем на основе Debian
apt — это высокоуровневый интерфейс командной строки для управления пакетами в Debian, Ubuntu, Linux Mint, Pop!_OS и всех производных дистрибутивах. Он работает поверх низкоуровневого инструмента `dpkg`, который выполняет фактическую установку пакетов `.deb`. Думайте о `dpkg` как о двигателе, а о `apt` — как об умном водителе, который знает, где заправиться и в каком порядке сжигать топливо.
Инструментарий apt в деталях
Экосистема apt включает несколько исполняемых файлов, выполняющих различные функции:
- `apt` — современный рекомендуемый интерактивный CLI (представлен в Ubuntu 14.04 / Debian 8)
- `apt-get` — более старый, скриптуемый бэкенд; предпочтителен в shell-скриптах благодаря стабильному формату вывода
- `apt-cache` — запрашивает локальный кэш пакетов для получения метаданных, описаний и графов зависимостей
- `dpkg` — низкоуровневый установщик пакетов; используется напрямую при установке локального файла `.deb` с помощью `dpkg -i package.deb`
- `apt-mark` — помечает пакеты как удерживаемые, автоматически установленные или установленные вручную
Основные команды apt с техническим контекстом
Обновление локального индекса пакетов:
“`bash
sudo apt update
“`
Это получает обновлённые метаданные из всех настроенных репозиториев в `/etc/apt/sources.list` и `/etc/apt/sources.list.d/`. Команда не устанавливает и не обновляет ничего. Выполнение этой команды перед любой операцией установки обязательно — пропуск означает, что вы можете разрешить устаревшие версии пакетов или пропустить патчи безопасности.
Обновление установленных пакетов:
“`bash
sudo apt upgrade
“`
Обновляет все пакеты, для которых существует более новая версия, но не удаляет ни один из установленных пакетов и не устанавливает новый пакет для удовлетворения зависимости. Для более агрессивного обновления, учитывающего изменения зависимостей:
“`bash
sudo apt full-upgrade
“`
`full-upgrade` (ранее `dist-upgrade`) при необходимости установит новые зависимости и удалит конфликтующие пакеты. Используйте с осторожностью на производственных системах.
Установка пакета:
“`bash
sudo apt install package_name
“`
Для установки нескольких пакетов в одной транзакции:
“`bash
sudo apt install nginx curl git
“`
Объединение установок в одну команду более эффективно, поскольку apt разрешает полный граф зависимостей один раз, а не многократно.
Удаление пакета (с сохранением файлов конфигурации):
“`bash
sudo apt remove package_name
“`
Полное удаление пакета (удаление бинарных файлов и файлов конфигурации):
“`bash
sudo apt purge package_name
“`
Всегда предпочитайте `purge` вместо `remove` при выводе службы из эксплуатации. Оставшиеся файлы конфигурации после `remove` могут вызвать непредвиденное поведение при повторной установке пакета.
Удаление осиротевших зависимостей:
“`bash
sudo apt autoremove
“`
Это часто игнорируется и со временем приводит к раздуванию зависимостей. Включите эту команду в свой регулярный рабочий процесс обслуживания.
Поиск пакета:
“`bash
apt search package_name
“`
Просмотр сведений о пакете перед установкой:
“`bash
apt show package_name
“`
Это показывает версию пакета, размер после установки, зависимости и сопровождающего — полезно перед установкой незнакомого пакета.
Удержание пакета на текущей версии (критично для стабильности производственной среды):
“`bash
sudo apt-mark hold package_name
“`
Это предотвращает изменение пакета командой `apt upgrade`. Необходимо, когда вы используете конкретную версию ядра или зафиксированный релиз приложения.
Реальный пример использования apt: подготовка веб-сервера на Ubuntu
“`bash
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
sudo systemctl enable nginx
sudo systemctl start nginx
“`
Флаг `-y` подавляет запрос подтверждения, что необходимо для неинтерактивных скриптов подготовки. Всегда сочетайте его с `apt update` в том же блоке скрипта, чтобы гарантировать установку из актуальных метаданных репозитория.
yum: Yellowdog Updater Modified для систем на основе RPM
yum — это менеджер пакетов для Red Hat Enterprise Linux (RHEL), CentOS 7 и более старых релизов Fedora. Он управляет пакетами `.rpm` и работает поверх базы данных RPM. Подобно apt над dpkg, yum обеспечивает разрешение зависимостей и управление репозиторием поверх низкоуровневой команды `rpm`.
Важное архитектурное замечание: В CentOS 8+, RHEL 8+ и всех современных релизах Fedora yum был заменён dnf (Dandified YUM). В этих системах команда `yum` обычно является символической ссылкой или псевдонимом для `dnf`. Если вы управляете любой системой под управлением RHEL/CentOS 8 или более поздней версии, вам следует использовать команды `dnf`. Синтаксис команд в основном совместим, но dnf предлагает значительно лучшее разрешение зависимостей, более чистый API и поддержку модульных репозиториев.
Основные команды yum с техническим контекстом
Проверка доступных обновлений без их применения:
“`bash
sudo yum check-update
“`
Это особенно полезно в автоматизированных скриптах мониторинга для обнаружения отставания системы в применении патчей без запуска обновления.
Применение всех доступных обновлений:
“`bash
sudo yum update
“`
В отличие от `apt upgrade`, команда `yum update` также установит новые пакеты зависимостей по мере необходимости. Отдельного эквивалента `full-upgrade` не существует — yum обрабатывает это по умолчанию.
Установка пакета:
“`bash
sudo yum install package_name
“`
Удаление пакета:
“`bash
sudo yum remove package_name
“`
Примечание: операция удаления в yum иногда может каскадно удалять зависимые пакеты. Всегда просматривайте сводку транзакции перед подтверждением.
Поиск пакета:
“`bash
yum search package_name
“`
Просмотр информации о пакете:
“`bash
yum info package_name
“`
Список установленных пакетов:
“`bash
yum list installed
“`
Очистка локального кэша:
“`bash
sudo yum clean all
“`
Очищает кэшированные данные пакетов и метаданные. Выполняйте эту команду, когда подозреваете, что устаревшие данные репозитория вызывают сбои разрешения зависимостей.
Удержание пакета на текущей версии:
“`bash
sudo yum versionlock add package_name
“`
Требует плагин `yum-plugin-versionlock`. Эквивалент `apt-mark hold`, эта команда необходима для поддержания стабильных производственных сред, где конкретная версия пакета не должна затрагиваться автоматическими обновлениями.
Реальный пример использования yum: развёртывание Apache на CentOS 7
“`bash
sudo yum install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd
sudo firewall-cmd –permanent –add-service=http
sudo firewall-cmd –reload
“`
Распространённая ошибка — установить Apache и забыть открыть брандмауэр. В системах CentOS/RHEL `firewalld` активен по умолчанию и будет молча блокировать HTTP-трафик, даже если служба запущена.
apt против yum: прямое сравнение
| Функция | apt (Debian/Ubuntu) | yum / dnf (RHEL/CentOS/Fedora) |
|---|
| — | — | — |
|---|
| Формат пакета | `.deb` | `.rpm` |
|---|
| Базовый инструмент | `dpkg` | `rpm` |
|---|
| Основные дистрибутивы | Debian, Ubuntu, Mint, Pop!_OS | RHEL, CentOS, Fedora, AlmaLinux, Rocky Linux |
|---|
| Преемник / современный CLI | `apt` (заменил `apt-get` для интерактивного использования) | `dnf` (заменил `yum` в RHEL 8+) |
|---|
| Разрешение зависимостей | Автоматическое, обрабатывает конфликты | Автоматическое; dnf более надёжен, чем yum |
|---|
| Настройка репозитория | `/etc/apt/sources.list`, `/etc/apt/sources.list.d/` | `/etc/yum.repos.d/*.repo` |
|---|
| Механизм удержания пакетов | `apt-mark hold` | `yum versionlock` (требуется плагин) |
|---|
| Установка локального пакета | `dpkg -i file.deb` | `rpm -i file.rpm` или `yum localinstall` |
|---|
| Управление кэшем | `apt clean`, `apt autoclean` | `yum clean all` |
|---|
| Удаление осиротевших пакетов | `apt autoremove` | `yum autoremove` (dnf справляется лучше) |
|---|
| История транзакций | Ограниченная | Полная история транзакций с откатом через `yum history` |
|---|
| Потоки модулей | Не поддерживается нативно | Поддерживается в dnf (Application Streams) |
|---|
| Проверка GPG-подписи | Да | Да |
|---|
| Флаг для скриптов | `-y` (неинтерактивный) | `-y` (неинтерактивный) |
|---|
dnf: современный преемник yum
Если вы управляете любой системой RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux или Fedora, dnf — ваш менеджер пакетов. Переход с yum на dnf не является косметическим — dnf решает ряд давних архитектурных проблем yum:
- Разрешение зависимостей: dnf использует библиотеку `libsolv`, которая значительно быстрее и точнее, чем резолвер yum
- Стабильность API: dnf предоставляет стабильный Python API для скриптинга и автоматизации
- Потоки модулей: dnf поддерживает Application Streams, позволяя нескольким версиям одного программного обеспечения (например, PHP 7.4 и PHP 8.1) сосуществовать в репозиториях
- Откат транзакций: `dnf history undo <id>` позволяет откатить конкретную транзакцию — возможность, не имеющая прямого эквивалента в apt
Ключевые команды dnf, отличающиеся от yum:
“`bash
Install a module stream (e.g., PHP 8.1)
sudo dnf module enable php:8.1
sudo dnf install php
Roll back the last transaction
sudo dnf history undo last
Check which package provides a specific file
sudo dnf provides /usr/bin/python3
“`
Управление репозиториями: критически важный операционный навык
Как apt, так и yum/dnf полезны ровно настолько, насколько полезны настроенные для них репозитории. Неправильно настроенные или ненадёжные репозитории представляют значительный риск безопасности.
В Debian/Ubuntu безопасное добавление стороннего репозитория:
“`bash
Import the GPG key
curl -fsSL https://example.com/gpg.key | sudo gpg –dearmor -o /usr/share/keyrings/example-archive-keyring.gpg
Add the repository with key reference
echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list
sudo apt update
“`
В RHEL/CentOS добавление репозитория:
“`bash
sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo
Or manually create /etc/yum.repos.d/example.repo
“`
Принцип безопасности: никогда не добавляйте репозиторий без независимой проверки его GPG-ключа. Скомпрометированный репозиторий может распространять вредоносные пакеты, которые будут установлены с правами root.
Выбор подходящего менеджера пакетов для вашей серверной среды
Используемый менеджер пакетов определяется вашим дистрибутивом Linux — вы не выбираете apt или yum независимо. Вы выбираете дистрибутив, и это решение имеет последствия для доступности пакетов, корпоративных контрактов поддержки, периодичности применения патчей безопасности и совместимости инструментов.
- Ubuntu LTS (apt): лучший выбор для универсальных рабочих нагрузок VPS Хостинга, веб-серверов и сред разработки. Релизы с долгосрочной поддержкой получают обновления безопасности в течение 5 лет, расширяемые до 10 с Ubuntu Pro.
- RHEL / AlmaLinux / Rocky Linux (dnf): стандарт для корпоративных производственных сред, особенно при работе на Выделенных серверах, требующих сертифицированных программных стеков, фреймворков соответствия требованиям (PCI-DSS, HIPAA) или развёртываний приложений с поддержкой ISV.
- Debian Stable (apt): крайне консервативные версии пакетов, что делает его идеальным для серверов, где стабильность важнее новейшего программного обеспечения. Широко используется для долго работающих серверов баз данных и почтовых серверов.
- CentOS Stream / Fedora (dnf): подходит для сред разработки и тестирования, где вы хотите отслеживать изменения upstream RHEL до их появления в стабильных релизах.
При развёртывании панели управления, такой как cPanel, базовый менеджер пакетов имеет существенное значение. cPanel официально поддерживает AlmaLinux, Rocky Linux и CloudLinux — все на основе dnf. Если вы используете VPS с cPanel, вы будете работать в среде dnf при современных развёртываниях.
Для сред, где вам нужен графический или веб-интерфейс для управления пакетами и конфигурацией сервера без использования командной строки, изучите Панели управления VPS, которые абстрагируют управление пакетами в пользовательский интерфейс, по-прежнему используя apt или dnf под капотом.
Усиление безопасности через управление пакетами
Менеджеры пакетов являются основной поверхностью атаки для атак на цепочку поставок. Следующие практики обязательны для любого сервера, доступного из интернета:
- Включите автоматические обновления безопасности — В Ubuntu: пакет `unattended-upgrades`. В RHEL/CentOS: `dnf-automatic` с `apply_updates = yes` в `/etc/dnf/automatic.conf`.
- Проверяйте GPG-подписи — никогда не отключайте проверку GPG (`–nogpgcheck` в yum/dnf или `–allow-unauthenticated` в apt) за пределами изолированных лабораторных сред.
- Регулярно проверяйте установленные пакеты — используйте `dpkg -l` или `rpm -qa` для создания полного манифеста пакетов. Сравнивайте его с известным эталонным состоянием.
- Удаляйте ненужные пакеты — каждый установленный пакет является поверхностью атаки. Выполняйте `apt autoremove` или `dnf autoremove` после крупных развёртываний.
- Фиксируйте критические пакеты — используйте `apt-mark hold` или `dnf versionlock` для предотвращения непреднамеренных обновлений таких пакетов, как ядро, OpenSSL или движки баз данных на производственных системах.
Если вы управляете почтовым сервером или хостингом почтовой инфраструктуры, особенно важно поддерживать актуальность таких пакетов, как Postfix, Dovecot и их TLS-зависимости. Сочетайте строгое управление пакетами с правильно настроенными SSL-сертификатами для поддержания безопасности зашифрованного транспорта. Аналогично, среды веб-хостинга, управляемые через платформы Общего веб-хостинга, выигрывают от того, что хостинг-провайдер поддерживает безопасность базовых пакетов, однако понимание уровня пакетов остаётся ценным для отладки и пользовательской настройки.
Практическая матрица принятия решений и ключевые выводы
Перед выполнением любой команды управления пакетами на производственной системе пройдите этот контрольный список:
Контрольный список перед операцией:
- Подтвердите, какой дистрибутив и версию вы используете: `cat /etc/os-release`
- Подтвердите правильный менеджер пакетов: `which apt` или `which dnf` или `which yum`
- В системах apt: всегда выполняйте `sudo apt update` перед `apt install` или `apt upgrade`
- В системах yum/dnf: `sudo yum check-update` или `sudo dnf check-update` перед обновлениями
- Просматривайте сводку транзакции перед подтверждением любой операции установки или удаления
- Для производственных серверов: сначала тестируйте обновления пакетов в тестовой среде
- После крупных обновлений: проверяйте статус служб с помощью `systemctl status <service>`
- После удаления пакетов: выполняйте `apt autoremove` или `dnf autoremove` для очистки осиротевших пакетов
Архитектурные решения:
- Используйте `apt full-upgrade` вместо `apt upgrade` только тогда, когда вы понимаете и принимаете возможность удаления пакетов
- Используйте `dnf` вместо `yum` в любой системе под управлением RHEL 8 / CentOS 8 или более поздней версии
- Используйте `apt-get` (не `apt`) в shell-скриптах и CI/CD-пайплайнах для стабильного, разбираемого вывода
- Используйте `yum versionlock` или `apt-mark hold` перед тем, как любой автоматизированный пайплайн обновления затронет производственный сервер
- Никогда не добавляйте сторонние репозитории без импорта и проверки их GPG-ключей
FAQ
В чём разница между apt и apt-get?
`apt` — это современная пользовательская команда, введённая для объединения `apt-get` и `apt-cache` в единый инструмент с более чистым выводом и индикатором прогресса. `apt-get` по-прежнему доступен и предпочтителен в скриптах, поскольку его формат вывода гарантированно стабилен между версиями. Для интерактивного использования в терминале `apt` является текущим стандартом.
Могу ли я использовать apt на сервере CentOS или RHEL?
Нет. apt предназначен исключительно для систем на основе Debian и управляет пакетами `.deb`. CentOS и RHEL используют формат пакетов RPM, управляемый yum или dnf. Форматы пакетов и базы данных архитектурно несовместимы — слоя конвертации не существует.
Что является эквивалентом apt autoremove в yum?
`sudo yum autoremove` или `sudo dnf autoremove` удаляет пакеты, которые были установлены как зависимости, но больше не требуются ни одним явно установленным пакетом. Реализация в dnf более надёжна, чем в устаревшей версии yum.
Как предотвратить обновление конкретного пакета через apt или yum?
В системах на основе apt: `sudo apt-mark hold package_name`. В системах yum/dnf: установите плагин `yum-plugin-versionlock` и выполните `sudo yum versionlock add package_name`, или в dnf: `sudo dnf versionlock add package_name`. Оба механизма сохраняются при выполнении команд `upgrade` и `update` до явного снятия удержания.
Актуален ли yum в 2024 году?
Для систем CentOS 7 и RHEL 7, всё ещё находящихся в производстве, — да, yum остаётся менеджером пакетов. Однако CentOS 7 достиг конца срока поддержки в июне 2024 года. Любая система, всё ещё работающая на CentOS 7, должна быть перенесена на AlmaLinux 8/9 или Rocky Linux 8/9, оба из которых используют dnf. Написание новых скриптов автоматизации, ориентированных исключительно на yum, больше не рекомендуется.
