¿Cómo puedo averiguar de qué paquete de Debian proviene un archivo?
Hay varios utilities en Debian que realizan esta tarea; Consulte esta página para obtener una descripción. Voy a mencionar dos de ellos, apt-file
y dlocate
.
apt-file
busca su caché interno, lo que le permite no instalar todos los paquetes que desea buscar. A continuación encontrará una guía más detallada.
dlocate
es una alternativa rápida a dpkg -L
(el comando que enumera el contenido del paquete), y como tal, busca sólo los paquetes instalados. La búsqueda se realiza por dlocate -S file.name
.
También puede buscar paquetes en línea usando el servidor packages.debian.org (la sección Buscar los contenidos de paquetes ).
apt-file
Es una buena idea actualizar primero:
sudo apt-get update
Vea lo que apt-file
es para:
apt-cache show apt-file
Instalarlo:
sudo apt-get install apt-file
Leer los datos de los repositorios (esto también funciona sin sudo
pero crea la caché del usuario entonces, con sudo
la caché es a nivel de sistema):
sudo apt-file update
Realice la búsqueda. En este ejemplo queremos saber en qué paquete ejecutable xrandr
es:
apt-file search xrandr
Enumera muchos paquetes con unxrandr
, lxrandr.mo
o lxrandr.mo
. No es muy útil en nuestro caso. Búsqueda más inteligente:
apt-file search -x /xrandr$
( $
Denota final de línea). Ejemplo de salida:
bash-completion: /usr/share/bash-completion/completions/xrandr x11-xserver-utils: /usr/bin/xrandr
El primer resultado no parece ejecutable, el segundo sí. Podemos investigar más. Correr:
apt-cache show x11-xserver-utils
¡Bingo! Este es el paquete.
user@host:~$ dpkg-query -S /bin/bash bash: /bin/bash
Donde bash es el nombre del paquete.
Otra alternativa:
$ dpkg -S /bin/bash bash: /bin/bash
En mi Ubuntu por lo menos, ambos parecen estar en el paquete dpkg
, por lo que ninguna ventaja real a ninguna específica …
Los archivos generados por la instalación no serán encontrados por dpkg -S
, como se menciona en: https://askubuntu.com/a/667227/52975
Por ejemplo, /bin/nc
aparece cuando instala el paquete netcat-openbsd
.
Pero sobre:
dpkg -S /bin/nc
dpkg-query: no path found matching pattern /bin/nc
.
Esto ocurre porque /bin/nc
es generado por la llamada update-alternatives
en el script postinst que se ejecuta después de la instalación.
Funciona así porque otra versión de /bin/nc
es proporcionada por el paquete netcat-traditional
.
No creo que haya una forma general de encontrar esos archivos generados. En el caso específico de enlaces simbólicos alternativos, sólo podemos seguir el enlace con readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
Al no estar familiarizado con Debian, estaba desconcertado cuando intenté esto:
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer dpkg-query: no path found matching pattern /usr/bin/vncviewer kearnsp@xubuntuvb:~$
Un poco de investigación y encontré el paquete:
kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer xvnc4viewer: /usr/bin/xvnc4viewer kearnsp@xubuntuvb:~$