Principales usos del comando dpkg en Linux

En esta entrada vamos a ver los principales usos del comando dpkg en Linux. Tal y como suguiere el propio nombre, se trata de gestionar los paquetes DEB; típicos de sistemas como Debian, Raspbian, Ubuntu o Linux Mint, por normbrar los más populares.

¿De que trata el comando dpkg?

Dpkg es una herramienta para instalar, compilar, eliminar y manipular los paquetes, en sistemas que utilizan el sistema de paquetes DEB. Dpkg se utiliza desde la línea de comandos, para utilizar este comando debemos añadir una serie de parámetro y opciones, como veremos más adelante.

Seguramente ya estarás acostumbrado a trabajar con apt, aptitude o tasksel, son diferentes maneras de trabajar con los paquetes DEB. Aún así es importante conocer como trabajar con dpkg, que es la forma «genuina» de trabajar con este tipo de paquetes. Además, si estás pensando en sacarte la certificación LPIC 1, deberás conocer sus usos básicos.

Instalar un paquete

Para realizar un instalación hemos de utilizar el parámetro -i. Por ejemplo si queremos instalar el paquete de Neofetch, que nos hemos descargado de la web Debian.pkgs.org, lo haríamos de la siguiente manera:

dpkg -i neofetch_6.0.0-2_all.deb

Las para las pruebas estoy utilizando un sistema operativo Raspbian, sobre una RaspBerryPi 4.

Con el siguiente resultado:

Ejemplo instalación de Neofetch utilizando dpkg

De esta manera ya podemos probar que funciona correctamente este popular paquete:

Uso de neofetch en RaspBerryPi

Listar los paquetes instalados

Si queremos listar los paquetes instalados usaremos el parámetro -l, como sigue:

dpkg -l

Con un resultado similar al siguiente:

Deseado=desconocido(U)/Instalar/eliminaR/Purgar/retener(H)
| Estado=No/Inst/ficheros-Conf/desempaqUetado/medio-conF/medio-inst(H)/espera-disparo(W)/pendienTe-disparo
|/ Err?=(ninguno)/requiere-Reinst (Estado,Err: mayúsc.=malo)
||/ Nombre                               Versión                             Arquitectura Descripción
+++-====================================-===================================-============-==============================================
ii  adduser                              3.118                               all          add and remove users and groups
ii  adwaita-icon-theme                   3.30.1-1                            all          default icon theme of GNOME
ii  alacarte                             3.11.91-4+rpt1                      all          easy GNOME menu editing tool
ii  alsa-utils                           1.1.8-2                             armhf        Utilities for configuring and using ALSA
ii  apparmor                             2.13.2-10                           armhf        user-space parser utility for AppArmor
ii  apt                                  1.8.2                               armhf        commandline package manager
ii  apt-listchanges                      3.19                                all          package change history notification tool
ii  apt-utils                            1.8.2                               armhf        package management related utility programs
ii  arandr                               0.1.9-2+rpt11                       all          Simple visual front end for XRandR
ii  aspell                               0.60.7~20110707-6                   armhf        GNU Aspell spell-checker
ii  aspell-en                            2018.04.16-0-1                      all          English dictionary for GNU Aspell
ii  audacious                            3.10.1-1                            armhf        small and fast audio player which supports lot
ii  audacious-plugins:armhf              3.10.1-1                            armhf        Base plugins for audacious
ii  audacious-plugins-data               3.10.1-1                            all          Data files for Audacious plugins
ii  avahi-daemon                         0.7-4+b1                            armhf        Avahi mDNS/DNS-SD daemon
ii  base-files                           10.3+rpi1+deb10u3                   armhf        Debian base system miscellaneous files
ii  base-passwd                          3.5.46                              armhf        Debian base system master password and group f
ii  bash                                 5.0-4                               armhf        GNU Bourne Again SHell
ii  bash-completion                      1:2.8-6                             all          programmable completion for the bash shell
ii  bind9-host                           1:9.11.5.P4+dfsg-5.1                armhf        DNS lookup utility (deprecated)
ii  binutils                             2.31.1-16+rpi2                      armhf        GNU assembler, linker and binary utilities
ii  binutils-arm-linux-gnueabihf         2.31.1-16+rpi2                      armhf        GNU binary utilities, for arm-linux-gnueabihf
ii  binutils-common:armhf                2.31.1-16+rpi2                      armhf        Common files for the GNU assembler, linker and
ii  blt                                  2.5.3+dfsg-4                        armhf        graphics extension library for Tcl/Tk - run-ti

También podemos listar los paquetes relacionados con un servicio en particular, como por ejemplo bind, que se encarga de trabajar con los dns.

Filtramos por un paquete en particular

Desinstalar un paquete

Si queremos desinstalar un paquete que ya no necesitamos, debemos utilizar el parámetro-r, así:

