Ключевые слова:rpm, linux, install, upgrade, (найти похожие документы)
From: Lomash Dmitry <lomash@mtuci-ncb.donpac.ru>
Subject: [Linux] Поиск информации об RPM-пакетах
Перевод статьи - Lomash Dmitry <lomash@mtuci-ncb.donpac.ru> 1.12.00
Оригинал доступен на сервере LinuxRSP.Ru (Все об операционной системе Linux на русском языке)
http://www.linuxrsp.ru/
Курс молодого бойца. Поиск информации об rpm-пакетах с использованием механизма
конвейера и команды grep.
Данная статья является авторским переводом оригинальной статьи "Piping
rpm output with the help of grep" с веб-сайта [1]www.techproguild.com
Очень часто появляется необходимость узнать номер релиза большого
числа пакетов в системе Linux. Скажем, к примеру, Вы не уверены какую
версию GNOME Вы используете. При помощи команд rpm, grep, механизма
конвейера, и пары ключей Вы сможете очень быстро это выяснить. При
написании данной статьи, автор использовал систему управления пакетами
Red Hat (в более частом использовании RPM) совместно с мощной командой
поиска grep для обращения к базе данных rpm. Эти две команды (rpm и
grep) объединяются для совместного использования, этот метод
называется конвейером и обозначается ( | ).
Начало
Синтаксис команд выглядит следующим образом:
rpm -qa | grep PACKAGE_NAME
При рассмотрении составных частей данной команды, мы видим, что grep
использует данные полученные при запросе (ключ q) ко всем (ключ a)
вхождениям в базу rpm пакета PACKAGE_NAME.
Хотя данная конструкция не отображает все возможности команды, она
дает начальные понятия их использования.
Пример
Допустим, мы хотим посмотреть какие пакеты установлены для GNOME. Если
использовать следующую конструкцию:
rpm -qa | grep gnome
вы вероятно получите нечто следующего вида:
[jwallen@giles jwallen]$ rpm -qa | grep gnome
sawfish-gnome-0.28.1-0_helix_2
gnome-pin-conduits-1.2.0-0_helix_1
gnome-games-devel-1.2.0-0_helix_1
gnome-audio-1.0.0-7
gnome-audio-extra-1.0.0-7
gnome-linuxconf-0.23-1
......................................
[часть текста пропущена]
Как видно из примера, на экран выведены все пакеты, содержащие слово
gnome. Это иллюстрирует очевидное ограничение - не все пакеты,
которые необходимы пакету GNOME содержат слово gnome. Например, GNOME
зависит от большого числа библиотек, таких как gtk. Для нахождения
всех установленных компонентов gtk введите команду rpm -qa| grep gtk:
[jwallen@giles jwallen]$ rpm -qa | grep gtk
pygtk-libglade-0.6.4-1
rep-gtk-libglade-0.11-0_helix_2
gtk-1.0.3-1
gtk+10-1.0.6-6
pygtk-0.6.3-1
gtk+-1.2.7-1_helix_2
gtk-engines-0.10-1_helix_2
gtk+-devel-1.2.7-1_helix_1
Очевидно, что предложенная система - это лишь небольшая помощь для
нахождения всех пакетов, которые имеют зависимости от других пакетов.
Тем не менее, конвейер rpm и grep поможет Вам найти номера релизов и
имена необходимых Вам пакетов.
Заключение
Хотя приведенная система имеет небольшие ограничения в возможностях,
она, однако, жизнеспособна и имеет своих приверженцев. Она может
успешно использоваться для нахождения установленных пакетов и номеров
их релизов!
Что ещё должен знать молодой боец о rpm и grep.
Хотелось бы сделать несколько дополнений к статье "Поиск информации об
rpm-пакетах с использованием механизма конвейера и команды grep".
Бывает, что нужно найти пакеты, начинающиеся на определённую
последовательность символов, например, на xe:
$ rpm -qa | grep ^xe
xemacs-21.1.8-4mdk
xemacs-info-21.1.8-4mdk
xemacs-extras-21.1.8-4mdk
xearth-1.0-5mdk
xemacs-X11-21.1.8-4mdk
Часто программа требует отсутствующую библиотеку. Чтобы определить, в
каком rpm-пакете из дистрибутива находится нужный файл, можно создать
список файлов во всех rpm в дистрибутиве:
$ find /mnt/cdrom/Mandrake/RPMS -name "*.rpm" -exec rpm -qpil {} >>
list \;
Команда find находит на CD в каталоге Mandrake/RPMS все rpm-пакеты, и
для каждого из них запускает команду rpm с параметрами qpil. Параметр
q обозначает запрос о пакете, p - показывает, что речь идёт о
неустановленном пакете, i -
запрашивает информацию, и l - запрашивает список файлов. Вывод
направляется в файл list. В этом файле мы имеем описания пакетов и
списки их файлов.
Теперь можем попробовать найти требуемый файл, например,
FvwmAuto.1.bz2:
$ grep -B100 FvwmAuto.1.bz2 list | less
Команда grep найдёт в файле list строку, содержащую название нужного
файла, и выведет её и 100 строк перед ней, в которых наверняка будет
название пакета, содержащего файл FvwmAuto.1.bz2, и вывод будет
направлен в текстовый вьюер less.
Можно сделать даже так:
$ grep -B150 FvwmAuto.1.bz2 list | grep Name
Name═══════ : ftp═════════════════════════ Relocations: (not
relocateable)
Name═══════ : fvwm════════════════════════ Relocations: (not
relocateable)
Name═══════ : fvwm2═══════════════════════ Relocations: (not
relocateable)
Тут команда grep найдёт строку с именем файла, выведет 150 строк перед
ней, и вывод будет направлен в следующий grep, который выделит строки,
содержащие имена пакетов. Последнее выведенное имя и будет именем
необходимого пакета.
Ali Albakov
guldur at transit.samara.net