В Debian и Ubuntu программы ставятся пакетами .deb. dpkg — низкоуровневый инструмент: устанавливает и удаляет отдельные .deb-файлы и ведёт базу установленных пакетов, но зависимости сам не скачивает. apt (и старые apt-get, apt-cache) работает поверх dpkg: берёт пакеты из репозиториев, сам подтягивает зависимости и обновления. На практике ставят и удаляют через apt, а dpkg используют для вопросов «что установлено?» и «откуда этот файл?».
Синтаксис
apt [опции] команда [пакет…]
apt-get [опции] команда [пакет…] # стабильный вывод — для скриптов
apt-cache команда [пакет…]
dpkg [опции] действие [пакет|файл…]
Установка и удаление требуют root (sudo). Поиск и просмотр работают от любого пользователя.
apt: установка и удаление
| Команда | Что делает |
|---|
apt update | скачать свежие списки пакетов из репозиториев — делай перед install |
apt install пакет… | установить с зависимостями; уже установленный — обновить до последней версии |
apt install пакет=версия | установить конкретную версию |
apt install ./файл.deb | установить локальный .deb с подтягиванием зависимостей (путь обязательно с ./ или /) |
apt reinstall пакет | переустановить |
apt remove пакет | удалить программу, оставив конфигурационные файлы |
apt purge пакет | удалить вместе с конфигурацией |
apt autoremove | удалить зависимости, которые больше никому не нужны |
apt upgrade | обновить всё установленное (не удаляя пакеты) |
apt full-upgrade | обновить всё, разрешая удалять и ставить пакеты ради зависимостей |
apt download пакет | только скачать .deb в текущий каталог |
apt clean | очистить кэш скачанных .deb в /var/cache/apt/archives |
apt: поиск и информация
| Команда | Что делает |
|---|
apt search слово | искать в именах и описаниях; --names-only — только в именах |
apt show пакет | описание, версия, размер, зависимости |
apt list --installed | установленные пакеты |
apt list --upgradable | что можно обновить (после apt update) |
apt-cache policy пакет | установленная версия, кандидат на установку и из каких репозиториев |
apt-cache madison пакет | все доступные версии по репозиториям |
apt-cache depends пакет | от чего зависит пакет |
apt-cache rdepends пакет | какие пакеты зависят от этого |
Опции apt и apt-get
| Опция | Что делает |
|---|
-y | отвечать «да» на все вопросы — для скриптов |
-s, --dry-run | только показать, что будет сделано |
-q / -qq | тише / почти без вывода |
--no-install-recommends | не ставить рекомендованные пакеты — меньше лишнего |
-f install | починить нарушенные зависимости |
--only-upgrade | с install: только обновить, если пакет уже стоит |
apt-mark
| Команда | Что делает |
|---|
apt-mark hold пакет / unhold | запретить / разрешить обновление пакета |
apt-mark showhold | пакеты, закреплённые от обновления |
apt-mark showmanual / showauto | установленные вручную / как зависимости (их уберёт autoremove) |
apt-mark manual пакет | пометить как установленный вручную, чтобы autoremove его не тронул |
dpkg
| Команда | Что делает |
|---|
dpkg -l [шаблон] | список пакетов с состоянием и версией: dpkg -l 'python3*' |
dpkg -L пакет | какие файлы установил пакет |
dpkg -S путь | какому пакету принадлежит файл: dpkg -S /usr/bin/flock |
dpkg -s пакет | статус и описание установленного пакета |
dpkg -i файл.deb | установить .deb (зависимости не скачивает) |
dpkg -r пакет / dpkg -P пакет | удалить / удалить с конфигурацией |
dpkg -c файл.deb / dpkg -I файл.deb | содержимое / метаданные .deb-файла без установки |
dpkg --configure -a | донастроить пакеты после прерванной установки |
dpkg-query -W -f='${Package} ${Version}\n' | список в своём формате |
Состояние в dpkg -l
Первые две буквы строки: желаемое действие и текущее состояние.
| Код | Что значит |
|---|
ii | установлен и работает |
rc | удалён (remove), но конфигурационные файлы остались — уберёт purge |
un | не установлен |
hi | установлен и закреплён (apt-mark hold) |
iU / iF | распакован, но не настроен / настройка сорвалась — лечит dpkg --configure -a |
Примеры
# обновить списки и поставить пакет без вопросов
apt update && apt install -y tree
# в Dockerfile и скриптах — apt-get, без рекомендаций и вопросов
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends curl
# какой версии пакет стоит и что доступно
apt-cache policy bash
# установлен ли пакет (для скрипта: код 0 — да)
dpkg -s jq >/dev/null 2>&1 && echo "jq установлен"
# найти пакет, из которого пришла команда
dpkg -S "$(command -v flock)"
# где лежат файлы пакета, например его конфиги
dpkg -L cron | grep ^/etc
# список установленных пакетов с версиями
dpkg-query -W -f='${Package}\t${Version}\n' | head
# самые большие пакеты (размер в КиБ)
dpkg-query -W -f='${Installed-Size}\t${Package}\n' | sort -n | tail -5
# пакеты, удалённые без purge, — с оставшимися конфигами
dpkg -l | awk '/^rc/ { print $2 }'
# посмотреть, что сделает установка, ничего не меняя
apt install -s nginx
# заморозить версию
apt-mark hold nginx
Подводные камни
- Без сети не установить ничего. В песочнице может не быть доступа в интернет:
apt update печатает Temporary failure resolving и всё равно возвращает код 0, а apt install отвечает Unable to locate package или has no installation candidate. Команды dpkg -l/-L/-S/-s и apt-cache policy при этом работают — они читают локальную базу.
Unable to locate package часто значит «не было apt update». В Docker-образах списки пакетов удалены ради размера, и сначала их нужно скачать.
remove оставляет конфиги. Пакет остаётся в dpkg -l со статусом rc, а файлы в /etc — на месте. Чтобы стереть всё, используй purge.
apt — не для скриптов. Его вывод может меняться между версиями, о чём он сам предупреждает: WARNING: apt does not have a stable CLI interface. В скриптах и Dockerfile используй apt-get и apt-cache.
- Вопросы при установке вешают скрипт. Нужны
-y и DEBIAN_FRONTEND=noninteractive — иначе apt ждёт ответа «Y/n» или вопросов от debconf.
dpkg -i не ставит зависимости. Если их не хватает, пакет остаётся ненастроенным. Ставь локальные файлы через apt install ./файл.deb или почини после: apt -f install.
apt install пакет обновляет уже установленный пакет, если есть новая версия. Чтобы этого не случилось, закрепи его через apt-mark hold.
could not get lock /var/lib/dpkg/lock-frontend — уже работает другой apt или dpkg (часто автообновление). Дождись его завершения, а не удаляй файлы блокировки.
См. также
which · sudo · service · curl · env