Команды RPM
RPM - система управления пакетами, которая устанавливает, обновляет и удаляет программные пакеты в дистрибутивах Linux.
Установка пакета из файла
Для установки программы из пакета (например, которой нет в репозитории), воспользуйтесь следующей конструкцией:
# rpm -i package.rpm
где package.rpm - нужный Вам файл.
Пример выполнения команды:
[root@comp-alt-petr]# rpm -i mytetra_1.42.2-alt2.rpm
В конце команды Вы можете указать дополнительные опции:
- --nodeps не проверять зависимости пакета
- --replacepkgs или --reinstall переустановить пакет
Подробный вывод
Для того, чтобы отображался прогресс установки, используйте дополнительные параметры -v и -h.
- -v - выводить более детальные сообщения
- -h - выводить "#" по мере установки пакета (используется с -v)
# rpm -ivh package.rpm
Пример выполнения команды:
[root@comp-alt-petr]# rpm -ivh mytetra_1.42.2-alt2.rpm
Подготовка... #################################################################################################### [100%]
Обновление / установка...
1: mytetra-1.42.2-alt2 #################################################################################################### [100%]
Running /usr/lib/rpm/posttrans-filetriggers
Удаление пакета
# rpm -e package
Узнать полное имя пакета
Обычно, из Synaptic или apt пакет устанавливается коротким именем. Чтобы узнать его полное имя - архитектуру, версию и пр., введите следующую команду:
# rpm -qa пакет
Пример:
[root@comp-alt-petr ~]# rpm -qa supertuxkart
supertuxkart-1.4-alt1.x86_64
Найти пакет по части имени
Указав специальной командой часть названия пакета, можно найти все пакеты содержащие эту фразу.
# rpm -qa | grep часть_названия
Пример:
[root@comp-alt-petr ~]# rpm -qa | grep tux
supertuxkart-data-1.4-alt1.noarch
tuxcmd-0.6.70-alt2.x86_64
supertux2-0.6.3-alt2.x86_64
supertuxkart-1.4-alt1.x86_64
supertux2-data-0.6.3-alt2.noarch
Узнать пакет по файлу
Если у Вас есть файл в системе, но Вы не знаете, к какому пакету он относится, это можно разрешить следующим способом:
Сначала, если это исполняемый файл, нужно найти, где он находится.
[root@comp-alt-petr ~]# whereis bash
bash: /bin/bash /usr/lib/bash /usr/share/man/man1/bash.1.xz /usr/share/info/bash.info.xz
А потом, выбрав нужный путь использовать следующую команду:
[root@comp-alt-petr ~]# rpm -qf /bin/bash
bash-4.4.23-alt1.noarch
Вывести список всех установленных пакетов с номерами версий и релизов
Чтобы вывести список всех установленных пакетов, используйте следующую конструкцию:
# rpm -qa
Дополнительные параметры
Чтобы вывести список построчно, укажите параметр less:
# rpm -qa | less
Чтобы вывести список в алфавитном порядке, укажите параметр sort:
# rpm -qa | sort
Чтобы использовать оба параметра, укажите их следующим образом:
# rpm -qa | sort | less
Чтобы вывести только названия пакетов, без версии, используйте команду:
# rpm -qa --qf '%{NAME}\n' | sort
Проверить, установлен ли пакет
Чтобы проверить, установлен ли пакет, введите следующую команду:
# rpm -q 'Имя пакета'
Пример:
# rpm -q 0ad
0ad-0.0.26-alt0_1_alpha.p10.x86_64
# rpm -q boswars
пакет boswars не установлен
Вывести все пакеты определенной категории
Чтобы вывести все установленные пакеты определенной категории, введите команду (с пробелом в конце!):
# rpm -qg
Нажмите Tab
И после qg введите одну из отобразившихся категорий:
# rpm -qg
Accessibility Development/Python Networking/File transfer System/Configuration/Networking
Archiving/Backup Development/Python3 Networking/Instant messaging System/Configuration/Other
Archiving/Cd burning Development/Scheme Networking/Mail System/Configuration/Packaging
Archiving/Compression Development/Tcl Networking/News System/Configuration/Printing
Archiving/Other Development/Tools Networking/Other System/Fonts/True type
Communications Documentation Networking/Remote access System/Fonts/Type1
Converted/ Editors Networking/WWW System/Fonts/X11 bitmap
Databases Education Office System/Internationalization
Development/C Emulators Other System/Kernel and hardware
Development/C++ File tools Publishing System/Legacy libraries
Development/Databases Games/Arcade Sciences/Geosciences System/Libraries
Development/Debug Games/Strategy Sciences/Mathematics System/Servers
Development/Debuggers Graphical desktop/GNOME Security/Networking System/X11
Development/Java Graphical desktop/KDE Shells System/XFree86
Development/KDE and QT Graphical desktop/Other Sound Terminals
Development/Kernel Graphics System/Base Text tools
Development/Other Monitoring System/Configuration/Boot and Init Video
Development/Perl Networking/DNS System/Configuration/Hardware
# rpm -qg Graphics
kde5-kolourpaint-22.12.3-alt1.x86_64
kde5-kruler-22.12.3-alt1.x86_64
tesseract-langpack-ru-4.1.0-alt1.noarch
iscan-free-2.30.4-alt2.x86_64
kde5-printing-22.12.1-alt1.x86_64
tesseract-5.2.0-alt1.x86_64
kde5-scanning-22.12.1-alt1.x86_64
sane-1.2.1-alt1.x86_64
icon-theme-oxygen-5.104.0-alt1.noarch
icon-theme-breeze-5.104.0-alt1.noarch
xsane-doc-0.999-alt6.2.noarch
sane-airscan-0.99.25-alt1.x86_64
xsane-doc-ru-0.999-alt1.noarch
colord-1.4.6-alt1.x86_64
tesseract-langpack-en-4.1.0-alt1.noarch
libexiv2-0.27.5-alt1.x86_64
sane-doc-1.2.1-alt1.noarch
iscan-data-1.39.1-alt1.noarch
branding-xalt-kworkstation-graphics-10.1.1-alt2.noarch
netpbm-10.85.04-alt1.x86_64
xsane-0.999-alt6.2.x86_64
mypaint-brushes1.0-1.3.1-alt1.noarch
icc-profiles-1.0.1-alt1.noarch
gimp-2.10.30-alt1.x86_64
optipng-0.7.7-alt1.x86_64
libjpeg-utils-2.0.6-alt3.x86_64
ImageMagick-tools-6.9.12.64-alt1.x86_64
Определить имя пакета по rpm-файлу
Если у Вас какой-то rpm-файл с непонятным именем, узнать, что именно он установит, можно следующей командой:
# rpm -qp "путь к файлу"
Пример:
# rpm -qp /home/petr/0ad.rpm
supertuxkart-1.4-alt1.x86_64
Определить место хранения документации пакета
Часто в пакете поставляется документация. Узнать, где она хранится, можно следующей командой. Указывается не rpm-файл, а установленный пакет.
[root@comp-alt-petr archives]# rpm -qd mytetra
/usr/share/doc/mytetra-1.42.2/readme.txt
Список файлов установленного пакета
Чтобы вывести список файлов, который содержит пакет, воспользуйтесь следующей командой:
# rpm -ql имя_пакета
Пример использования:
# rpm -ql mytetra
/usr/bin/mytetra
/usr/share/applications/mytetra.desktop
/usr/share/doc/mytetra-1.42.2
/usr/share/doc/mytetra-1.42.2/readme.txt
/usr/share/icons/hicolor/48x48/apps/mytetra.png
Если Вы попробуете указать неустановленный rpm-пакет, то получите ошибку:
# rpm -ql /home/petr/libvitastor-blk-0.9.0-alt1.x86_64.rpm
пакет /home/petr/libvitastor-blk-0.9.0-alt1.x86_64.rpm не установлен
Где искать исполняемые файлы этого пакета?
Чтобы найти исполняемые файлы указанного пакета, можно воспользоваться следующей конструкцией:
# rpm -ql имя_пакета | grep bin/
Пример использования:
# rpm -ql bash | grep bin/
/bin/bash
/bin/bash2
/bin/rbash
/usr/bin/bashbug
Что отвечает за запуск служб в этом пакете?
Чтобы выяснить, какие части пакета отвечают за запуск его служб, используйте конструкцию
# rpm -ql имя_пакета | grep /etc/rc.d/init.d/
если используется SysVinit.
Пример:
# rpm -ql udev | grep /etc/rc.d/init.d/
/etc/rc.d/init.d/udevd
Или
# rpm -ql имя_пакета | grep /lib/systemd/system/
если используется Systemd.
Пример:
# rpm -ql udev | grep /lib/systemd/system/
/lib/systemd/system/initrd-udevadm-cleanup-db.service
/lib/systemd/system/sockets.target.wants/systemd-udevd-control.socket
/lib/systemd/system/sockets.target.wants/systemd-udevd-kernel.socket
/lib/systemd/system/sysinit.target.wants/systemd-udev-trigger.service
/lib/systemd/system/sysinit.target.wants/systemd-udevd.service
/lib/systemd/system/systemd-udev-settle.service
/lib/systemd/system/systemd-udev-trigger.service
/lib/systemd/system/systemd-udev-trigger.service.d
/lib/systemd/system/systemd-udev-trigger.service.d/systemd-udev-trigger-no-reload.conf
/lib/systemd/system/systemd-udevd-control.socket
/lib/systemd/system/systemd-udevd-kernel.socket
/lib/systemd/system/systemd-udevd.service
/lib/systemd/system/udevd.service
Список файлов неустановленного пакета
Чтобы узнать содержимое неустановленного rpm-пакета, используйте команду:
[root@comp-alt-petr]# rpm -qlp имя_пакета.rpm
Пример выполнения команды:
[root@comp-alt-petr]# rpm -qlp xkill_1.0.5-alt1.rpm
/usr/bin/xkill
/usr/share/applications/xkill.desktop
/usr/share/icons/hicolor/16x16/apps/xkill.xpm
/usr/share/icons/hicolor/32x32/apps/xkill.xpm
/usr/share/icons/hicolor/48x48/apps/xkill.xpm
/usr/share/man/man1/xkill.1.xz
Список конфигурационных файлов пакета
Чтобы вывести все файлы с настройками, входящими в пакет, выполните следующую команду:
$ rpm -qc bash
/etc/bashrc
/etc/bashrc.d/alias.sh
Так же, можно использовать конструкцию с командой для списка файлов установленного пакета:
$ rpm -ql bash | grep /etc/
/etc/bashrc
/etc/bashrc.d
/etc/bashrc.d/alias.sh
Состояние установленных файлов
Чтобы узнать состояние перечисленных файлов из установленного пакета, выполните следующую команду:
[root@comp-alt-petr archives]# rpm -qs mytetra
нормальный /usr/bin/mytetra
нормальный /usr/share/applications/mytetra.desktop
нормальный /usr/share/doc/mytetra-1.42.2
нормальный /usr/share/doc/mytetra-1.42.2/readme.txt
нормальный /usr/share/icons/hicolor/48x48/apps/mytetra.png
Просмотр списка последних установленных пакетов
Чтобы узнать какие последние пакеты были установлены, выполните следующую команду:
[root@comp-alt-petr]# rpm -qa -last | less
apf-0.3-alt2.noarch Пн 22 мая 2023 15:35:23
NetworkManager-openvpn-gtk-common-1.10.3-alt0.p10.1.ge1c5978.x86_64 Пн 22 мая 2023 14:34:13
NetworkManager-openvpn-gtk3-1.10.3-alt0.p10.1.ge1c5978.x86_64 Пн 22 мая 2023 14:34:13
xkill-1.0.5-alt1.x86_64 Пн 22 мая 2023 14:24:44
mate-applets-1.26.1-alt2.x86_64 Пн 22 мая 2023 11:26:35
libgucharmap-14.0.1-alt1.x86_64 Пн 22 мая 2023 11:26:34
NetworkManager-tui-1.40.18-alt1.p10.1.x86_64 Пн 22 мая 2023 11:22:50
libnewt52-0.52.16-alt1.x86_64 Пн 22 мая 2023 11:22:50
Восстановление поврежденной БД RPM
Иногда, например из-за зависания компьютера или отключения электричества при работе RPM с пакетами (установка, удаление, обновление и пр.) база данных, содержащая информацию об установленных пакетах повреждается и пакетный менеджер может вообще не заработать и будет выдавать ошибку о поврежденной БД.
Типа такой:
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from db->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: rpmdb: BDB1581 File handles still open at environment close
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.001
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.002
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/__db.003
error: rpmdb: BDB1582 Open file handle: /var/lib/rpm/Packages
error: rpmdb: BDB0060 PANIC: fatal region error detected; run recovery
error: db5 error(-30973) from dbenv->close: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
Несмотря на критичность, данная проблема решается довольно просто.
Первым делом мы очищаем старую базу данных:
# rm -f /var/lib/rpm/__db*
А после, генерируем новую заново:
# rpm -vv --rebuilddb
После генерации попробуйте получить список пакетов:
# rpm -qa
Должен вывестись список установленных пакетов.