¿A qué paquete pertenece un archivo en Ubuntu / Debian?


300

Frecuentemente me encuentro faltando un programa, página de manual u otro archivo cuando trabajo en mi sistema Ubuntu 8.04. ¿Hay alguna manera simple de buscar qué paquete contiene un archivo dado (ya sea que esté instalado o no)? ¿Quizás alguna opción oscura para apt o dpkg?



25
dpkg -S /path/to/fileSi tienes el paquete instalado.
Zaz

Respuestas:


247
apt-file search filename

o

apt-file search /path/to/file


Para instalar apt-file, use:

sudo apt-get install apt-file

Deberá actualizar su base de datos antes de poder usarla:

sudo apt-file update

77
FYI: apt-file parece depender de Contents-amd64.gz provisto por los repositorios. Y no todos los repositorios de terceros proporcionan este archivo.
Bromista

3
A mi no me sirvió. Actualicé la base de datos pero no devuelve nada. dpkg -Sfunciona como se describe a continuación.
Northys

404

(Debian / Ubuntu) Descubre a qué paquete pertenece un archivo :

dpkg -S /usr/bin/ls

'dpkg -S' solo coincide con la cadena que le proporcionó, por lo que solo usando 'ls' como argumento coincide con cualquier archivo de cualquier paquete que tenga 'ls' en cualquier parte del nombre de archivo. Por lo general, es una buena idea usar una ruta absoluta. Puede ver en el segundo ejemplo que 12 mil archivos que se sabe que dpkg coinciden con la cadena desnuda 'ls'.


33
Eso es solo si los archivos ya están instalados
John T

19
Por el contrario apt-file, esto también encuentra el paquete en un archivo si se instaló manualmente a través de dpkg -i!
tanius

44
Si obtiene dpkg-query: no hay camino se encontró coincidencia de patrones intente esto : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo A

1
Extraño, esto no funcionó para mí: dpkg-query: no path found matching pattern /usr/bin/javaaunque hay un archivo en/usr/bin/java
nnyby

@nnyby Ver comentario de Pablo A
vog

19

packages.debian.org es lo que siempre uso para realizar esta tarea. Es superior a apt-file porque también puede encontrar partes de nombres de archivos. También está vinculado a la lista de paquetes principales que enumerará descripciones, errores, etc. En general, es un buen sitio web. No es tan útil desde la línea de comandos, pero sigue siendo bastante útil.

Para la velocidad, marqué la url:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

en Firefox, y agregué "debfind" como palabra clave (haga clic en "más" en el administrador de marcadores con esta opción resaltada), así que simplemente puedo escribir "debfind" y funcionará. Puede cambiar 'suite' de inestable a estable o probar si lo desea, para otras versiones de la distribución.


Sin embargo, no funciona con repositorios personalizados.
Ctrl-C

Mala elección en lo que respecta a la automatización.
Alexander Shcheblikin

11

También puedes usar dlocate. Desde la página del manual;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.

1
dlocateTambién es mi método favorito, muy confiable.
Avio

2
@Avio dlocateno encuentra un paquete instalado recientemente a menos que ejecute sudo update-dlocatedbprimero. El comando se ejecuta automáticamente diariamente en /etc/cron.daily/dlocate
jarno el

4

Encontré a Wajig ...

wajig whichpackage /path/to/file 

p.ej.

wajig whichpackage /etc/apt/sources.list

Wajig es una práctica herramienta de línea de comandos o consola que envuelve todas las bondades de apt-get, dpkg que nunca quisiste aprender. .

Para instalar wajig use:

apt-get install wajig

Ese comando 'whichpackage' en sí mismo depende de apt-file

aún necesitará actualizar su base de datos antes de poder usarla: - Todavía no sé si wajig update whixh hace una actualización de apt-get también actualiza el caché del archivo, pero espero que lo haga.

sudo wajig update

sudo apt-file update

(y Super Cow, Pascua egss?!)


2

De manera similar a la respuesta de jamuraa para Debian, también puede ir a http://packages.ubuntu.com/ para Ubuntu. Tendrá que desplazarse un poco hacia abajo para encontrar el cuadro de búsqueda "Buscar en el contenido de los paquetes" donde puede ingresar la ruta de un archivo.


Ahora si Raspbian también tuviera uno :)
XTL


0

El paquete de comando no encontrado le da pistas sobre posibles comandos y el nombre del paquete de Debian. Funciona escribiendo el comando en el shell bash y mirando su salida.

Por ejemplo, si se conoce el nombre del comando:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

y si no se conoce el comando, se aplican algunas conjeturas:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found

Sin embargo, esto no funciona para archivos arbitrarios, como el OP solicitado.
un CVn

Este es un consejo problemático si el programa hace cosas dañinas y está instalado. Agregar -ho --helpal final ayudaría un poco. Si agregar -hal final lo haría lo suficientemente seguro, lo recomendaría, pero aun así no es una buena manera de lograr lo que pide el OP.
Dr Beco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.