Gestió de paquets a Linux

rpm -qa | grep httpd a Linux: saber si un paquet és instal·lat



La línia rpm -qa | grep httpd és la manera clàssica de saber si l’Apache (que a Red Hat, Rocky Linux, AlmaLinux i Fedora es diu httpd) està instal·lat, i quins paquets relacionats hi ha. Funciona igual per a qualsevol altre programa: només cal canviar la paraula que busques.

Què fa cada peça

PeçaQuè fa
rpm -qaQuery all: llista tots els paquets instal·lats, un per línia, amb nom, versió, revisió i arquitectura
`\`La canonada: passa la sortida de rpm a l’entrada de la comanda següent
grep httpdEs queda només amb les línies que contenen el text httpd

Exemple

En un Rocky Linux 9 amb l’Apache instal·lat:

$ rpm -qa | grep httpd
httpd-filesystem-2.4.62-13.el9_8.6.noarch
httpd-tools-2.4.62-13.el9_8.6.aarch64
rocky-logos-httpd-90.17-1.el9.noarch
httpd-core-2.4.62-13.el9_8.6.aarch64
httpd-2.4.62-13.el9_8.6.aarch64

Fixa’t en dues coses:

  • grep busca el text en qualsevol part del nom: per això surt rocky-logos-httpd, que no és l’Apache sinó les imatges de la pàgina de benvinguda.
  • En canvi, no surt mod_ssl, tot i que és un mòdul de l’Apache, perquè el seu nom no conté httpd. Aquesta comanda troba noms, no relacions entre paquets.

Si no surt res, no hi ha cap paquet instal·lat amb aquest text al nom.

Maneres més precises de fer-ho

Preguntar directament per un paquet. Si saps el nom exacte, no cal llistar-los tots:

$ rpm -q httpd
httpd-2.4.62-13.el9_8.6.aarch64

$ rpm -q nginx
package nginx is not installed

A més, rpm -q torna el codi de sortida 0 si el paquet hi és i 1 si no, cosa que el fa ideal per a scripts:

if rpm -q httpd >/dev/null; then
    echo "L'Apache és instal·lat"
fi

Fer servir un patró de rpm en lloc de grep. rpm -qa accepta comodins, que s’apliquen al principi del nom (posa’l entre cometes perquè el shell no l’expandeixi):

$ rpm -qa 'httpd*'
httpd-filesystem-2.4.62-13.el9_8.6.noarch
httpd-tools-2.4.62-13.el9_8.6.aarch64
httpd-core-2.4.62-13.el9_8.6.aarch64
httpd-2.4.62-13.el9_8.6.aarch64

Cercar sense distingir majúscules, per si no saps com s’escriu el nom:

rpm -qa | grep -i ssl

Veure-ho amb dnf, que també t’indica de quin repositori ve cada paquet:

$ dnf list --installed 'openssl*'
Installed Packages
openssl.aarch64               1:3.5.5-2.el9_8  @baseos
openssl-fips-provider.aarch64 1:3.5.5-2.el9_8  @baseos
openssl-libs.aarch64          1:3.5.5-2.el9_8  @baseos

Saber quan s’ha instal·lat, combinant-ho amb --last:

rpm -qa --last | grep httpd

I a Debian o Ubuntu?

L’Apache s’hi diu apache2 i la consulta equivalent es fa amb dpkg:

dpkg -l | grep apache2

O, més precís, dpkg -s apache2 (vegeu la comanda dpkg).

Comandes relacionades