Wie man Dateien eines Debian-Pakets ohne Installation auflistet

238468
Xiè Jìléi

Dieser Befehl kann nur den Inhalt der installierten Pakete auflisten.

dpkg -L PACKAGENAME 

Aber wie kann ich den Inhalt eines nicht installierten Pakets auflisten, das Paket in der Vorschau anzeigen / untersuchen?

262
Ähnliches auf Ubuntu: http://askubuntu.com/questions/32507/how-do-i-get-a-list-of-installed-files-from-a-package Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 9 Jahren 0

8 Antworten auf die Frage

311
alfplayer

dpkg -c(oder --contents) listet den Inhalt einer .deb-Paketdatei (Es ist ein Frontend für dpkg-deb.)

dpkg -c package_file.deb 

Um direkt mit Paketnamen und nicht mit Paketdateien zu arbeiten, können Sie verwenden apt-file. (Möglicherweise müssen Sie das apt-filePaket zuerst installieren .)

sudo apt-file update  apt-file list package_name 

Wie im ersten Kommentar angegeben, listet apt-file den Inhalt für Pakete in Ihren bereits konfigurierten Apt-Repositorys auf. Es ist unerheblich, ob ein bestimmtes Paket installiert ist oder nicht.

apt-file muss ebenfalls aktualisiert werden ("sudo apt-file update") und listet nur den Inhalt von Paketen in Ihren bereits konfigurierten Apt-Repositorys auf. quack quixote vor 14 Jahren 14
@quackquixote: In Ubuntu 12.04 ist es automatisch confiq vor 11 Jahren 1
`dpkg -c` schön! d-_-b vor 11 Jahren 1
Die Antwort der Apt-Datei setzt voraus, dass Ihr Paket aus einem konfigurierten Repository stammt und nicht aus einer `.deb`-Datei, die Sie separat heruntergeladen haben. Die ursprüngliche Frage ist jedoch mehrdeutig. Zoredache vor 11 Jahren 2
@confiq, nicht bei meinen Tests. Ich führe 12.04.4 aus und sagt immer noch "E: Der Cache ist leer. Sie müssen zuerst 'apt-file update' ausführen." Matthew Flaschen vor 9 Jahren 4
"apt-file list" funktioniert bei mir nicht. icando vor 9 Jahren 0
Per @eskhool - Falsches Update der Apt-Datei in Ubuntu nicht erforderlich ... Ab Ubuntu 14.04 ist dies noch erforderlich fixer1234 vor 9 Jahren 0
Um die Beschreibung und die Steuerelemente des Pakets anzuzeigen, navigieren Sie zu NAME.deb control.tar.gz | tar xOvz ./control eel ghEEz vor 9 Jahren 0
55
quack quixote

Verwendung --contentsanstelle von -L:

dpkg --contents PACKAGENAME 

Wenn auf diese Weise verwendet, dpkgfungiert es als Frontend für dpkg-deb. Verwenden Sie man dpkg-debdiese Option, um alle Optionen anzuzeigen.

Sie können auch einen Archivbrowser verwenden, um den Paketinhalt anzuzeigen.

Dies funktioniert nur, wenn ich es zuerst installiert und dann deinstalliert habe. Xiè Jìléi vor 14 Jahren 2
Es sollte funktionieren, wenn Sie eine .deb-Datei als Argument angeben (anstelle von PACKAGENAME geben Sie PACKAGE-DEB-FILE an). quack quixote vor 14 Jahren 3
Diese Antwort ist falsch. Sie müssen das Paket zuerst installiert haben. Wenn Sie es nicht installiert haben, haben Sie keine .deb-Datei. Neil vor 12 Jahren 2
Dieser Befehl funktioniert für mich. Ich habe beispielsweise google-chrome-stable_current_amd64.deb von Google heruntergeladen. Dann gab er den Befehl aus: `dpkg --contents google-chrome-stable_current_amd64.deb` und listete alle Dateien auf, die installiert werden sollen (meistens in / opt / google / chrome), von denen derzeit keine auf meinem System installiert ist wie ich das tippe. (Ich verwende Xubuntu 11.10, wenn das wichtig ist.) quux00 vor 11 Jahren 0
@Neil, die Antwort ist nicht falsch. Nur weil Sie eine Deb-Datei haben, bedeutet das nicht, dass sie installiert ist. apt-file benötigt das gesamte Build-Essential-Paket. OO d-_-b vor 11 Jahren 10
Funktioniert hervorragend für mich und erfordert nicht die Installation des vollständigen Build-Essential-Pakets, wie es die akzeptierte Antwort erfordert. plang vor 10 Jahren 0
Holen Sie sich die .deb-Datei mit `apt-get download`, zB:` apt-get download apt-file; dpkg -c apt-file * .deb; rm apt-file * .deb`. reinierpost vor 7 Jahren 0
18
Rudedog

