Aplikacja rpm w dystrybucjach opartych o RedHat odpowiada za zarządzeni zainstalowanymi pakietami z oprogramowaniem. Można za jej pomocą m.in. instalować, usuwać, aktualizować oprogramowanie przygotowane przez twórców dystrybucji. Aplikacja rpm gromadzi także informacje o wszystkich zainstalowanych programach, łącznie ich plikami konfiguracyjnymi, z dokumentacją i innymi. Aby móc poznać te informacji, posiada ona rozbudowany mechanizm zadawania zapytań, który zostanie przedstawiony poniżej.

Aby przełączyć polecenie rpm w tryb zadawania zapytań, należy użyć przełącznika -q lub --query łącznie z dodatkowymi parametrami, które dzielą się na dwie grupy:

  • wybór pakietów do pobrania informacji
  • wybór informacji do wyświetlenia

Ogólna definicja polecenia wygląda następująco:

rpm {-q|--query} [select-options] [query-options]

Wybór pakietów do pobrania informacji

  • podanie listy pakietów

    Najprostszym sposobem jest podanie listy pakietów, o których chcemy wyświetlić szczegółowe informacje:

    # rpm -q bash mc
    bash-3.2-24.el5
    package mc is not installed

    Wyświetlone zostaną wersje zainstalowanych pakietów lub też informacje o braku danego pakietu.

    Niestety, za pocą tego polecenia nie można korzystać ze znaku gwiazdki (‚*’) w celu wyboru listy pakietów:

    # rpm -q 'gnome*'
    package gnome* is not installed
  • -awybór wszystkich pakietów

    Przełącznik ten powoduje wybranie wszystkich zainstalowanych pakietów:

    # rpm -q -a | head
    rmt-0.4b41-4.el5
    desktop-backgrounds-basic-2.0-37
    rootfiles-8.1-1.1.1
    ...

    Teraz można dowiedzieć się, jakie pakiety zaczynają się od słów gnome:

    # rpm -q -a | grep '^gnome'
    gnome-menus-2.16.0-2.fc6
    gnome-keyring-0.6.0-1.fc6
    gnome-vfs2-2.16.2-4.el5
    gnome-utils-2.16.0-5.el5
    ....
  • -fpakiet, do którego należy podany plik
    Polecenie to pozwala na poznanie, przy użyciu jakiego pakietu został zainstalowany podany plik. Czasami się zdarza, że nie poznanie nazwy pakietu nie wcale tak intuicyjne jak się wydaje:

    # rpm -qf /etc/sysctl.conf
    initscripts-8.45.30-2.el5

    # rpm -qf /bin/ls
    coreutils-5.97-23.el5

    Oczywiście, nie każdy plik, który znajduje się na dysku jest składnikiem jakiegoś pakietu. Jeżeli rpm nie potrafi odnaleźć właściciela, wyświetli stosowny komunikat:

    # rpm -qf /etc/hosts
    file /etc/hosts is not owned by any package
  • -pwybór pakietu RPM
    Można także zadąć zapytania do wybranego pakietu RPM. Wtedy rpm zamiast sprawdzać informacje w swojej bazie danych, odczyta je po prostu z podanego pakietu:

    # rpm -q -p bash-3.2-24.el5.i386.rpm
    bash-3.2-24.el5

    Można się także zapytać o grupę pakietów:

    # rpm -q -p x3270-*.rpm
    x3270-3.3.4p7-3.el5.4
    x3270-text-3.3.4p7-3.el5.4
    x3270-x11-3.3.4p7-3.el5.4
  • -gpakiety należące do tej samej grupy
    Podczas tworzenia pakietów należy wybrać, do jakiej grupy będzie należał dany pakiet. Pozwala to na łatwe pogrupowanie np. pakietów spełniających podobne funkcje lub należące do jakiejś grupy:

    # rpm -qg "System Environment/Shells"
    bash-3.2-24.el5
    tcsh-6.14-14.el5
    busybox-1.2.0-7.el5
    zsh-4.2.6-3.el5

Źródła

  • Strona MAN: rpm(8)
  • The Parts of an RPM Query