it-swarm-es.com

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

Pregunta bastante simple: ¿hay algún comando de Shell (o método GUI) que pueda usar, dada la ruta 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 adicional: ¿qué pasa si es un archivo que no está instalado en mi sistema? ¿Existe, por ejemplo, un sitio web que me permita buscar un archivo y ver qué paquetes, si hay alguno, lo proporcionan?

446
David Z

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

De man dpkg:

 - S, --search nombre-búsqueda-patrón-búsqueda ... 
 Busque un nombre de archivo de los paquetes instalados. 

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 Búsqueda de paquetes de Ubunt

427
Ressu

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 los archivos proporcionados por paquetes que ya están instalados en su sistema, apt-cache es otra opción.

Para instalar _apt-file_, haga:

_Sudo apt-get install apt-file
_

Luego, debe 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 usar el sitio web Búsqueda de paquetes de Ubunt . Tienen la opción de "buscar el contenido de los paquetes" para un nombre de archivo específico.

235
jbowtie

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

apt-file list packagename
43
ptman

Puede buscar el contenido de los paquetes incluidos en las diversas versiones de Ubuntu en el sitio web Paquetes de Ubunt . Mire debajo del encabezado " Busque el contenido de los paquetes ".

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

http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&Arch=any

17
moberley

Te refieres a qué paquete y no a qué aplicación. La aplicación es su administrador de paquetes, p. Software Center.

Usando 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

Usando 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.

enter image description here

Ejemplo

enter image description here

13
A.B.

Esta es una extensión para excelente respuesta de Alexx Roche . Traté de hacer una edición a esa respuesta, pero fue rechazado (aunque no por Alexx)


Estaba tratando de localizar lo que instaló 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 las 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 (instalada) y solo el nombre binario para Dig no está instalado. Esto me ayudó a descubrir que necesitaba instalar dnsutils sin necesidad de buscar https://packages.ubuntu.com/#search_contents

3
Bruno Bronosky

Estaba tratando de localizar lo que instaló 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 las COSAS puedes usar

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

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

2
Rory