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?


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.


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

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. <info@splunk.com> 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.


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

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(',')
    ])
"

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.