dpkg --contentskönnen Sie sich das deinstallierte Paket anzeigen lassen. Wenn das .deb noch nicht in Ihrem System vorhanden ist, tun Sie

apt-get --download-only install pkgname 

Das Paket wird heruntergeladen, /var/cache/apt/archivesaber nicht installiert.

Kann ich den Inhalt einfach auflisten, ohne ihn herunterzuladen? Wenn ich eine sehr langsame Verbindung habe und das Paket zu groß zum Herunterladen ist. Wenn die .deb-Datei einen Dateiheader enthält, in den die Inhaltsliste geht, kann das gesamte Paket möglicherweise nicht heruntergeladen werden. Ist das möglich? Xiè Jìléi vor 14 Jahren 3
11
baldoz

Am besten durchsuchen Sie das Paket-Repository direkt:

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

Beispiel:

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

Um das Terminal nicht zu verlassen, können Sie zB `lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | verwenden grep ^ / `(vorausgesetzt, Sie haben` lynx 'installiert). Ruslan vor 5 Jahren 0
7
notpeter

Ich nahm die http-Idee von @ baldoz und verallgemeinerte sie für Ubuntu und Debian, fügte ein wenig sed hinzu und wickelte sie in einen One-Liner mit Bash-Funktion ein:

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'; } 

Verwendungszweck:

$ 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 

Gleiche Funktion in mehreren Zeilen:

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'; } 

Erklärt:

  1. lsb_release -si gibt "Ubuntu" oder "Debian" zurück und ersetzt dies durch die Basis-URL http://packages.ubuntu.comoderhttps://packages.debian.org
  2. lsb_Release -sc gibt den Codenamen zurück (z. B. "trusty", "sid" usw.). Verwenden Sie diesen, um die vollständige URL zu erstellen: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Rufen Sie diese URL mit curl ab und leiten Sie die HTML-Datei mit drei sed-Befehlen. Erfasst zunächst nur die Dateiliste (Zwischenziele <pre>und </pre>Tags); zweite streift alle HTML-Tags aus; Dritter entfernt alle leeren Zeilen.

Hinweis: PPA wird nicht durchsucht, es werden keine alternativen Repositorys für Apt-Quellen gesucht und nur offizielle Pakete abgefragt, die für die Veröffentlichung von Debian / Ubuntu verfügbar sind.

Brauche ich Rubin, um es auszuführen? Anwar vor 8 Jahren 0
@Anwar, ich hatte anfangs Ruby verwendet, weil ich faul war und mehrzeilige Regex in sed / awk / grep saugte. Aber ich habe es umgeschrieben, um zwei sed-Befehle zu verwenden, kein Ruby erforderlich. notpeter vor 8 Jahren 1
Nett! Dies ist die Antwort, nach der ich gesucht habe Anwar vor 8 Jahren 0
2
readanon

Versuchen:

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

Seems it's not possible before installing it first or extracting the list from .deb file.

Try the following command:

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

Change language-pack-en with your package name.

It basically reads .deb file extracted via curl and run dpkg --contents FILE on it.


You can also check the content without downloading the package file.

So if you know the URL of .deb file, the following shell command will list all the package files:

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

Curl params: -s - silent, -L - follow moved links.

If you don't know the URL, fetch by: apt --print-uris, e.g.

apt --print-uris install avis | grep avis 
1
George Vasiliou

Für all diejenigen, die diese Ausgabe noch im Januar 2017 googeln möchten, können Sie mit den neuesten Versionen von apt und dpkg in Debian 8.5 ein paar coole Sachen haben, ohne etwas herunterladen zu müssen.

Inhalt der Deb-Datei ohne Download auflisten:

Suchen Sie zuerst die vollständige URL der Deb-Datei:

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 druckt die URL des deb-Pakets, aber deb wird nicht heruntergeladen.

Zeigen Sie dann den Inhalt des deb-Pakets an, ohne es herunterzuladen:

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: Dasselbe Ergebnis kann mit erreicht werden

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

Extrahieren Sie eine Datei aus dem obigen deb-Paket ohne Download.
Zum Beispiel möchten wir die Manpage von package yade lesen, ohne dieses Paket zu installieren und ohne das deb-Paket herunterzuladen.

Dateiname der Manpage in deb-Paket, wie von dpkg -cis empfohlen./usr/share/man/man1/yade.1.gz

So lesen Sie die Manpage on the fly:

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 

Man-Seite wird in der Man-Anwendung korrekt angezeigt.

PS: Obige Pipes funktionieren nicht mit einem ar-Befehl.

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