Пакетный менеджер dpkg

В этой статье рассмотрим низкоуровневый пакетный менеджер dpkg, который используется в deb-based Linux-системах (Debian/Ubuntu) и в отличие от apt / apt-get не умеет работать с зависимостями и репозиториями.

Что умеет dpkg

В дистрибутивах Linux приложения устанавливаются с помощью специальных пакетов.

  • В deb-based Linux-системах (Debian/Ubuntu/Mint) — это deb-пакеты (.deb).
  • В rpm-based Linux-системах (RHEL/Fedora/Rocky Linux) — это rpm-пакеты (.rpm).

В этой статье разбираемся с пакетным менеджером dpkg, который работает с deb-пакетами. Я уже писал про  apt / apt-get — умный пакетный менеджер в deb-based Linux-системах. А вот dpkg не такой умный, он не работает с репозиториями и не может скачать оттуда зависимости, но это низкоуровневый инструментом и используется тем же apt.

Пакетный менеджер dpkg умеет:

  • установить локально доступный (скачанный) deb-пакет;
  • удалить deb-пакет;
  • показать список установленных пакетов;
  • показать информацию об установленном пакете;
  • показать информацию о скачанном пакете.

Если при установке пакет запросит зависимости, то dpkg распакует пакет, но не настроит его, и пакет повиснет в состоянии «настроен частично» (half-configured). Для того чтобы исправить это, выполним команду:

$ sudo apt install -f
  • Эта команда доустановит недостающие зависимости и «донастроит» пакет.

Установка пакетов

Для теста установим пакет hello, предварительно скачав его с помощью apt-get:

$ apt-get download hello

$ sudo dpkg -i hello_2.10-3build1_amd64.deb
Выбор ранее не выбранного пакета hello.
(Чтение базы данных … на данный момент установлено 1366673 файла и каталога.)
Подготовка к распаковке hello_2.10-3build1_amd64.deb …
Распаковывается hello (2.10-3build1) …
Настраивается пакет hello (2.10-3build1) …
Обрабатываются триггеры для install-info (7.1-3build2) …
Обрабатываются триггеры для man-db (2.12.0-4build2) …
  • Для установки используем опцию -i
  • Этот пример был выполнен на Linux Mint 22.3, должен сработать и на Ubuntu 24.04 LTS / Debian 13.
  • Если возникнет ошибка зависимостей — исправляем через sudo apt install -f, как описано выше.

Кстати, именно на Linux Mint 22.3 apt download пакует пакеты в .tar.gz, поэтому для получения чистого .deb нужно использовать apt-get download. Сам на это наткнулся при написании этой статьи.

Проверим работу:

$ hello
Здравствуй, мир!

Обычно с помощью dpkg устанавливаются пакеты, которых нет в репозиториях. То есть вы их можете найти где-нибудь в интернете, скачать, а затем установить. Например установим утилиту ripgrep для быстрого поиска текста в файлах (grep на стероидах):

$ wget https://github.com/BurntSushi/ripgrep/releases/download/14.1.1/ripgrep_14.1.1-1_amd64.deb
$ sudo dpkg -i ripgrep_14.1.1-1_amd64.deb

Пример работы ripgrep:

$ rg "Failed password" /var/log/auth.log
770:2026-09-15T16:27:47.588901+03:00 pc-alex sshd[560967]: Failed password for user from 192.168.0.15 port 62019 ssh2
851:2026-09-15T17:28:52.742897+03:00 pc-alex sshd[624908]: Failed password for user from 192.168.0.15 port 49249 ssh2
  • Эта команда ищет фразу Failed password в файле /var/log/auth.log.

Удаление пакетов

Для удаления пакета используется опция -r:

$ sudo dpkg -r ripgrep
(Чтение базы данных … на данный момент установлено 1366692 файла и каталога.)
Удаляется ripgrep (14.1.1-1) …
Обрабатываются триггеры для man-db (2.12.0-4build2) …
  • Эта команда удаляет только приложение, оставляя конфиги или другие служебные файлы.

Для полного удаления нужно использовать опцию -P.

Список установленных пакетов

А с помощью опции -l можно посмотреть список установленных пакетов:

$ dpkg -l
Желаемый=неизвестно[u]/установить[i]/удалить[r]/вычистить[p]/зафиксировать[h]
| Состояние=не[n]/установлен[i]/настроен[c]/распакован[U]/частично настроен[F]/
            частично установлен[H]/trig-aWait/Trig-pend
|/ Ошибка?=(нет)/требуется переустановка[R] (верхний регистр
в полях состояния и ошибки указывает на ненормальную ситуацию)
||/ Имя                      Версия                            Архитектура  Описание
+++-========================-=================================-============-===================>
ii  7zip                     3.01+dfsg-11                      amd64        7-Zip file archiver with a high compression ratio
ii  accountsservice          23.13.9-2ubuntu6.1                amd64        query and manipulate user account information
ii  acl                      2.3.2-1build1.1                   amd64        access control list - utilities
ii  adduser                  3.137ubuntu1                      all          add and remove users and groups
ii  adwaita-icon-theme       46.0-1                            all          default icon theme of GNOME
ii  alsa-base                1.0.25+dfsg-0ubuntu7              all          ALSA driver configuration files
ii  alsa-topology-conf       1.2.5.1-2                         all          ALSA topology configuration files
ii  alsa-ucm-conf            1.2.10-1ubuntu5.14                all          ALSA Use Case Manager configuration files
ii  alsa-utils               1.2.9-1ubuntu5                    amd64        Utilities for configuring and using ALSA
ii  amd64-microcode          3.20251202.1ubuntu0.24.04.1       amd64        Platform firmware and microcode for AMD CPUs and SoCs
ii  anacron                  2.3-39ubuntu2                     amd64        cron-like program that doesn't go by time
ii  anydesk                  7.0.2                             amd64        The fastest remote desktop software on the market.

