Пакетные менеджеры Linux
Пакетный менеджер устанавливает, обновляет и удаляет программы, получает их из репозиториев, проверяет подписи и автоматически разрешает зависимости.
| Дистрибутивы | Менеджер | Формат |
|---|---|---|
| Debian, Ubuntu, Linux Mint | apt |
.deb |
| Fedora, RHEL и совместимые | dnf |
.rpm |
| Старые CentOS/RHEL | yum |
.rpm |
| Arch Linux, Manjaro | pacman |
.pkg.tar.zst |
Определить дистрибутив:
cat /etc/os-releaseСистемные операции обычно требуют sudo.
Основные понятия
Пакет — архив с программой, библиотекой или данными и метаинформацией: версией, архитектурой, зависимостями, списком файлов и сценариями установки.
Репозиторий — источник пакетов и их метаданных. Он может находиться в интернете, локальной сети или на диске.
Зависимость — пакет или возможность, необходимые другой программе. Высокоуровневые менеджеры обычно устанавливают зависимости автоматически.
Менеджер ведёт локальную базу установленных пакетов. Системные файлы программ не следует вручную удалять или заменять в обход этой базы.
apt: Debian и Ubuntu
apt — высокоуровневый интерфейс для .deb-пакетов. На низком уровне с ними работает dpkg.
Обновление индексов
sudo apt updateКоманда загружает сведения о доступных версиях, но не обновляет сами программы.
Установка
sudo apt install nginx
sudo apt install git curl makeПереустановка:
sudo apt reinstall nginxОбновление
sudo apt update
sudo apt upgradeПолное обновление с возможным изменением состава зависимостей:
sudo apt full-upgradeПеред подтверждением нужно проверить, какие пакеты будут удалены или установлены.
Удаление
sudo apt remove nginxremove обычно сохраняет системные конфигурационные файлы пакета. Удаление вместе с ними:
sudo apt purge nginxПользовательские настройки в домашнем каталоге обычно не удаляются.
Ненужные автоматические зависимости:
sudo apt autoremoveПредварительный просмотр:
apt --simulate autoremoveПоиск и информация
apt search nginx
apt show nginx
apt policy nginx
apt list --installed
apt list --upgradableapt policy показывает установленную и доступные версии, а также приоритеты источников.
Локальный .deb
Рекомендуемый способ, разрешающий зависимости:
sudo apt install ./package.debНизкоуровневая установка:
sudo dpkg -i package.deb
sudo apt --fix-broken installКоманды dpkg
dpkg -l # установленные пакеты
dpkg -s nginx # сведения о пакете
dpkg -L nginx # файлы пакета
dpkg -S /usr/sbin/nginx # владелец файла
dpkg-deb -c package.deb # содержимое файла .debОчистка кэша
sudo apt autoclean # удалить устаревшие файлы
sudo apt clean # очистить кэш загруженных пакетовdnf: Fedora, RHEL и совместимые системы
dnf — высокоуровневый менеджер RPM-пакетов.
Основные операции
sudo dnf makecache # обновить метаданные
sudo dnf install nginx # установить
sudo dnf upgrade # обновить систему
sudo dnf remove nginx # удалить
sudo dnf autoremove # удалить ненужные зависимостиВ некоторых системах dnf update является синонимом dnf upgrade.
Проверка обновлений без установки:
dnf check-updateНенулевой код завершения этой команды может означать, что обновления найдены, а не что произошла ошибка.
Поиск и информация
dnf search nginx
dnf info nginx
dnf list installed
dnf list --available nginx
dnf provides '*/nginx'
dnf provides /usr/bin/semanageЛокальный .rpm
sudo dnf install ./package.rpmЭто предпочтительнее прямого rpm -i, поскольку dnf разрешает зависимости через репозитории.
Группы и история
dnf group list
sudo dnf group install "Development Tools"
dnf history
dnf history info 12
sudo dnf history undo 12Возможность отмены зависит от доступности старых версий и текущего состояния системы.
Очистка кэша:
sudo dnf clean allyum
yum применялся в старых выпусках CentOS и RHEL. В современных RPM-системах команда yum часто является совместимым интерфейсом к dnf.
sudo yum install nginx
sudo yum update
sudo yum remove nginx
yum search nginx
yum info nginx
yum list installed
sudo yum clean allВ сценариях автоматизации следует учитывать версию ОС: старый yum и совместимый интерфейс поверх dnf могут вести себя по-разному.
pacman: Arch Linux
В параметрах pacman заглавная буква обозначает основную операцию:
-S— синхронизация и установка;-R— удаление;-Q— запрос к локальной базе;-F— поиск файлов в базе репозиториев.
Обновление системы
sudo pacman -SyuКоманда обновляет базы и все установленные пакеты. Arch Linux не поддерживает частичные обновления. Команда pacman -Sy без последующего полного обновления может привести к несовместимости версий.
Установка и удаление
sudo pacman -S nginx
sudo pacman -S git curl base-devel
sudo pacman -R nginx
sudo pacman -Rs nginx
sudo pacman -Rns nginx-Rудаляет пакет;-Rsтакже удаляет ставшие ненужными зависимости;-Rnsдополнительно удаляет сохранённые резервные конфигурационные файлы пакета.
Поиск и информация
pacman -Ss nginx # поиск в репозиториях
pacman -Si nginx # сведения из репозитория
pacman -Qi nginx # сведения об установленном пакете
pacman -Q # все установленные пакеты
pacman -Ql nginx # файлы пакета
pacman -Qo /usr/bin/curl # владелец файлаПоиск пакета по файлу:
sudo pacman -Fy
pacman -F bin/exampleСиротские зависимости
pacman -QdtПосле проверки списка их можно удалить:
sudo pacman -Rns $(pacman -Qdtq)Если pacman -Qdtq ничего не вывел, команду удаления запускать не нужно.
Локальный пакет и кэш
sudo pacman -U ./package.pkg.tar.zst
sudo paccache -rpaccache входит в pacman-contrib. Полная очистка pacman -Scc лишает возможности быстро использовать сохранённую старую версию.
Сравнение команд
| Операция | apt |
dnf |
yum |
pacman |
|---|---|---|---|---|
| Обновить метаданные | apt update |
dnf makecache |
yum makecache |
часть pacman -Syu |
| Обновить систему | apt upgrade |
dnf upgrade |
yum update |
pacman -Syu |
| Установить | apt install PKG |
dnf install PKG |
yum install PKG |
pacman -S PKG |
| Удалить | apt remove PKG |
dnf remove PKG |
yum remove PKG |
pacman -R PKG |
| Поиск | apt search TEXT |
dnf search TEXT |
yum search TEXT |
pacman -Ss TEXT |
| Информация | apt show PKG |
dnf info PKG |
yum info PKG |
pacman -Si PKG |
| Установленные | apt list --installed |
dnf list installed |
yum list installed |
pacman -Q |
Репозитории
Официальные репозитории обычно являются самым совместимым источником. Подключая сторонний репозиторий, пользователь разрешает его владельцу поставлять исполняемый код и обновления.
Перед подключением нужно проверить владельца, документацию для своей версии ОС, подпись, архитектуру и возможные конфликты. Не следует отключать GPG-проверку или применять --nogpgcheck без обоснованной причины.
APT
Источники задаются в:
/etc/apt/sources.list
/etc/apt/sources.list.d/*.list
/etc/apt/sources.list.d/*.sourcesПример современного файла .sources:
Types: deb
URIs: https://example.org/debian
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/example.gpgПосле изменения:
sudo apt updateДля сторонних источников предпочтительны отдельные ключи в /etc/apt/keyrings/ и привяка Signed-By, а не глобальное доверие ключу.
DNF/YUM
Файлы обычно находятся в /etc/yum.repos.d/*.repo:
[example]
name=Example Repository
baseurl=https://example.org/rpm/$basearch
enabled=1
gpgcheck=1
gpgkey=https://example.org/RPM-GPG-KEY-examplednf repolist
dnf repolist --all
sudo dnf --disablerepo=example upgrade
sudo dnf --enablerepo=example install PACKAGEPacman
Основная конфигурация: /etc/pacman.conf; зеркала: /etc/pacman.d/mirrorlist.
[example]
SigLevel = Required DatabaseOptional
Server = https://example.org/$archПосле изменения официальных источников обычно выполняют:
sudo pacman -SyuAUR — пользовательский репозиторий рецептов сборки, а не официальный бинарный репозиторий pacman. Перед сборкой следует читать и проверять PKGBUILD.
Поиск пакета по файлу
Для уже установленного файла:
dpkg -S /path/to/file
rpm -qf /path/to/file
pacman -Qo /path/to/fileСписок файлов пакета:
dpkg -L PACKAGE
rpm -ql PACKAGE
pacman -Ql PACKAGEПоиск отсутствующего файла в репозиториях:
# DNF
dnf provides '*/filename'
# Pacman
sudo pacman -Fy
pacman -F filename
# Debian/Ubuntu
sudo apt install apt-file
sudo apt-file update
apt-file search '/filename$'Управление зависимостями
Менеджер различает явно установленные пакеты и пакеты, добавленные автоматически как зависимости. После удаления основной программы зависимости могут стать ненужными.
sudo apt autoremove
sudo dnf autoremove
pacman -QdtСписок нужно проверять: библиотека могла использоваться вручную, хотя менеджер этого не знает.
Просмотр зависимостей
APT:
apt-cache depends nginx
apt-cache rdepends nginxDNF:
dnf repoquery --requires nginx
dnf repoquery --whatrequires nginxPacman (pactree входит в pacman-contrib):
pactree nginx
pactree -r nginxПакеты также могут объявлять конфликты, замены и виртуальные возможности. Если установка одной программы предлагает удалить много системных пакетов, транзакцию следует отменить и выяснить причину.
Исправление незавершённых операций
Debian/Ubuntu:
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt checkRPM-системы:
sudo dnf check
rpm -Varpm -Va требует интерпретации: изменённый конфигурационный файл не обязательно означает повреждение.
Arch Linux:
pacman -Qk PACKAGE
pacman -Qkk PACKAGEВыбор и фиксация версии
APT:
apt policy PACKAGE
sudo apt install PACKAGE=VERSION
sudo apt-mark hold PACKAGE
apt-mark showhold
sudo apt-mark unhold PACKAGEDNF:
dnf --showduplicates list PACKAGE
sudo dnf install PACKAGE-VERSIONФиксация версий может блокировать важные обновления и создавать несовместимости. В Arch Linux параметр IgnorePkg существует, но частичное обновление системы не поддерживается.
Сборка из исходников
Сборка нужна, если пакета нет в репозитории, требуется особая версия или нестандартные параметры. Недостатки: пакетный менеджер может не знать об установленных файлах, обновления не применяются автоматически, а удаление усложняется.
1. Получение и проверка исходников
tar -xf project-1.0.tar.gz
cd project-1.0Или:
git clone https://example.org/project.git
cd projectСледует использовать официальный источник, проверить контрольную сумму или подпись и прочитать README/INSTALL.
2. Инструменты сборки
# Debian/Ubuntu
sudo apt install build-essential
# Fedora/RHEL
sudo dnf group install "Development Tools"
# Arch Linux
sudo pacman -S --needed base-develТакже нужны библиотеки разработки: в Debian их имена часто заканчиваются на -dev, в RPM-системах — на -devel.
3. Настройка и компиляция
Autotools:
./configure --prefix=/usr/local
make
make test
sudo make installCMake:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build build
ctest --test-dir build
sudo cmake --install buildMeson:
meson setup build --prefix=/usr/local
meson compile -C build
meson test -C build
sudo meson install -C buildКонкретные команды определяются проектом. Компиляцию не следует выполнять от root: повышенные права нужны только для записи в системные каталоги.
Префикс установки
Ручные системные установки обычно размещают в /usr/local, чтобы отделить их от файлов дистрибутива. Пользовательская установка может использовать $HOME/.local:
./configure --prefix="$HOME/.local"
make
make install
export PATH="$HOME/.local/bin:$PATH"make uninstall поддерживается не всеми проектами. Более управляемый вариант — собрать нативный .deb, .rpm или пакет по PKGBUILD, чтобы файлы зарегистрировались в базе менеджера.
Нельзя без проверки запускать конструкции вида:
curl URL | shБезопаснее скачать сценарий, изучить его, проверить подпись или контрольную сумму и только затем выполнить.
Диагностика
Если менеджер заблокирован, сначала нужно проверить, не выполняется ли другая операция:
ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'Нельзя сразу удалять lock-файлы: активная установка может повредиться.
Проверка свободного места:
df -h
du -sh /var/cache/apt/archives 2>/dev/null
du -sh /var/cache/dnf 2>/dev/null
du -sh /var/cache/pacman/pkg 2>/dev/nullПри недоступности репозитория проверяют сеть, DNS, системное время, адрес источника, поддержку версии ОС, ключ подписи, прокси и свободное место. Отключение TLS или проверки подписи не является нормальным исправлением.
Рекомендации
- Использовать официальные репозитории, если подходящий пакет доступен.
- Проверять список установки, обновления и удаления до подтверждения.
- Не смешивать репозитории от разных выпусков дистрибутива.
- Не отключать проверку цифровых подписей.
- Не прерывать пакетную транзакцию без необходимости.
- Не удалять вручную файлы установленного пакета.
- Перед крупным обновлением сохранять важные данные и конфигурацию.
- Учитывать необходимость перезапуска служб или системы.
- В Arch Linux избегать частичных обновлений и использовать
pacman -Syu. - Проверять сторонние репозитории и сборочные рецепты как исполняемый код.
Краткая памятка
# Debian / Ubuntu
sudo apt update
sudo apt install PACKAGE
sudo apt upgrade
sudo apt remove PACKAGE
sudo apt autoremove
apt search TEXT
apt show PACKAGE
# Fedora / RHEL
sudo dnf install PACKAGE
sudo dnf upgrade
sudo dnf remove PACKAGE
sudo dnf autoremove
dnf search TEXT
dnf info PACKAGE
# YUM
sudo yum install PACKAGE
sudo yum update
sudo yum remove PACKAGE
# Arch Linux
sudo pacman -Syu
sudo pacman -S PACKAGE
sudo pacman -Rns PACKAGE
pacman -Ss TEXT
pacman -Si PACKAGE
pacman -Qi PACKAGEГлавный принцип: чем меньше программ устанавливается в обход пакетного менеджера, тем проще безопасно обновлять, проверять и обслуживать Linux-систему.