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-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 ).
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.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Dove bash è il nome del pacchetto.
dpkg-query -SE 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 dpkgpacchetto, 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/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)"
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:~$