Wie bekomme ich den Verlauf von "apt-get install" auf Ubuntu?


85

Ich bin dabei, einen Server von einer Ubuntu-Box auf eine andere zu verschieben. Ich klone nicht die alte Schachtel auf die neue. Ich erstelle ein neues System und verschiebe die Daten nach Bedarf. Ich möchte die gesamte Software, die ich auf der alten Box habe, auf der neuen installieren.

Gibt es eine einfache Möglichkeit, den Verlauf aller "sudo apt-get install" -Befehle zu ermitteln, die ich im Laufe der Zeit gegeben habe? Das heißt, dpkg -l zeigt mir alle installierten Pakete an, aber nicht, von welchem ​​Top-Level-Paket sie installiert wurden. Wenn es für dpkg eine Möglichkeit gibt, mir das Installationspaket zu geben, kann ich dort die eindeutigen finden. Ansonsten möchte ich etwas anderes sagen: "Sie haben diese 24 Pakete installiert."



Können Sie eine Antwort unten akzeptieren? Menschen, die geantwortet haben, dankbar zu sein.
m-ric


Diese Lösungen prüfen nur, was nach der letzten Stammdrehung passiert ist. Sie überprüfen nicht die gesamte Geschichte.
Kraang Prime

Einfache und schnelle Art und Weise wird durch diese Antwort gegeben askubuntu.com/a/250530/197730 , auf diese Frage Wie alle installierten Pakete aufzulisten .
TooTone

Antworten:


68

Die aptGeschichte ist in /var/log/apt/history.logwie in einem Kommentar oben gesagt. Das heißt, dies listet keine Pakete auf, die manuell installiert wurden, dpkgoder GUIs wie gdebi. Um alle Pakete zu sehen, die durchgelaufen sind, dpkgkönnen Sie sich anschauen /var/log/dpkg.log.


8

5
Das Verfahren im ersten Link unterscheidet nicht zwischen automatisch installierten und manuell installierten Paketen. /var/log/apt/history.log(Du hast übrigens den falschen Ort angegeben) wird sich nach ein paar Monaten entfernt haben.
Gilles

Gilles hat in beiden Punkten Recht. Ich habe nur ungefähr den Monatswert dieser Protokolle, und ich kann nicht einmal sehen, wie die Protokolllöschrate eingestellt ist (dies geschieht mit 'newsyslog' unter FreeBSD). Ich habe also immer noch keine Lösung, aber ich habe einige Hinweise. Ich kann zumindest die Ausgabe des Befehls im Klonartikel überprüfen, nach "übergeordneten" Namen suchen, sie auf dem neuen installieren, dasselbe auf der neuen Box tun, die beiden Ergebnisse vergleichen und wiederholen, bis ich zufrieden bin. Ich würde immer noch gerne mehr Ideen hören.
Paul Hoffman

7

Sie können Pakete auflisten, deren Installation explizit mit angefordert wurde apt-mark.

apt-mark showmanual

Falls Sie eine alte Version von Debian ausführen, gehen Sie wie folgt vor.

Der folgende Befehl gibt die Liste der Pakete an, deren Installation manuell oder automatisch angefordert wurde. Sofern Sie nicht gerade Pakete (de) installieren, ist dies die Liste der installierten Pakete.

dpkg --get-selections | sed -n 's/\t\+install$//p'

Der folgende Befehl enthält eine Obermenge der automatisch installierten Pakete:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

Der folgende Befehl fasst alles zusammen und listet manuell installierte Pakete auf:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

1
--- Sehr anderes Ergebnis voncomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

Unter Debian gibt es apt-mark showmanualdas, was Ihrem letzten Befehl entspricht.
Maxschlepzig

3
grep -i "Commandline" /var/log/apt/history.log

Zeigt alle Pakete an, die Sie mit folgendem Befehl installiert haben: sudo apt-get install xxxxx


Dies unterscheidet sich nicht ausreichend von der Antwort von @ ℝaphink und sollte ein Kommentar dazu sein.
Karl Richter

2

Anstelle der TAC / Head-Kombination ist es besser, Tail zu verwenden (für die letzten 25 Zeilen):

tail -n 25 /var/log/apt/history.log

Dies unterscheidet sich nicht ausreichend von der Antwort von @ ℝaphink und sollte ein Kommentar dazu sein.
Karl Richter

Es ist auch nicht dasselbe. tail listet die letzten Zeilen in der Datei in der Reihenfolge auf, in der sie in der Datei enthalten sind. tac kehrt die Reihenfolge um, sodass die letzte Zeile jetzt die erste, die vorletzte die zweite usw. ist. Auch hier scheint das Risiko zu bestehen, dass Sie sich irren, wenn Sie sagen, dass etwas "besser" ist, ohne zu erklären, warum. Ich meine, "besser" nach wem? Für welche Anforderung? Scheint ein bisschen zu zuversichtlich.
Todd Walton

0

Die anderen Antworten halfen, gaben mir aber zu viel Output. Um die Ausgabe zu reduzieren, habe ich apt-mark showmanualwie in dieser Antwort begonnen und dann die ursprünglich installierten Pakete herausgefiltert (siehe diese Antwort , um eine Liste der ursprünglich installierten Pakete zu erhalten; ich verwende Ubuntu 18.04.2, daher der Link unten). .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

Das Skript filtert Pakete aus dem ursprünglichen Manifest heraus, indem es einen versionsunabhängigen Vergleich durchführt, sodass aktualisierte Pakete nicht in der Liste angezeigt werden. Ich endete mit einer Liste von etwa 60 Paketen.

Der andere Weg, den ich mag, ist diese Antwort, die alle passenden Protokolle durchsucht .


-1

Um die Liste der zuletzt installierten Pakete in absteigender Reihenfolge zu erhalten, verwende ich gerne (z. B. 25 Zeilen):

tac /var/log/apt/history.log |head --lines=25

1
Effizienter (und alliterativer) wäre: tail -25 /var/log/apt/history.log | tac
Agc

Dies unterscheidet sich nicht ausreichend von der Antwort von @ ℝaphink und sollte ein Kommentar dazu sein.
Karl Richter
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.