Frage Wie listet man Dateien eines Debian-Pakets ohne Installation auf?


Dieser Befehl kann nur den Inhalt installierter Pakete auflisten,

dpkg -L PACKAGENAME

aber wie man den Inhalt eines nicht installierten Pakets auflistet, um das Paket in der Vorschau anzuzeigen / zu untersuchen?


255
2017-12-14 06:49


Ursprung


Ähnliches auf Ubuntu: askubuntu.com/questions/32507/ ... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Antworten:


dpkg -c (oder --contents) listet den Inhalt einer .deb-Paketdatei auf (Es ist ein Frontend zu dpkg-deb.)

dpkg -c package_file.deb

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

sudo apt-file update        
apt-file list package_name

Wie im ersten Kommentar erwähnt, listet apt-file Inhalte für Pakete in Ihren bereits konfigurierten Apt-Repositories auf. Es ist irrelevant, ob ein bestimmtes Paket installiert ist oder nicht.


306
2017-12-14 15:42



apt-file muss ebenfalls aktualisiert werden (sudo apt-file update) und listet nur Inhalte für Pakete in Ihren bereits konfigurierten Apt-Repositories auf. - quack quixote
@quackquixote: In Ubuntu 12.04 ist es automatisch - confiq
dpkg -c nett! - d-_-b
Die Antwort in der Apt-Datei setzt voraus, dass Ihr Paket von einem konfigurierten Repository statt von einem .deb Datei, die Sie separat heruntergeladen haben. Die ursprüngliche Frage ist jedoch mehrdeutig. - Zoredache
@confiq, nicht durch meine Tests. Ich laufe 12.04.4 und es sagt immer noch "E: Der Cache ist leer. Sie müssen 'apt-file update' zuerst ausführen." - Matthew Flaschen


Benutzen --contents Anstatt von -L:

dpkg --contents PACKAGENAME

Wenn auf diese Weise verwendet, dpkg fungiert als Front-End für dpkg-deb, also benutze es man dpkg-deb um alle Optionen zu sehen.

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


53
2017-12-14 08:14



Dies funktioniert nicht, es sei denn, ich habe es zuerst installiert und dann deinstalliert. - Xiè Jìléi
Es sollte gut funktionieren, wenn Sie eine .deb-Datei als Argument angeben (anstatt PACKAGENAME, geben Sie PACKAGE-DEB-FILE). - quack quixote
Diese Antwort ist falsch. Sie müssen das Paket zuerst installieren. Wenn Sie es nicht installiert haben, haben Sie keine .deb-Datei. - Neil
Dieser Befehl funktioniert für mich. Zum Beispiel habe ich google-chrome-stable_current_amd64.deb von Google heruntergeladen. Dann gab den Befehl aus: dpkg --contents google-chrome-stable_current_amd64.deb und es listet alle Dateien auf, die es installieren wird (hauptsächlich zu /opt/google/chrome), von denen derzeit keine auf meinem System installiert sind, während ich dies eintippe. (Ich verwende Xubuntu 11.10, wenn das wichtig ist.) - quux00
@Neil, die Antwort ist nicht falsch. Nur weil Sie eine Deb-Datei haben, heißt das nicht, dass sie installiert ist. apt-file benötigt das gesamte build-essential-Paket. O.O. - d-_-b


dpkg --contents Lassen Sie sich das nicht installierte Paket ansehen. Wenn das .deb noch nicht auf Ihrem System ist, tun Sie es

apt-get --download-only install pkgname

Das Paket wird heruntergeladen /var/cache/apt/archives aber nicht installiert.


17
2017-12-14 14:34



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 eine Dateikopfzeile hat, in der die Inhaltsliste angezeigt wird, ist das Herunterladen des gesamten Pakets möglicherweise nicht erforderlich. Ist das möglich? - Xiè Jìléi


Der beste Weg wäre, das Paket-Repository direkt zu durchsuchen:

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

Beispiel:

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


11
2018-06-01 13:57



Um zu vermeiden, das Terminal zu verlassen, können Sie z.B. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (vorausgesetzt, du hast lynx Eingerichtet). - Ruslan


ich nahm @ Baldoz 'http-Idee und verallgemeinert es für Ubuntu und Debian, fügte ein wenig sed hinzu und wickelte es in eine Bash-Funktion One-Liner:

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

Verwendung:

$ 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 das mit der Basis-URL http://packages.ubuntu.com oder https://packages.debian.org
  2. lsb_Release -sc gibt den Codenamen (z. B. "trusty", "sid" usw.) zurück, der zum Erstellen der vollständigen URL verwendet wird: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Holen Sie diese URL mit curl und leiten Sie den HTML-Code durch drei sed-Befehle. Erfasst zuerst nur die Dateiliste (was ist zwischen <pre> und </pre> Stichworte); 2. streift alle HTML-Tags aus; 3. entfernt alle Leerzeilen.

Hinweis: Es werden keine PPAs durchsucht, alternative Reporte von Apt-Quellen und nur offizielle Pakete, die für die von Ihnen verwendete Version von debian / ubuntu verfügbar sind.


7
2018-04-21 21:44



Brauche ich Ruby, um es auszuführen? - Anwar
@Anwar, ich hatte anfangs Ruby benutzt, weil ich faul war und Multiline-Regexen sed / awk / grep. Aber ich habe es umgeschrieben, um zwei sed-Befehle zu verwenden, kein Ruby erforderlich. - notpeter
Nett! Das ist die Antwort, nach der ich gesucht habe - Anwar


Versuchen:

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

2
2018-06-27 15:28





Scheint, dass es nicht möglich ist, bevor Sie es zuerst installieren oder die Liste von extrahieren .deb Datei.

Probieren Sie den folgenden Befehl aus:

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

Veränderung language-pack-en mit Ihrem Paketnamen.

Es liest grundsätzlich .deb Datei extrahiert über curl und Renn dpkg --contents FILE darauf.


Sie können den Inhalt auch prüfen, ohne die Paketdatei herunterzuladen.

Also wenn du die URL von kennen solltest .deb Datei, der folgende Shell-Befehl wird alle Paketdateien auflisten:

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

Lockenparams: -s - Leise, -L - folgen Sie den verschobenen Links.

Wenn Sie die URL nicht kennen, holen Sie nach: apt --print-uris, z.B.

apt --print-uris install avis | grep avis

1
2017-12-27 13:33





Für all die Leute, die dieses Thema noch im Januar 2017 googlen könnten, könnt ihr in Debian 8.5 ein paar coole Sachen mit den letzten Versionen von apt und dpkg haben, ohne etwas herunterzuladen.

Listeninhalt der Deb-Datei ohne Download: 

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: Das gleiche 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")

Entpacken Sie eine Datei aus dem obigen Deb-Paket, ohne Download.
Zum Beispiel möchten wir die Manpage des Pakets Yade lesen, ohne dieses Paket zu installieren und ohne das Deb-Paket herunterzuladen.

Dateiname der man-Seite innerhalb des Deb-Pakets wie von empfohlen dpkg -c ist ./usr/share/man/man1/yade.1.gz

Um die Manpage im laufenden Betrieb zu lesen:

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

Die Manpage wird korrekt mit der Man-Anwendung angezeigt.

PS: Über Rohrleitungen funktioniert nicht mit 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

1
2018-01-06 03:14