Пакетный менеджер dpkg
Что умеет 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 .