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?
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
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.
También hay apt-file para buscar archivos en paquetes que no están instalados. Por ejemplo:
apt-file list packagename
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):
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
.
Ejemplo
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
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$'
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
.