¿Cómo puedo saber de qué paquete Debian proviene un archivo?
¿Cómo puedo saber de qué paquete Debian proviene un archivo?
Respuestas:
Hay varias utilidades en Debian que realizan esta tarea; comprobar esta página para una descripción. 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, solo busca los paquetes instalados. La búsqueda es realizada por dlocate -S file.name
.
También puedes buscar paquetes en línea usando packages.debian.org servidor (el Buscar el contenido de los paquetes. sección).
apt-file
Es una buena idea actualizar primero:
sudo apt-get update
Mira qué apt-file
es para:
apt-cache show apt-file
Instalarlo:
sudo apt-get install apt-file
Leer datos de repositorios (esto funciona también sin sudo
pero crea el caché del usuario entonces; con sudo
el caché es de todo el sistema):
sudo apt-file update
Realizar búsqueda En este ejemplo queremos saber en qué paquete. xrandr
ejecutable es:
apt-file search xrandr
Enumera muchos paquetes con unxrandr
, lxrandr.mo
o source_lxrandr.py
. No es muy útil en nuestro caso. Búsqueda más inteligente:
apt-file search -x /xrandr$
( $
denota el final de la 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í lo hace. Podemos investigar más a fondo. 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
Al menos en mi Ubuntu, ambos parecen estar en el dpkg
paquete, por lo que no hay una ventaja real para cualquier específico ...
Instalacion de archivos generados. no será encontrado 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
obtenemos dpkg-query: no path found matching pattern /bin/nc
.
Esto sucede porque /bin/nc
es generado por el update-alternatives
llamar al script postinst que se ejecuta después de la instalación.
Funciona así porque otra versión de /bin/nc
es proporcionado por el netcat-traditional
paquete.
No creo que haya una forma general de encontrar tales archivos generados. En el caso específico de enlaces simbólicos alternativos, solo podemos seguir el enlace con readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
Al no estar familiarizado con Debian, me sorprendió 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:~$