dpkg — низкоуровневый (один .deb-файл, без разрешения зависимостей).
Источники репозиториев — /etc/apt/sources.list и /etc/apt/sources.list.d/
(новый формат — *.sources, deb822).
Ключи
14
apt устроен по подкомандам (apt install, apt remove…), а не по флагам одной
команды; ниже — основные подкоманды и ключи. Полный список — man apt, man dpkg.
Ключ
Что делает
Пример
update
Обновить индекс пакетов из репозиториев; сама ничего не устанавливает.
sudo apt update
upgrade
Установить доступные обновления без удаления пакетов.
sudo apt upgrade
install
Поставить пакет (и его зависимости).
sudo apt install nginx
remove
Удалить пакет, конфиги в /etc остаются.
sudo apt remove nginx
-l
Список установленных пакетов по маске имени.
dpkg -l | grep nginx
-L
Какие файлы принадлежат установленному пакету.
dpkg -L nginx
purge
Удалить пакет вместе с конфигурационными файлами. опасно
sudo apt purge nginx
autoremove
Снести пакеты, поставленные как зависимости и больше не нужные. опасно
sudo apt autoremove --purge
-y--yes
Не спрашивать подтверждения; для скриптов и автоматизации. опасно
sudo apt install -y nginx
--fix-broken
Доустановить недостающие зависимости после прерванной установки.
sudo apt --fix-broken install
-S
Какому пакету принадлежит указанный файл.
dpkg -S /usr/sbin/nginx
-i
Поставить локальный .deb-файл напрямую, без разрешения зависимостей.
sudo dpkg -i package.deb
full-upgrade
Обновить с разрешением удалить конфликтующие пакеты — осторожнее, чем upgrade. опасно
sudo apt full-upgrade
--configure-a
Доконфигурировать все пакеты, оставшиеся распакованными после сбоя.
sudo dpkg --configure -a
Ничего не найдено. Попробуй запрос короче.
Рецепты
2
apt
bash
sudo apt update # обновить ИНДЕКС пакетов (не ставит обновления)
sudo apt upgrade # установить доступные обновления
sudo apt full-upgrade # + с удалением конфликтующих (осторожнее)
sudo apt install nginx # поставить
sudo apt install nginx=1.24\* # конкретную версию
sudo apt install --reinstall nginx
sudo apt remove nginx # удалить (конфиги остаются)
sudo apt purge nginx # удалить вместе с конфигами
sudo apt autoremove --purge # снести осиротевшие зависимости
apt search keyword ; apt show nginx ; apt list --installed
apt-cache policy nginx # доступные версии и из какого репо
sudo apt-mark hold nginx # зафиксировать версию (unhold — снять)
sudo apt download nginx # скачать .deb, не ставя
dpkg и репозитории
bash
dpkg -l | grep nginx # установлен ли
dpkg -L nginx # какие файлы принёс пакет
dpkg -S /usr/sbin/nginx # какому пакету принадлежит файл
sudo dpkg -i package.deb # поставить локальный .deb (затем apt -f install)
dpkg --get-selections # список для переноса на другую машину# добавить сторонний репозиторий (современно, с ключом):
curl -fsSL https://repo.example.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg
echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://repo.example.com stable main" \
| sudo tee /etc/apt/sources.list.d/example.list
sudo apt update
Неполадки
5
СимптомПричина и решение
«Could not get lock /var/lib/dpkg/lock»
Уже запущен apt/unattended-upgrades. Подожди или найди процесс
(ps aux | grep -E 'apt|dpkg', см. processes). Не убивай dpkg на полпути.
dpkg прервался, «broken packages»
bash
sudo dpkg --configure -a # доконфигурировать прерванное
sudo apt --fix-broken install # доустановить зависимости
apt update: NO_PUBKEY / 404 / repository changed
Битый/устаревший источник в sources.list.d/. Поправь URL или добавь ключ
(signed-by=, не устаревший apt-key). Изменился Suite → --allow-releaseinfo-change.
Конкретная версия / откат
apt-cache policy PKG — что доступно; apt install pkg=версия; зафиксировать —
apt-mark hold. Без интернета (как в лаб-ВМ) — прокси/зеркало (apt-cacher-ng).