Come faccio a sapere quale pacchetto possiede un file?


Risposte:


44

Esistono diversi programmi di utilità in Debian che eseguono questo compito; controlla questa pagina per una descrizione. Ne citerò due apt-filee dlocate.

apt-filecerca nella sua cache interna, permettendoti così di non installare tutti i pacchetti che vuoi cercare. Di seguito troverai una guida più dettagliata.

dlocateè una rapida alternativa a dpkg -L(il comando che elenca i contenuti del pacchetto) e, pertanto, cerca solo i pacchetti installati. La ricerca viene eseguita da dlocate -S file.name.

Inoltre puoi cercare i pacchetti online usando il server packages.debian.org (la sezione Cerca il contenuto dei pacchetti ).


Installazione e utilizzo apt-file

È una buona idea aggiornare prima:

sudo apt-get update

Vedi a cosa apt-fileserve:

apt-cache show apt-file

Installalo:

sudo apt-get install apt-file

Leggi i dati dai repository (funziona anche senza, sudoma crea quindi la cache dell'utente; con sudola cache è a livello di sistema):

sudo apt-file update

Esegui ricerca. In questo esempio vogliamo sapere in quale pacchetto xrandreseguibile è:

apt-file search xrandr

Elenca molti pacchetti con unxrandr, lxrandr.moo source_lxrandr.py. Non molto utile nel nostro caso. Ricerca più intelligente:

apt-file search -x /xrandr$

( $indica la fine della linea). Esempio di output:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

Il primo risultato non sembra eseguibile, il secondo lo fa. Possiamo indagare ulteriormente. Correre:

apt-cache show x11-xserver-utils

Bingo! Questo è il pacchetto.


Il primo link in questa risposta ( debianhelp.co.uk/findfile.htm ) sembra ora essere defunto.
rogpeppe,

123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Dove bash è il nome del pacchetto.


4
Questa risposta è di gran lunga migliore di quella accettata!
Bex,

Corretta. È un peccato che la "risposta accettata" ottenga un segno di spunta verde, che è anche una "risposta corretta". In questo caso, la risposta accettata non è presente dpkg-query -SE ti invia lungo il percorso sbagliato dell'installazione dei pacchetti opzionali ..
Scott Prive

42

Un'altra alternativa:

$ dpkg -S /bin/bash
bash: /bin/bash

Sul mio Ubuntu almeno, entrambi sembrano essere nel dpkgpacchetto, quindi nessun vero vantaggio per uno specifico ...


14

I file generati dall'installazione non saranno trovati da dpkg -S, come menzionato in: https://askubuntu.com/a/667227/52975

Ad esempio, /bin/ncappare quando si installa il pacchetto netcat-openbsd.

Ma su:

dpkg -S /bin/nc

noi otteniamo dpkg-query: no path found matching pattern /bin/nc.

Ciò accade perché /bin/ncviene generato dalla update-alternativeschiamata nello script postinst che viene eseguito dopo l'installazione.

Funziona così perché un'altra versione di /bin/ncè fornita dal netcat-traditionalpacchetto.

Non penso che ci sia un modo generale per trovare file così generati. Nel caso specifico di collegamenti simbolici alternativi, possiamo semplicemente seguire il collegamento con readlink -f:

dpkg -S "$(readlink -f /bin/nc)"

2

Non avendo familiarità con Debian, ero sconcertato quando ho provato questo:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

Un po 'di indagine e ho trovato il pacchetto:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
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.