Come elencare i file di un pacchetto Debian senza installazione


Risposte:


340

dpkg -c(o --contents) elenca il contenuto di un file del pacchetto .deb (è un front-end per dpkg-deb.)

dpkg -c package_file.deb

Per lavorare direttamente con i nomi dei pacchetti anziché con i file dei pacchetti, è possibile utilizzare apt-file. (Potrebbe essere necessario installare apt-fileprima il pacchetto.)

sudo apt-file update        
apt-file list package_name

Come indicato nel primo commento, apt-file elenca i contenuti per i pacchetti nei repository Apt già configurati. È irrilevante se un determinato pacchetto è installato o meno.


17
anche apt-file deve essere aggiornato ( sudo apt-file update) ed elenca solo i contenuti per i pacchetti nei repository Apt già configurati.
Quack Quixote,

1
@quackquixote: in Ubuntu 12.04 è automatico
confiq

1
dpkg -csimpatico!
d -_- b

2
La risposta del file Apt presuppone che il pacchetto provenga da un repository configurato anziché da un .debfile scaricato separatamente. La domanda originale è ambigua.
Zoredache,

5
@confiq, non dai miei test. Sono in esecuzione 12.04.4 e dice ancora "E: La cache è vuota. Devi prima eseguire 'apt-file update'."
Matthew Flaschen,

58

Usa --contentsinvece di -L:

dpkg --contents PACKAGENAME

Se usato in questo modo, dpkgfunge da front-end per dpkg-deb, quindi usa man dpkg-debper vedere tutte le opzioni.

È inoltre possibile utilizzare un browser di archivio per visualizzare il contenuto del pacchetto.


2
Questo non funziona se non l'ho installato per primo e poi disinstallato.
Xiè Jìléi,

3
dovrebbe funzionare bene se gli dai un file .deb come argomento (invece di PACKAGENAME, dagli il PACKAGE-DEB-FILE).
Quack Quixote,

3
Questa risposta è sbagliata Devi prima aver installato il pacchetto. Se non lo hai installato, non hai un file .deb.
Neil,

Questo comando funziona per me. Ad esempio, ho scaricato google-chrome-stable_current_amd64.deb da Google. Quindi ha emesso il comando: dpkg --contents google-chrome-stable_current_amd64.debed ha elencato tutti i file che installerà (principalmente a /opt/google/chrome), nessuno dei quali è attualmente installato sul mio sistema mentre lo scrivo. (Sto eseguendo Xubuntu 11.10 se questo è importante.)
Quux00

10
@Neil, la risposta non è sbagliata. Solo perché hai un file deb, non significa che sia installato. apt-file necessita dell'intero pacchetto build-essential. OO
d -_- b

21

dpkg --contentsti permetterà di guardare il pacchetto disinstallato. Se .deb non è ancora sul tuo sistema, fallo

apt-get --download-only install pkgname

Il pacchetto verrà scaricato /var/cache/apt/archivesma non installato.


3
Posso semplicemente elencare i contenuti senza scaricarli? Se ho una connessione molto lenta e se il pacchetto è troppo grande per essere scaricato. Se il file .deb ha un'intestazione di file in cui va l'elenco dei contenuti, suppongo che il download dell'intero pacchetto potrebbe non essere necessario. È possibile?
Xiè Jìléi,

13

Il modo migliore sarebbe quello di navigare direttamente nel repository dei pacchetti:

http://packages.debian.org/[distro name]/all/[package name]/filelist

Esempio:

http://packages.debian.org/wheezy/all/transmission-common/filelist


E per evitare di lasciare il terminale, è possibile utilizzare ad es. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/(Purché sia ​​stato lynxinstallato).
Ruslan,

8

Ho preso l'idea http di @ baldoz e l'ho generalizzata per Ubuntu e Debian, l' ho aggiunta un po ' sede l'ho avvolta in una funzione bash one-liner:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu https://packages.ubuntu.com ' -e 's Debian https://packages.debian.org ')/$(lsb_release -sc)/all/$1/filelist | sed -n -e '/<pre>/,/<\/pre>/p' | sed -e 's/<[^>]\+>//g' -e '/^$/d'; }

Uso:

