it-swarm-eu.dev

Vieni elencare i file di un pacchetto Debian senza installazione

Questo comando può solo elencare il contenuto dei pacchetti installati,

dpkg -L PACKAGENAME

ma come elencare il contenuto di un pacchetto non installato, per visualizzare in anteprima/esaminare il pacchetto?

272
Xiè Jìléi

dpkg -c (o --contents) elenca i contenuti di un file di pacchetto .deb (È un front-end di dpkg-deb.)

dpkg -c package_file.deb

Per lavorare direttamente con i nomi dei pacchetti piuttosto che con i file dei pacchetti, puoi usare apt-file. (Potrebbe essere necessario installare prima il pacchetto apt-file).

Sudo apt-file update        
apt-file list package_name

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

326
alfplayer

Utilizza --contents anziché -L:

dpkg --contents PACKAGENAME

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

È inoltre possibile utilizzare un browser di archivio per visualizzare i contenuti del pacchetto.

56
quack quixote

dpkg --contents ti permetterà di guardare il pacchetto disinstallato. Se il .deb non è ancora nel tuo sistema, fallo

apt-get --download-only install pkgname

Il pacchetto verrà scaricato su /var/cache/apt/archives ma non installato.

20
Rudedog

Il modo migliore sarebbe quello di sfogliare direttamente il repository del pacchetto:

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

Esempio:

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

12
baldoz

Ho preso l'idea http di @ baldoz e la ho generalizzata per Ubuntu e Debian, ho aggiunto un po 'di sed e l'ho racchiusa in una one-liner della funzione bash:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu http://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 http://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 http://packages.ubuntu.com o https://packages.debian.org
  2. lsb_Release -sc restituisce il nome in codice (ad esempio "trusty", "sid", ecc.) lo usa per creare l'URL completo: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Recupera quell'URL con curl e conduci l'html attraverso tre comandi sed. Prima cattura solo la lista dei file (cosa c'è tra i tag <pre> e </pre>); la seconda elimina tutti i tag html; il terzo rimuove tutte le righe vuote.

Nota: non esegue la ricerca di PPA, sostituisce i repository di apt apt e interroga solo i pacchetti ufficiali disponibili per il rilascio di debian/ubuntu in esecuzione.

8
notpeter

Provare:

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

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

Elenca il contenuto del file Deb senza download:

Individua innanzitutto l'url completo del file deb:

[email protected]: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 visualizza i contenuti del pacchetto deb senza scaricarlo:

[email protected]: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

[email protected]:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_AMD64.deb")

Estrae un file dal pacchetto deb sopra, senza download.
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 -c è ./usr/share/man/man1/yade.1.gz

Per leggere la pagina man al volo:

[email protected]: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 è visualizzata correttamente usando l'applicazione man.

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

[email protected]:apt --version --> apt 1.4~beta2 (AMD64)
[email protected]:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (AMD64).
[email protected]:man --version --> man 2.7.6.1
[email protected]:tar --version --> tar (GNU tar) 1.29
2
George Vasiliou

Sembra che non sia possibile prima di installarlo prima o di estrarre la lista dal file .deb.

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-en con il nome del pacchetto.

In pratica legge il file .deb estratto tramite curl ed esegue dpkg --contents FILE su di esso.


È inoltre possibile controllare il contenuto senza scaricare il file del pacchetto.

Quindi, se conosci l'URL del file .deb, 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 Curl: -s - silent, -L - seguono i link spostati.

Se non conosci l'URL, recupera per: apt --print-uris, ad es.

apt --print-uris install avis | grep avis
1
kenorb