¿Cómo encuentro el paquete que proporciona un archivo?

379

Pregunta bastante simple: ¿hay algún comando de shell (o método de GUI) que pueda usar, dado el camino a un archivo en mi sistema, me dice qué paquete lo puso allí? Suponiendo que el archivo en realidad proviene de un paquete, es decir.

Pregunta de bonificación: ¿y si es un archivo que no está instalado en mi sistema? ¿Hay, por ejemplo, un sitio web que me permita buscar un archivo y ver qué paquetes, si es que hay, lo proporcionan?

    
pregunta David Z 30.07.2010 - 10:10

8 respuestas

356

Puede usar el comando dpkg para averiguar qué paquete instalado posee un archivo:

de man dpkg :

-S, --search filename-search-pattern...
                  Search for a filename from installed packages.

Ejemplo:

$ dpkg -S /bin/ls
coreutils: /bin/ls

Puede buscar con una ruta completa o solo con el nombre del archivo.

Si desea buscar archivos que aún no están instalados en su computadora, puede usar la Búsqueda de paquetes de Ubuntu

    
respondido por el Ressu 30.07.2010 - 10:42
187

El comando apt-file puede hacer esto por usted desde la línea de comandos. Lo uso con frecuencia cuando construyo paquetes desde la fuente. Para archivos provistos por paquetes que ya están instalados en su sistema, apt-cache es otro elección.

Para instalar apt-file , do:

sudo apt-get install apt-file

Luego, necesita actualizar su base de datos:

apt-file update

Y, finalmente, busque el archivo:

$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h

Sin embargo, una forma mucho más amigable es utilizar el sitio web Ubuntu Packages Search . Tienen una opción para "buscar el contenido de los paquetes" para un nombre de archivo específico.

    
respondido por el jbowtie 11.08.2010 - 04:43
35

También hay un archivo apt para buscar archivos en paquetes que no están instalados. Por ejemplo:

apt-file list packagename
    
respondido por el ptman 30.07.2010 - 10:49
16

Puede buscar los contenidos de los paquetes incluidos en los diversos lanzamientos de Ubuntu en el sitio web Ubuntu Packages . Mire debajo del encabezado " Busque los contenidos de los paquetes ".

Por ejemplo, aquí están los resultados de búsqueda de libnss3.so en lúcido (10.04):

enlace

    
respondido por el moberley 11.08.2010 - 04:42
10

¿Qué paquete y qué aplicación no? La aplicación es su administrador de paquetes, p. Software Center .

Usar dpkg :

dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs

Ejemplo

% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

Usar apt-file :

apt-file search /usr/lib/tracker/tracker-store

o también posible:

apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$

Ejemplo

% apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

O en línea aquí , en la sección Search the contents of packages .

Ejemplo

    
respondido por el A.B. 29.11.2015 - 16:57
2

Estaba intentando rastrear qué había instalado which en mi sistema. Después de un poco de trabajo, creé apt-whatprovides

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY=$(realpath $(which [email protected]))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}

Aunque para la mayoría de COSAS puedes usar

apt-file search $(realpath $(which THING))|grep 'THING$'
    
respondido por el Alexx Roche 17.03.2018 - 16:25
2

Esta es una extensión de la excelente respuesta de Alexx Roche . Traté de editar esa respuesta, pero se rechazó (aunque no por Alexx)

Estaba intentando rastrear qué había instalado which en mi sistema. Después de un poco de trabajo, creé /usr/local/bin/apt-whatprovides

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY="$(realpath $(which [email protected]) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="[email protected]"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Aunque para la mayoría de las cosas que están instaladas, puedes usar:

apt-file search $(realpath $(which THING)) | grep 'THING$'

Para COSAS que no están instaladas, puede usar:

apt-file search THING | grep '/THING$'

El script apt-whatprovides funciona para archivos que están y no están en su sistema. Por ejemplo, mi sistema carecía de dig pero tenía ping , así que esto fue lo que resultó:

[email protected]:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

[email protected]:~ $ apt-whatprovides dig
Searching for dig
dnsutils: /usr/bin/dig
epic4: /usr/share/epic4/script/dig
epic4-help: /usr/share/epic4/help/8_Scripts/dig
knot-dnsutils: /usr/bin/dig

Observe que Searching for es una ruta completa para ping (instalado) y solo el nombre binario para dig no está instalado. Esto me ayudó a descubrir que necesitaba instalar dnsutils sin necesidad de ir a buscar enlace

    
respondido por el Bruno Bronosky 18.07.2018 - 07:45
1

Una razón por la que deberías hacer esto es que si estás compilando un software que ya tiene un paquete ubuntu, puedes ejecutar apt-get build-dep $PACKAGENAME . Eso instalará todos los paquetes que necesita para compilar $PACKAGENAME .

    
respondido por el Rory 11.08.2010 - 21:31

Lea otras preguntas en las etiquetas