$ deb_list curl
/usr/bin/curl
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/copyright
/usr/share/doc/curl/NEWS.Debian.gz
/usr/share/man/man1/curl.1.gz

Stessa funzione su più righe:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu https://packages.ubuntu.com ' \
                      -e 's Debian https://packages.debian.org '
              )/$(lsb_release -sc)/all/$1/filelist \
      | sed -n -e '/<pre>/,/<\/pre>/p' \
      | sed -e 's/<[^>]\+>//g' -e '/^$/d';
}

Ha spiegato:

  1. lsb_release -si restituisce "Ubuntu" o "Debian" sostituendolo con l'URL di base https://packages.ubuntu.comohttps://packages.debian.org
  2. lsb_Release -sc restituisce il nome in codice (ad esempio "fidato", "sid", ecc.) usalo per creare l'URL completo: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Recupera l'URL con curl e reindirizza l'html attraverso tre comandi sed. Innanzitutto acquisisce solo l'elenco dei file (cosa c'è tra <pre>e </pre>tag); il secondo rimuove qualsiasi tag html; terzo rimuove eventuali righe vuote.

Nota: non cerca PPA, repository di fonti apt alternative e interroga solo pacchetti ufficiali disponibili per il rilascio di debian / ubuntu in esecuzione.


Ho bisogno di ruby ​​per eseguirlo?
Anwar,

1
@Anwar, inizialmente avevo usato Ruby perché ero pigro e le regex multilinea succhiano sed / awk / grep. Ma l'ho riscritto per usare due comandi sed, non è richiesto Ruby.
not

Bello! Questa è la risposta che stavo cercando
Anwar,

4

Per tutte quelle persone che potrebbero ancora cercare su Google questo problema a gennaio 2017, puoi avere cose interessanti con le ultime versioni di apt e dpkg in Debian 8.5 senza scaricare nulla.

Elenco dei contenuti del file Deb senza download:

Individua innanzitutto l'URL completo del file deb:

root@debian:apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4

PS: --print-uris switch stampa l'URL del pacchetto deb ma deb non viene scaricato.

Quindi visualizzare i contenuti del pacchetto deb senza scaricarlo:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb -c /dev/stdin
drwxr-xr-x root/root         0 2016-12-10 22:18 ./
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/bin/
-rwxr-xr-x root/root     13184 2016-12-10 22:18 ./usr/bin/yade
.........................more files listed bellow ......................

PS: lo stesso risultato può essere raggiunto con

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")

Estrai un file dal pacchetto deb precedente, senza scaricare.
Ad esempio, vogliamo leggere la pagina man del pacchetto yade senza installare questo pacchetto e senza nemmeno scaricare il pacchetto deb.

Il nome file della pagina man all'interno del pacchetto deb come consigliato da dpkg -cis./usr/share/man/man1/yade.1.gz

Per leggere la pagina man al volo:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb --fsys-tarfile /dev/stdin |tar -xO ./usr/share/man/man1/yade.1.gz |man /dev/stdin

la pagina man viene visualizzata correttamente usando l'applicazione man.

PS: sopra le pipe non funziona con il comando ar.

root@debian:apt --version --> apt 1.4~beta2 (amd64)
root@debian:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
root@debian:man --version --> man 2.7.6.1
root@debian:tar --version --> tar (GNU tar) 1.29

Questa descrizione funziona per i sistemi che usano solo "apt" e non dispongono dei precedenti comandi "apt-x"!
Jon Watte,

2

Provare:

apt-get download packages-name
dpkg --contents *.deb

1

Sembra che non sia possibile prima di installarlo prima o estrarre l'elenco dal .debfile.

Prova il seguente comando:

dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']\+"))

Cambia language-pack-encon il nome del pacchetto.

In pratica legge i .debfile estratti tramite curled è eseguito dpkg --contents FILEsu di esso.


Puoi anche controllare il contenuto senza scaricare il file del pacchetto.

Quindi, se conosci l'URL del .debfile, il seguente comando shell elencherà tutti i file del pacchetto:

dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")

Parametri ricciolo: -s- silenzioso, -L- segui i collegamenti spostati.

Se non conosci l'URL, vai a: apt --print-urisad es

apt --print-uris install avis | grep avis
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.