Come faccio a sapere da quale pacchetto Debian proviene un file?
Come faccio a sapere da quale pacchetto Debian proviene un file?
Risposte:
Esistono diversi programmi di utilità in Debian che eseguono questo compito; controlla questa pagina per una descrizione. Ne citerò due apt-file
e dlocate
.
apt-file
cerca 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 ).
apt-file
È una buona idea aggiornare prima:
sudo apt-get update
Vedi a cosa apt-file
serve:
apt-cache show apt-file
Installalo:
sudo apt-get install apt-file
Leggi i dati dai repository (funziona anche senza, sudo
ma crea quindi la cache dell'utente; con sudo
la cache è a livello di sistema):
sudo apt-file update
Esegui ricerca. In questo esempio vogliamo sapere in quale pacchetto xrandr
eseguibile è:
apt-file search xrandr
Elenca molti pacchetti con unxrandr
, lxrandr.mo
o 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.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Dove bash è il nome del pacchetto.
dpkg-query -S
E ti invia lungo il percorso sbagliato dell'installazione dei pacchetti opzionali ..
Un'altra alternativa:
$ dpkg -S /bin/bash
bash: /bin/bash
Sul mio Ubuntu almeno, entrambi sembrano essere nel dpkg
pacchetto, quindi nessun vero vantaggio per uno specifico ...
I file generati dall'installazione non saranno trovati da dpkg -S
, come menzionato in: https://askubuntu.com/a/667227/52975
Ad esempio, /bin/nc
appare 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/nc
viene generato dalla update-alternatives
chiamata nello script postinst che viene eseguito dopo l'installazione.
Funziona così perché un'altra versione di /bin/nc
è fornita dal netcat-traditional
pacchetto.
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)"
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:~$