Wie kann ich die Abhängigkeitsliste für ein Deb-Paket überprüfen?

94

Wie kann ich die Abhängigkeitsliste für ein Deb-Paket überprüfen? Ich verwende Ubuntu 11.10 und habe alle Deb-Pakete von gesichert var/cache/apt/archives. Ich möchte meinen PC formatieren und nur ausgewählte Anwendungen neu installieren. Wie kann ich die Liste der installierten Pakete und Abhängigkeiten abrufen?

Vikramjeet
quelle
Für Ihre zweite Frage siehe askubuntu.com/questions/17823/…
htorque
Für die vollständige Liste der installierten Pakete verwenden Siedpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Antworten:

73

Zusätzlich zur dpkgMethode können Sie die Abhängigkeiten von Paketen im Repository überprüfen:

apt-cache depends package-name

BEARBEITEN Aktualisiert mit @ Tinos Empfehlung. @ Tigrans Kommentar gilt nicht mehr.

Oxwivi
quelle
3
Hinweis: Dies funktioniert nur, wenn das Paket bereits installiert ist.
Tigran Saluev
@TigranSaluev Beachten Sie, dass dpkg -I packagenur für installierte Pakete funktioniert. apt-cachefunktioniert für alle Pakete, die bekannt sind, nachdem Sie getan haben apt-get update.
Tino
1
apt-cache depends packageist in diesem Fall ein besserer Weg, da showpkgnicht ersichtlich ist, ob es sich bei einer Abhängigkeit um eine Empfehlung, einen Konflikt usw. handelt, was ein wenig rätselhaft ist. Für ein Skript, das mit dependskombiniert wird, showpkgsiehe unix.stackexchange.com/a/362866/23450
Tino
100

Dies zeigt Ihnen alle Informationen über das Paket:

dpkg -I package.deb
Drehmoment
quelle
Das funktioniert auf Ubuntu 14.04 nicht mehr:dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <[email protected]> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson
@ CraigS.Anderson Läuft hier 14.04 und es funktioniert in meinem Fall einfach perfekt. Sollte die akzeptierte Antwort IMHO sein.
magic_al
Vergessen Sie nicht, /var/cache/apt/archives/den Paketnamen voranzustellen und verwenden Sie die Tabulator-Vervollständigung, um den vollständigen Paketnamen mit der Version zu finden, z dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs
1
Ich sehe keine Abhängigkeitsinformationen
Nick
Sie könnten hinzufügen, dass das Paket erhalten werden kann, ohne es (was wahrscheinlich ein beliebter Anwendungsfall ist) mit (erneut) zu installieren sudo apt-get install --reinstall --download-only [package name].
Karl Richter
2

apt-cache depends [Package-Name]wird auch funktionieren. Obwohl, wenn Sie das .debPaket von außerhalb Ihrer Quellenliste beziehen, Dinge wie apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]veraltete Informationen anzeigen oder möglicherweise nicht mit dem tatsächlich installierten Paket synchronisiert werden, dpkg -I [Package-Name]funktioniert dies in diesem Fall am besten.

Mziyabo Singwango
quelle
2

Für 14.04 und später:

dpkghat das -Inicht mehr und Sie müssen verwenden dpkg-deb, um Paketinformationen einschließlich Abhängigkeiten anzuzeigen:

dpkg-deb -I package.deb
Rup Narayan
quelle
1
Hallo Fabby, dpkg hat momentan keine -I-Option. Getestet unter Ubuntu 12.04 und 16.04. Sie müssen stattdessen dpkg-deb verwenden.
Rup Narayan
Kommentar zurückgezogen; Antwort geklärt und upvoted
Fabby
0

Hier ist eine schlampige und wahrscheinlich nicht sehr umfassende Nachbearbeitung, die Sie dpkg -Iausführen können, um Abhängigkeitselemente als Liste abzurufen:

Für Computer komprimiert

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

Für den Menschen erweitert:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"
ThorSummoner
quelle
Dies gibt die Pakete wieder, die von 'foo.deb' abhängen und noch installiert werden müssen: dpkg -I foo.deb | für i in $ (awk -F ',' '/ Depends: / {gsub (/: /, ","); für (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); do dpkg -s $ i &> / dev / null || echo $ i; fertig | tr '\ n' ''
Gregory Burd
@GregoryBurd, Fühlen Sie sich frei, meine Antwort / psot zu bearbeiten, wie Sie möchten, ich habe es aus diesem Grund als Community-Wiki gepostet ^ u ^
ThorSummoner
Wenn ich diesen Befehl auf elasticsearch ausführe, wird er ausgegeben libc6\nadduser\n Installed-Size\n. Das heißt, es scheint mehr zu stimmen als nur die Depends-Zeile.
Jason R. Coombs