sudo dpkg -r neofetch

Con el resultado:

(Leyendo la base de datos ... 136589 ficheros o directorios instalados actualmente.)
Desinstalando neofetch (6.0.0-2) ...
Procesando disparadores para man-db (2.8.5-2) ...

Ver el contenido de un paquete

Para ver el contenido de un paquete usamos -c, como parámetro. A modo de ejemplo, vamos a utilizar el paquete de instalación que nos hemos descargado antes:

pi@raspberrypi:~ $ sudo dpkg -c neofetch_6.0.0-2_all.deb
drwxr-xr-x root/root         0 2019-01-09 04:20 ./
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/bin/
-rwxr-xr-x root/root    283987 2019-01-08 17:32 ./usr/bin/neofetch
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/share/
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/share/doc/
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/share/doc/neofetch/
-rw-r--r-- root/root       660 2019-01-09 04:20 ./usr/share/doc/neofetch/changelog.Debian.gz
-rw-r--r-- root/root     34414 2019-01-08 17:32 ./usr/share/doc/neofetch/changelog.gz
-rw-r--r-- root/root      1227 2019-01-09 04:20 ./usr/share/doc/neofetch/copyright
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/share/man/
drwxr-xr-x root/root         0 2019-01-09 04:20 ./usr/share/man/man1/
-rw-r--r-- root/root      3492 2019-01-09 04:20 ./usr/share/man/man1/neofetch.1.gz

Se observa que además delbinario el paquete DEB también lleva la documentación y la información para la página de man.

Comprobar si un paquete este instalado

Antes de buscar un paquete en la red lo primero que haremos es ver si ya lo tenemos instalado. Para ello debemos utilizar el parámetro -s, por ejemplo:

sudo dpkg -s mariadb

Con el resultado:

pi@raspberrypi:~ $ sudo dpkg -s mariadb
dpkg-query: el paquete `mariadb' no está instalado y no hay ninguna información disponible.
Use dpkg --info (= dpkg-deb --info) to examine archive files

Y si buscamos un paquete que sí tenemos instalado:

Buscar la localización de un paquete

Ya sabemos que con herramientas como which o whereis podemos saber la ubicación de un paquete en concreto si es un binario. Aún así con dpkg también podemos saber la ubicación del binario y la documentación de un paquete.  Para ello utilizamos -L, como parámetro:

pi@raspberrypi:~ $ sudo dpkg -L hostname
/.
/bin
/bin/hostname
/usr
/usr/share
/usr/share/doc
/usr/share/doc/hostname
/usr/share/doc/hostname/changelog.gz
/usr/share/doc/hostname/copyright
/usr/share/man
/usr/share/man/man1
/(...)

Instalar un paquete desde un directorio

Si tenemos una serie de paquetes en un directorio y sus subdirectorios, podemos indicar que queremos instalar todos los que tengan la extensión DEB. Para ello podemos utilizar el parámetro «-R» junto con «–install«, como sigue:

pi@raspberrypi:~ $ dpkg -R --install paquetesdeb/

Descomprimir un paquete sin instalar

Hemos vista antes que dentro de un paquete DEB se encuentran otra serie de paquetes comprimidos. Por lo que podemos querer descomprimir el fichero pero sin que se instale el paquete. Para ello utilizaremos el parémetro «--unpack» Por ejemplo:

pi@raspberrypi:~ $ sudo dpkg --unpack neofetch_6.0.0-2_all.deb
(Leyendo la base de datos ... 136589 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar neofetch_6.0.0-2_all.deb ...
Desempaquetando neofetch (6.0.0-2) sobre (6.0.0-2) ...
Procesando disparadores para man-db (2.8.5-2) ...

Reconfigurar un paquete ya instalado

Puede que nos interese cambiar la configuración de un paquete ya instalado, entonces necesitamos utilizar el parámetro «–configure»

pi@raspberrypi:~ $ sudo dpkg --configure neofetch
Configurando neofetch (6.0.0-2) ...

Consultar la licencia/h4>

Puede ser interesante comprobar la licencia del paquete dpkg con --version

pi@raspberrypi:~ $ sudo dpkg --version
Programa de gestión de paquetes de Debian `dpkg' versión 1.19.7 (armhf).
Esto es software libre; consulte la Licencia Pública General de GNU versión 2 o
posterior para conocer las condiciones de copia. No hay NINGUNA garantía

Ayuda de dpkg

Si queremos obtener ayuda para saber como utilizar la herramienta, podemos consultar la página de man o bien el parámetro --help

pi@raspberrypi:~ $ sudo dpkg --help

Y esto es todo. ¿Crees que me he dejado algún uso? Puedes enriquecer la entrada con tus comentarios.

Derechos de la imagen de la entrada: De GNOME Project, CC BY-SA 3.0