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:
De esta manera ya podemos probar que funciona correctamente este popular paquete:
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.
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