Trova a quale pacchetto appartiene un file in Ubuntu / Debian?


300

Spesso mi trovo a mancare un programma, una pagina man o altri file quando lavoro sul mio sistema Ubuntu 8.04. Esiste un modo semplice per cercare quale pacchetto contiene un determinato file (sia che sia già installato o meno)? Forse qualche oscura opzione per apt o dpkg?



25
dpkg -S /path/to/filese hai installato il pacchetto.
Zaz,

Risposte:


247
apt-file search filename

o

apt-file search /path/to/file


Per installare apt-file, utilizzare:

sudo apt-get install apt-file

Dovrai aggiornare il suo database prima di poterlo usare:

sudo apt-file update

7
Cordiali saluti: apt-file sembra dipendere da Contents-amd64.gz fornito dai repository. E non tutti i repository di terze parti forniscono questo file.
Jokester,

3
Non ha funzionato per me. Ho aggiornato il database ma non restituisce nulla. dpkg -Sfunziona come descritto di seguito.
Northys,

404

(Debian / Ubuntu) Scopri a quale pacchetto appartiene un file :

dpkg -S /usr/bin/ls

'dpkg -S' corrisponde solo alla stringa che gli viene fornita, quindi usare semplicemente 'ls' come argomento corrisponde a qualsiasi file di qualsiasi pacchetto che abbia 'ls' in qualsiasi punto del nome file. Quindi di solito è una buona idea usare un percorso assoluto. Puoi vedere nel secondo esempio che 12 mila file noti per dpkg corrispondono alla stringa nuda 'ls'.


33
Questo è solo se i file già installati
John T

19
Al contrario apt-file, questo trova anche il pacchetto in un file se è stato installato manualmente tramite dpkg -i!
tanius,

4
Se si ottiene dpkg-query: nessun percorso trovato pattern matching provare questo : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo A

1
Strano, questo non ha funzionato per me: dpkg-query: no path found matching pattern /usr/bin/javasebbene ci sia un file a/usr/bin/java
nnyby

@nnyby Vedi commento di Pablo A
vog

19

pacchetti.debian.org è quello che uso sempre per svolgere questo compito. È superiore rispetto a apt-file perché può trovare anche parti di nomi di file. È anche collegato all'elenco dei pacchetti principali che elenca descrizioni, bug, ecc. Tutto sommato un buon sito Web. Non utile dalla riga di comando, ma comunque abbastanza utile.

Per la velocità, ho aggiunto l'URL ai segnalibri:

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

in Firefox e ho aggiunto "debfind" come parola chiave (fai clic su "altro" nel gestore dei segnalibri con l'hilighted), quindi posso semplicemente digitare "debfind" e funzionerà. Puoi cambiarlo da instabile a stabile o testare, se lo desideri, per altre versioni della distribuzione.


Tuttavia, non funziona con repository personalizzati.
Ctrl-C

Scarsa scelta per quanto riguarda l'automazione.
Alexander Shcheblikin,

11

Puoi anche usare dlocate. Dalla pagina man;

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

1
dlocateè anche il mio metodo preferito, molto affidabile.
Avio,

2
@Avio dlocatenon trova un pacchetto installato di recente a meno che non venga eseguito per sudo update-dlocatedbprimo. Il comando viene eseguito automaticamente ogni giorno in /etc/cron.daily/dlocate
jarno

4

Ho trovato Wajig ...

wajig whichpackage /path/to/file 

per esempio.

wajig whichpackage /etc/apt/sources.list

Wajig è un pratico strumento da riga di comando o console che racchiude tutta la bontà di apt-get, dpkg che non avresti mai voluto imparare. .

Per installare wajig usare:

apt-get install wajig

Il comando stesso 'quale pacchetto' dipende da apt-file

dovrai ancora aggiornare il suo database prima di poterlo usare: - Non so ancora se l'aggiornamento wajig che fa un aggiornamento apt-get aggiorna anche la cache dei file, ma mi aspetto che possa.

sudo wajig update

sudo apt-file update

(e Super Cow, Pasqua egss?!)


2

Similmente alla risposta di jamuraa per Debian, puoi anche andare su http://packages.ubuntu.com/ per Ubuntu. Dovrai scorrere un po 'verso il basso per trovare la casella di ricerca "Cerca il contenuto dei pacchetti" dove puoi inserire il percorso di un file.


Ora, se solo Raspbian ne avesse avuto uno :)
XTL


0

Il pacchetto command-not-found fornisce suggerimenti su potenziali comandi e sul nome del pacchetto debian. Funziona digitando il comando nella shell bash e osservando il suo output.

Ad esempio se il nome del comando è noto:

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

e se il comando non è noto, vengono applicate alcune ipotesi:

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

Tuttavia, ciò non funziona per file arbitrari, come l'OP richiesto.
un CVn del

Questo è un suggerimento problematico se il programma fa cose dannose e IS è installato. L'aggiunta -ho --helpalla fine sarebbe di aiuto. Se l'aggiunta -halla fine lo rendesse abbastanza sicuro, lo consiglierei, ma anche così non è un buon modo per ottenere ciò che l'OP chiede.
Dr Beco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.