# Пакетные менеджеры Linux (apt, dnf, pacman)

> Системы установки, обновления и удаления программ в дистрибутивах Linux — apt (Debian, Ubuntu), dnf (Fedora, RHEL), pacman (Arch), apk (Alpine) — с репозиториями, зависимостями и подписями пакетов.

Источник: https://llmdocs.ru/wiki/package-managers/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Debian, Ubuntu**: dpkg (1994) и APT (1998), пакеты .deb
- **Fedora, RHEL**: rpm (1997), yum (2003), dnf (с 2015), пакеты .rpm
- **Arch Linux**: pacman (2002)
- **Alpine**: apk
- **openSUSE**: zypper
- **Универсальные форматы**: Flatpak, Snap, AppImage
- **Функции**: зависимости, репозитории, подписи, обновления
**Пакетный менеджер** — программа, которая устанавливает, обновляет и удаляет программы в [дистрибутиве Linux](https://llmdocs.ru/wiki/linux-distribution.md). Программы распространяются в виде **пакетов** — архивов с файлами и метаданными: версия, описание, список зависимостей, скрипты установки. Пакетный менеджер скачивает пакеты из **репозиториев** дистрибутива, проверяет их цифровые подписи, автоматически доставляет нужные зависимости и следит, чтобы в системе не было конфликтов.

Это одно из главных отличий Linux от традиционной установки программ скачанными с сайтов инсталляторами: одна команда обновляет всю систему вместе со всеми приложениями.

## Два уровня

Обычно есть низкоуровневый инструмент, работающий с отдельными файлами пакетов, и высокоуровневый, который умеет работать с репозиториями и разрешать зависимости:

| Семейство | Низкий уровень | Высокий уровень | Формат |
|---|---|---|---|
| Debian, Ubuntu | dpkg | apt (apt-get) | `.deb` |
| Fedora, RHEL, Rocky | rpm | dnf (ранее yum) | `.rpm` |
| Arch Linux | — | pacman | `.pkg.tar.zst` |
| Alpine | — | apk | `.apk` |
| openSUSE | rpm | zypper | `.rpm` |

dpkg появился в Debian в 1994 году, а APT — в 1998-м; формат RPM создан в Red Hat в 1997 году, менеджер yum — в 2003-м, а в 2015 году Fedora перешла на его преемника dnf.[2][3]

## Основные команды

| Действие | apt | dnf | pacman | apk |
|---|---|---|---|---|
| Обновить списки пакетов | `apt update` | (автоматически) | `pacman -Sy` | `apk update` |
| Обновить систему | `apt upgrade` | `dnf upgrade` | `pacman -Syu` | `apk upgrade` |
| Установить | `apt install nginx` | `dnf install nginx` | `pacman -S nginx` | `apk add nginx` |
| Удалить | `apt remove nginx` | `dnf remove nginx` | `pacman -R nginx` | `apk del nginx` |
| Найти | `apt search nginx` | `dnf search nginx` | `pacman -Ss nginx` | `apk search nginx` |
| Какому пакету принадлежит файл | `dpkg -S /usr/bin/curl` | `dnf provides /usr/bin/curl` | `pacman -Qo /usr/bin/curl` | `apk info --who-owns` |
| Убрать ненужные зависимости | `apt autoremove` | `dnf autoremove` | `pacman -Rns $(pacman -Qdtq)` | — |

В Debian и Ubuntu команда `apt` удобнее для интерактивной работы, а `apt-get` — для скриптов: её вывод и поведение стабильны между версиями.[1] В Arch не рекомендуется частичное обновление (`pacman -Sy` без `-u`): при скользящих выпусках это ломает зависимости.[4]

## Репозитории и доверие

Список репозиториев хранится в `/etc/apt/sources.list.d/` (Debian), `/etc/yum.repos.d/` (Fedora и RHEL), `/etc/pacman.conf` (Arch). Метаданные и пакеты подписаны ключами дистрибутива, и менеджер отказывается ставить пакет с неверной подписью — это защищает от подмены по пути. Сторонние репозитории (например, официальный репозиторий [Docker](https://llmdocs.ru/wiki/docker.md) или [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md)) подключают вместе с их ключом подписи.

```bash
# Debian/Ubuntu: добавить сторонний репозиторий с ключом
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian trixie stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install docker-ce
```

Arch дополнительно поддерживает пользовательский репозиторий AUR со сценариями сборки от сообщества — удобный, но требующий внимательности источник.

## Обновления безопасности

На серверах исправления безопасности стоит ставить автоматически: в Debian и Ubuntu — пакетом `unattended-upgrades`,[6] в Fedora и RHEL — `dnf-automatic`. Обновление ядра и системных библиотек часто требует перезапуска служб или перезагрузки; утилиты `needrestart` и `needs-restarting` подскажут, что перезапустить.

```bash
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
```

Чтобы пакет не обновлялся (например, критичная версия СУБД), его закрепляют: `apt-mark hold postgresql-17`, `dnf versionlock add ...`.

## Пакеты в Docker-образах

В [Dockerfile](https://llmdocs.ru/wiki/dockerfile.md) установку пакетов объединяют с очисткой кэша в одной инструкции, чтобы не раздувать слой:

```dockerfile
RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*
```

В Alpine то же делает `apk add --no-cache curl`.[5]

## Универсальные форматы

**Flatpak** и **Snap** распространяют настольные приложения одинаково для всех дистрибутивов, со всеми зависимостями внутри и в песочнице; **AppImage** — один исполняемый файл без установки. Они удобны для свежих версий приложений, но занимают больше места и слабее интегрированы с системой. Для языков программирования существуют свои менеджеры — [pip](https://llmdocs.ru/wiki/pip-pypi.md) и [uv](https://llmdocs.ru/wiki/uv.md) для Python, [npm](https://llmdocs.ru/wiki/npm.md) для JavaScript, [Cargo](https://llmdocs.ru/wiki/cargo.md) для Rust; системным пакетным менеджером их зависимости лучше не смешивать.

## Советы

- Устанавливайте программы из репозиториев дистрибутива, когда это возможно: они получают обновления безопасности.
- Не используйте `sudo pip install` в системный Python — для этого есть [виртуальные окружения](https://llmdocs.ru/wiki/venv.md).
- Фиксируйте список установленных пакетов в [коде инфраструктуры](https://llmdocs.ru/wiki/infrastructure-as-code.md) (Ansible, Dockerfile), а не устанавливайте вручную.

## См. также

- [Дистрибутив Linux](https://llmdocs.ru/wiki/linux-distribution.md)
- [Linux](https://llmdocs.ru/wiki/linux.md)
- [Dockerfile](https://llmdocs.ru/wiki/dockerfile.md)
- [pip и PyPI](https://llmdocs.ru/wiki/pip-pypi.md)
- [Ansible](https://llmdocs.ru/wiki/ansible.md)

## Источники

1. [Debian Wiki — Apt](https://wiki.debian.org/Apt)
2. [Debian Reference — Debian package management](https://www.debian.org/doc/manuals/debian-reference/ch02.en.html)
3. [DNF documentation](https://dnf.readthedocs.io/)
4. [ArchWiki — pacman](https://wiki.archlinux.org/title/Pacman)
5. [Alpine Linux Wiki — Alpine Package Keeper](https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper)
6. [Debian Wiki — UnattendedUpgrades](https://wiki.debian.org/UnattendedUpgrades)
