Nur der Code
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Erläuterung
Eine Möglichkeit, über dieses Problem nachzudenken, besteht darin, es in drei Teile zu unterteilen:
- Wie erhalte ich eine Liste der Pakete, die nicht als Abhängigkeiten installiert wurden?
- Wie erhalte ich eine Liste der standardmäßig installierten Pakete?
- Wie kann ich den Unterschied zwischen diesen beiden Listen feststellen?
Wie erhalte ich eine Liste der Pakete, die nicht als Abhängigkeiten installiert wurden?
Der folgende Befehl scheint auf meinem System zu funktionieren:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Ähnliche Ansätze finden Sie in den Links, die Gilles als Kommentar zur Frage gepostet hat. Einige Quellen behaupten, dass dies nur funktioniert, wenn Sie die Pakete mit aptitude installiert haben. Ich nutze jedoch fast nie aptitude, um Pakete zu installieren, und stellte fest, dass dies immer noch funktionierte. Das --disable-columns
verhindert, dass aptitude Zeilen mit Paketnamen mit Leerzeichen auffüllt, die den folgenden Vergleich behindern würden. Das | sort -u
sortiert die Datei und entfernt Duplikate. Dies erleichtert den letzten Schritt erheblich.
Wie erhalte ich eine Liste der standardmäßig installierten Pakete?
Hinweis: Dieser Abschnitt beginnt mit einem "falschen Pfad", der meiner Meinung nach nur zur Veranschaulichung dient. Der zweite Code ist derjenige, der funktioniert.
Das ist etwas kniffliger. Ich dachte anfangs, dass eine gute Annäherung alle Pakete sein würden, die Abhängigkeiten der Metapakete ubuntu-minimal, ubuntu-standard, ubuntu-desktop und der verschiedenen Linux-Kernel-bezogenen Pakete sind. Einige Ergebnisse bei Google-Suchen schienen diesen Ansatz zu verwenden. Um eine Liste dieser Abhängigkeiten zu erhalten, habe ich zuerst Folgendes versucht (was nicht funktioniert hat):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Dies scheint einige Pakete auszulassen, von denen ich weiß, dass sie standardmäßig kommen mussten. Ich glaube immer noch, dass diese Methode funktionieren sollte, wenn man die richtige Liste von Metapaketen erstellt.
Es scheint jedoch, dass Ubuntu-Spiegel eine "Manifest" -Datei enthalten, die alle Pakete der Standardinstallation enthält. Das Manifest für Ubuntu 12.04.3 ist hier:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Wenn Sie diese Seite durchsuchen (oder die Seite eines Spiegels in Ihrer Nähe):
http://mirror.pnl.gov/releases/precise/
Sie sollten in der Lage sein, die ".manifest" -Datei zu finden, die der von Ihnen verwendeten Version und Architektur entspricht. So extrahieren Sie nur die Paketnamen:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Die Liste war wahrscheinlich bereits sortiert und eindeutig, aber ich wollte sichergehen, dass sie richtig sortiert war, um den nächsten Schritt zu vereinfachen. Ich habe dann die Ausgabe in defaultinstalled.txt
.
Wie kann ich den Unterschied zwischen diesen beiden Listen feststellen?
Dies ist der einfachste Teil, da die meisten Unix-ähnlichen Systeme viele Tools haben, um dies zu tun. Das comm
Tool ist eine von vielen Möglichkeiten, dies zu tun:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Dies sollte die Liste der Zeilen drucken, die für die erste Datei eindeutig sind. Daher sollte eine Liste der installierten Pakete gedruckt werden, die nicht in der Standardinstallation enthalten sind.
aptitude search '~i!~M' -F %p
nicht?http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
und die zusätzlichen| sed "s/ *$//"
aber noch keine Würfel.apt-mark showmanual | sort -u
angezeigt wird, die nicht als Abhängigkeiten installiert wurden, kann durch ersetzt werden , wie in anderen Antworten gezeigt. Einfacher und hängt nicht davon ab,aptitude
welche nicht standardmäßig installiert ist.Sie können einen dieser beiden Einzeiler verwenden. Beide liefern auf meiner Maschine exakt die gleiche Leistung und sind präziser als alle bisher (Juli 2014) in dieser Frage vorgeschlagenen Lösungen. Sie sind eine Kombination der beiden Antworten (1) und (2) . Beachten Sie, dass ich diese Antwort ursprünglich hier gepostet habe .
Verwenden von
apt-mark
:Verwenden von
aptitude
:Nur sehr wenige Pakete noch die Risse durchfallen, obwohl ich diese vermuten , sind tatsächlich vom Benutzer installiert, entweder direkt nach der Installation durch die Sprachlokalisierung Setup oder zB durch den Totem - Codec Installer. Auch die Linux-Header-Versionen scheinen sich zu häufen, obwohl ich nur das nicht versionsspezifische Metapaket installiert habe. Beispiele:
Wie funktioniert es
sed
Leerzeichen am Ende der Zeile.Andere Möglichkeiten funktionieren nicht so gut:
ubuntu-14.04-desktop-amd64.manifest
Datei ( hier für Ubuntu 14.04) anstelle von/var/log/installer/initial-status.gz
. Weitere Pakete werden als manuell installiert angezeigt, obwohl dies nicht der Fall ist.apt-mark showauto
anstelle von/var/log/installer/initial-status.gz
.apt-mark
Beispiel: Enthält nicht das Paket xserver-xorg, während die andere Datei dies tut.Beide Listen enthalten mehr Pakete als die oben genannte Lösung.
quelle
Nach
man apt-mark
:quelle
showmanual
zeigt Dinge wiexserver-xorg-video-vesa
, die ich nicht manuell installiert habe.Hier ist eine Beispielausgabe von
cat /var/log/apt/history.log
:Was deine Frage betrifft, filtere das Zeug mit grep (
cat /var/log/apt/history.log | grep Commandline
).Beachten Sie, dass diese Dateien gedreht werden. Suchen Sie nach anderen Dateien, damit Sie nichts verpassen:
HINWEIS :
Commandline
, alsogrep
funktioniert der Trick bei ihnen nicht.quelle
aptitude
und anderen Paketmanagern installierten Pakete zu berücksichtigen . Wenn sich Ihre Protokolle abgewendet haben, haben Sie Pech.Ich bin auf diesen wunderschönen Oneliner gestoßen, als ich nach dieser Frage gesucht habe
Der eine Liner ist
Dieser Oneliner filtert vom System installierte Pakete mithilfe von Protokollen von
/var/log/installer/initial-status.gz
Ich werde den Link zum Original-Thread posten, wenn ich ihn gefunden habe, da dieser Oneliner nicht von mir stammt und ich mich anscheinend nicht erinnern kann, wo ich ihn gesehen habe.
quelle
Sie möchten einen Blick auf diesen Artikel werfen .
Am Ende des Artikels befindet sich ein Python-Skript, das tun soll, was Sie wollen.
Es wurde für (k) Ubuntu geschrieben . sollte aber auch für Ubuntu funktionieren.
quelle
Unten finden Sie eine Ergänzung zu Steven Ds Antwort .
In der folgenden Zeile werden Paketnamen mit 32 Zeichen abgeschnitten:
Das scheint zu funktionieren:
siehe diese Antwort
quelle
Auschecken
/var/log/apt/term.log
quelle
Sie können sich auch die Datei ansehen
/var/lib/apt/extended_states
.Dies ist nützlich, wenn Sie wissen möchten, was auf einer alten Partition installiert wurde.
quelle
Vielen Dank und herzlichen Glückwunsch an alle, die dieses Juwel eines Drehbuchs erfunden haben !!!
Ich wollte meine 2 ¢ hinzufügen und habe das Installationsdatum angeheftet, das ich aus $ info abgeleitet habe.
Ich habe die Details, warum und wann $ info-Dateien aktualisiert werden, nicht verstanden, aber es funktioniert in der Praxis.
Mein Skript listet die neuesten Aktualisierungen von nicht abhängigen Paketen auf, die nach der Installation hinzugefügt wurden.
Bei einer regelmäßigen Überprüfung stellte ich fest, was ich ohne einen einzigen Fehler manuell protokolliert hätte.
Dies bedeutet, dass aus demselben Grund mehrere Pakete installiert wurden. Leider brechen Updates diese Reihenfolge.
Nach einem System-Upgrade hatte ich eine Liste meiner hinzugefügten Pakete, die nicht aktualisiert wurden, gefolgt von den Paketen, die aktualisiert wurden.
Ordentlich! Genießen.
quelle