Программы в Linux устанавливаются из репозиториев с помощью пакетного менеджера. Он сам скачивает пакет, ставит зависимости, обновляет и удаляет программы. В разных семействах дистрибутивов менеджеры разные, но задачи у них одни и те же. Разберём три основных:

Команды проверены для Ubuntu 22.04/24.04, Debian 12/13, Fedora 41 и новее (DNF5), RHEL 9/10 и родственных (DNF 4) и Arch Linux.

  • APT - Debian, Ubuntu, Linux Mint и производные, пакеты .deb;
  • DNF - Fedora, RHEL, Rocky Linux, AlmaLinux, CentOS Stream, пакеты .rpm. Он заменил YUM: в современных системах команда yum - просто ссылка на dnf, а старые инструкции с yum работают с теми же ключами;
  • Pacman - Arch Linux, Manjaro и производные.

Все команды, которые что-то меняют, выполняются через sudo.

Сравнительная таблица

Три разные коробки, под каждой значки установить, обновить, удалить

Задача APT DNF Pacman
Обновить список пакетов apt update dnf check-update pacman -Sy
Обновить систему apt upgrade dnf upgrade pacman -Syu
Установить apt install пакет dnf install пакет pacman -S пакет
Удалить apt remove пакет dnf remove пакет pacman -R пакет
Удалить с настройками и зависимостями apt purge пакет, apt autoremove dnf remove пакет, dnf autoremove pacman -Rns пакет
Поиск apt search слово dnf search слово pacman -Ss слово
Информация о пакете apt show пакет dnf info пакет pacman -Si пакет
Установленные пакеты apt list --installed dnf list --installed pacman -Q
Файлы пакета dpkg -L пакет rpm -ql пакет pacman -Ql пакет
Какому пакету принадлежит файл dpkg -S /путь rpm -qf /путь pacman -Qo /путь
Какой пакет даёт команду или файл apt-file search имя dnf provides имя pacman -F имя
Установить локальный файл apt install ./файл.deb dnf install ./файл.rpm pacman -U файл.pkg.tar.zst
Очистить кэш apt clean dnf clean all pacman -Sc

APT

bash
sudo apt update               # обновить списки пакетов из репозиториев
sudo apt upgrade              # обновить установленные пакеты
sudo apt full-upgrade         # обновить с удалением и заменой пакетов, если нужно
sudo apt install nginx curl   # установить несколько пакетов
sudo apt remove nginx         # удалить, оставив настройки
sudo apt purge nginx          # удалить вместе с настройками
sudo apt autoremove           # удалить зависимости, которые больше не нужны
apt search "web server"
apt show nginx
apt list --upgradable         # что можно обновить
apt-cache policy nginx        # установленная и доступные версии, из каких репозиториев

apt update нужно запускать перед установкой и обновлением, иначе APT будет искать пакеты по устаревшим спискам.

Установить конкретную версию: sudo apt install nginx=<версия> (список версий показывает apt-cache policy).

Запретить обновление пакета:

bash
sudo apt-mark hold nginx
sudo apt-mark unhold nginx
apt-mark showhold

Репозитории описаны в /etc/apt/sources.list и файлах в /etc/apt/sources.list.d/ (в новых выпусках - в формате .sources). Ключи сторонних репозиториев кладут в /etc/apt/keyrings/ и указывают в описании репозитория параметром signed-by.

Низкоуровневый инструмент - dpkg: работает с отдельными файлами .deb и не разрешает зависимости. Если после dpkg -i не хватает зависимостей, выполните sudo apt -f install, но проще сразу ставить файл через apt install ./файл.deb.

DNF

bash
sudo dnf check-update         # какие обновления доступны
sudo dnf upgrade              # обновить систему
sudo dnf install nginx
sudo dnf remove nginx
sudo dnf autoremove
dnf search nginx
dnf info nginx
dnf list --installed
dnf provides /usr/bin/dig     # какой пакет даёт файл
dnf repolist                  # подключённые репозитории

У DNF есть группы пакетов - наборы программ для определённой задачи:

bash
dnf group list
sudo dnf group install "Development Tools"

История и откат

DNF записывает каждую операцию и умеет её отменить:

bash
dnf history                   # список операций
dnf history info 42           # что было сделано в операции 42
sudo dnf history undo 42      # отменить её

Это удобно, если обновление что-то сломало.

Закрепление версии

bash
sudo dnf install 'dnf-command(versionlock)'
sudo dnf versionlock add nginx
sudo dnf versionlock list
sudo dnf versionlock delete nginx

В новых версиях DNF (DNF5) команда versionlock встроена, и первую строку можно пропустить. Можно и просто исключить пакет из обновлений параметром exclude=nginx* в /etc/dnf/dnf.conf.

Репозитории

Описания репозиториев лежат в /etc/yum.repos.d/ (название папки сохранилось со времён YUM). Подключить и отключить репозиторий:

bash
sudo dnf config-manager --set-enabled crb
sudo dnf config-manager --set-disabled имя

В DNF5 синтаксис другой: sudo dnf config-manager setopt crb.enabled=1. DNF5 работает в Fedora 41 и новее, а в RHEL 9 и 10 и родственных пока DNF 4. Какая версия у вас, покажет dnf --version.

В RHEL и родственных дистрибутивах многие популярные программы находятся в дополнительном репозитории EPEL: sudo dnf install epel-release.

Низкоуровневый инструмент - rpm: rpm -qa (все пакеты), rpm -qi пакет (информация), rpm -ql пакет (файлы), rpm -qf /путь (чей файл).

Pacman

У Pacman короткие ключи: -S - синхронизация с репозиторием (установка), -R - удаление, -Q - запросы к установленным пакетам.

bash
sudo pacman -Syu              # обновить систему целиком
sudo pacman -S nginx          # установить
sudo pacman -Rns nginx        # удалить вместе с ненужными зависимостями и настройками
pacman -Ss nginx              # искать в репозиториях
pacman -Qs nginx              # искать среди установленных
pacman -Qi nginx              # информация об установленном пакете
pacman -Qdt                   # «сироты» - зависимости, которые больше не нужны
sudo pacman -Rns $(pacman -Qdtq)  # удалить всех «сирот»

В Arch не делают частичных обновлений: не ставьте новые пакеты командой pacman -Sy пакет без полного обновления системы. Правильно - pacman -Syu пакет или сначала pacman -Syu.

Закрепить пакет от обновления - параметр IgnorePkg = nginx в /etc/pacman.conf.

Программы из пользовательского репозитория AUR ставятся отдельно, сборкой из исходников через makepkg или помощниками AUR. Пакеты в AUR не проверяются разработчиками Arch, поэтому перед установкой стоит прочитать файл сборки PKGBUILD.

Другие менеджеры и универсальные форматы

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

  • Zypper - openSUSE: zypper refresh, zypper update, zypper install, zypper remove, zypper search.
  • APK - Alpine Linux, популярен в контейнерах: apk update, apk add, apk del.
  • Flatpak и Snap - универсальные форматы, которые работают в разных дистрибутивах и содержат программу вместе с зависимостями. Удобны для настольных программ, когда нужна версия новее, чем в репозитории дистрибутива. Обновляются отдельно: flatpak update, snap refresh.