Я сократил вывод, так как для примера он слишком большой. А вот так можем найти установленный ранее пакет hello:

$ dpkg -l | grep hello
ii  hello                    2.10-3build1                      amd64        example package based on GNU hello

Информация о пакете

Получить информацию об установленном пакете можно с помощью -s:

$ dpkg -s hello
Package: hello
Status: install ok installed
Priority: optional
Section: devel
Installed-Size: 104
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 2.10-3build1
Replaces: hello-debhelper (<< 2.9), hello-traditional
Depends: libc6 (>= 2.38)
Breaks: hello-debhelper (<< 2.9)
Conflicts: hello-traditional
Description: example package based on GNU hello
 The GNU hello program produces a familiar, friendly greeting.  It
 allows non-programmers to use a classic computer science tool which
 would otherwise be unavailable to them.
 .
 Seriously, though: this is an example of how to do a Debian package.
 It is the Debian version of the GNU Project's `hello world' program
 (which is itself an example for the GNU Project).
Homepage: https://www.gnu.org/software/hello/
Original-Maintainer: Santiago Vila <sanvila@debian.org>

Также можно посмотреть информацию о скаченном пакете с помощью опции -I:

$ dpkg -I ripgrep_14.1.1-1_amd64.deb
 новый пакет Debian, версия 2.0.
 размер 1857320 байт(а): управляющий архив длиной 1200 байт(а).
     727 байт,    18 строк   control
    1167 байт,    12 строк   sha256sums
 Package: ripgrep
 Version: 14.1.1-1
 Architecture: amd64
 Vcs-Browser: https://github.com/BurntSushi/ripgrep
 Vcs-Git: https://github.com/BurntSushi/ripgrep
 Homepage: https://github.com/BurntSushi/ripgrep
 Section: utils
 Priority: optional
 Maintainer: Andrew Gallant <jamslam@gmail.com>
 Installed-Size: 6729
 Depends:
 Description: ripgrep is a line-oriented search tool that recursively searches the current
  directory for a regex pattern while respecting gitignore rules. ripgrep has
  first class support on Windows, macOS and Linux.
  ripgrep (rg) recursively searches your current directory for a regex pattern.
  By default, ripgrep will respect your .gitignore and automatically skip hidden
  files/directories and binary files.

Список файлов в пакете

Можем посмотреть список всех файлов, которые установились вместе с пакетом с помощью опции -L:

$ dpkg -L hello
/.
/usr
/usr/bin
/usr/bin/hello
/usr/share
/usr/share/doc
/usr/share/doc/hello
/usr/share/doc/hello/NEWS.gz
/usr/share/doc/hello/changelog.Debian.gz
/usr/share/doc/hello/copyright
/usr/share/info
/usr/share/info/hello.info.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/hello.1.gz

А также можем посмотреть список файлов в пакете, который скачали, но ещё не установили с помощью опции -c:

$ dpkg -c ripgrep_14.1.1-1_amd64.deb
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/bash-completion/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/bash-completion/completions/
-rw-r--r-- 0/0           21272 2024-09-09 03:00 usr/share/bash-completion/completions/rg
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/doc/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/doc/ripgrep/
-rw-r--r-- 0/0           82502 2024-09-09 03:00 usr/share/doc/ripgrep/CHANGELOG
-rw-r--r-- 0/0             126 2024-09-09 03:00 usr/share/doc/ripgrep/COPYING
-rw-r--r-- 0/0           41724 2024-09-09 03:00 usr/share/doc/ripgrep/FAQ
-rw-r--r-- 0/0            1081 2024-09-09 03:00 usr/share/doc/ripgrep/LICENSE-MIT
-rw-r--r-- 0/0           21003 2024-09-09 03:00 usr/share/doc/ripgrep/README
-rw-r--r-- 0/0            1211 2024-09-09 03:00 usr/share/doc/ripgrep/UNLICENSE
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/zsh/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/zsh/vendor-completions/
-rw-r--r-- 0/0           30406 2024-09-09 03:00 usr/share/zsh/vendor-completions/_rg
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/fish/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/fish/vendor_completions.d/
-rw-r--r-- 0/0           14253 2024-09-09 03:00 usr/share/fish/vendor_completions.d/rg.fish
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/man/
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/share/man/man1/
-rw-r--r-- 0/0           23110 2024-09-09 03:00 usr/share/man/man1/rg.1.gz
-rw-r--r-- 0/0             216 2024-09-09 03:00 usr/share/doc/ripgrep/copyright
drwxr-xr-x 0/0               0 2024-09-09 03:00 usr/bin/
-rwxr-xr-x 0/0         6634624 2024-09-09 03:00 usr/bin/rg

Итог

Пакетный менеджер dpkg чаще всего используют:

  • для установки пакетов, которых нет в репозитории и которые поставляются отдельными .deb пакетами;
  • для просмотра информации об уже установленных или скачанных пакетах;
  • для просмотра списка установленных пакетов.

А пакеты, которые есть в репозитории, устанавливают и удаляют с помощью apt или apt-get.

Еще раз пробежимся по опциям dpkg:

ОпцияОписание
-iустановить пакет
-rудалить пакет
-Pудалить пакет вместе с конфигами
-lсписок установленных пакетов
-sинформация об установленном приложении
-Iинформация о скачанном пакете
-Lсписок файлов, которые установились из пакета
-cсписок файлов в пакете (можно проверить перед установкой)

Если понравилась статья, подпишись на мой канал в  VK  или  Telegram .