Ich möchte eine Liste der manuell installierten Pakete von apt
oder erhalten aptitude
und herausfinden, ob ein foobar
Paket manuell oder automatisch installiert wurde. Gibt es eine gute Möglichkeit, dies von der Kommandozeile aus zu tun?
apt
package-management
aptitude
Umang
quelle
quelle
Antworten:
Sie können einen dieser beiden Einzeiler verwenden. Beide liefern auf meiner Maschine exakt die gleiche Leistung und sind präziser als alle bisher in dieser Frage vorgeschlagenen Lösungen (6. Juli 2014).
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 dies in der anderen Datei der Fall ist.Ich habe verschiedene andere StackExchange-Posts als Referenzen verwendet, aber keine funktioniert so gut wie die obige Lösung:
Beide Listen enthalten mehr Pakete als die oben genannte Lösung.
BEARBEITEN: Was ist zu tun, wenn Sie ein Upgrade von einer früheren Version durchgeführt haben?
Wenn Sie Ubuntu von einer Version zur nächsten aktualisiert haben, müssen Sie diesen Prozess wahrscheinlich anpassen. In diesem Fall würde ich zusätzlich zur Datei initial-status.gz aus der aktuellen Version die Manifestdatei der neueren Version (siehe oben) überprüfen. Sie können dies einfach tun, indem Sie einen weiteren Vergleich hinzufügen. Nur die Manifest-Datei zu verwenden, wird nicht funktionieren, da die Manifest-Datei leider nicht alles enthält, was die Datei initial_status.gz tut (ich habe es überprüft).
quelle
/var/log/installer/initial-status.gz
es fehlt. Auch ich möchte wissen, ob dies abhängig von der APTS-Kennzeichnung istmanual
oder nicht?showmanual
Befehl ausgeführt (siehe unten). Und verwenden Siecomm
, um die beiden (sortierten) Listen zu vergleichen. Dasshowmanual
Ergebnis gab mir 1.840 weitere einzigartige Paketeapt-mark showmanual
, die mit dieser Methode nicht gezeigt wurden. NO-Pakete waren für die Ausgabe diesescomm
Befehls eindeutig . Ich finde es interessanter aufzuzeichnen, dass für meinen PC 894 Pakete in beiden Ergebnissen aufgeführt sind. Ich bin mir nicht sicher, warum es so große Unterschiede gibt. Einige (viele?) Pakete scheinen release-spezifisch zu sein. Andere wie XOrg, GTK-Komponenten undlib*
Dinge könnten Updates sein. Auf jeden Fall ist diese Antwort ein sehr guter Anfang.apt-mark showmanual
. Es ist interessant, wie viele Unterschiede sichtbar sind. Ihre Liste enthält 238 Pakete, während showmanual 1717 Pakete zurückgibt. Von den 2179 installierten Paketen befinden sich nur 223 in beiden Listen, 15 nur in Ihren (Beispiele: nodejs, lightdm) und 223 nur in showmanual (Beispiele: xserver-xorg, ubuntu-desktop). Es fühlt sich an, als wäre Ihre Liste hilfreicher, aber ohne zu wissen, woher diese Unterschiede kommen, ist es nicht einfach, sich zu entscheiden ... (aber ich bin mir ziemlich sicher, dass ich nginx und lightdm manuell installiert habe ...) [Entschuldigung, dass ich gerade geschrieben habe das gleiche;)]In neueren Versionen des Pakets apt gibt es auch den Befehl apt-mark
quelle
linux-image-3.11.0-*-generic
usw. als Handbuch zu betrachtenlinux-image-3.13.0-24-generic
ist manuell, aber der Stromlinux-image-3.13.0-27-generic
ist automatisch. Es scheint, dass bei einem Upgrade eines Referenzpakets (in diesem Falllinux-image-generic
das die Abhängigkeiten änderte) die manuelle Markierung automatisch gesetzt wirdapt-get autoremove
. Das ist definitiv nicht was Sie wollen.Checken Sie für Ubuntu 16.04 die Protokolldatei aus
/var/log/apt/history.log
.Zum Beispiel:
Es ist nicht perfekt, aber es ist ziemlich gut darin zu verdeutlichen, was ich von Hand installiert habe. Setzen Sie ein
-B 1
Häkchen, um zu sehen, wann es installiert wurde.Beispielausgabe
Ich bin mir nicht sicher, ob dies ankommt
aptitude
oder nicht. Es scheint keine Installationen von der Ubuntu-Software-Desktop-App aufzunehmen.quelle
apt-mark showauto | grep -iE '^foobar$'
wird "foobar" ausgeben, wenn das Paket automatisch installiert wurde, sonst nichts.aptitude search '!~M ~i'
listet die Pakete auf, die nicht automatisch installiert wurden. Es ist schade, dass Aptitude nicht Teil der Standardinstallation von Ubuntu Desktop ab 10.10 ist.quelle
aptitude search
zeigt ALLE Pakete, nicht nur die, die manuell installiert wurden (ich nehme an, dass dies das ist, was das OP wollte)aptitude search '!~M ~i'
und es werden 1043 Pakete aufgelistet. Ich habe auf keinen Fall so viele Pakete manuell installiert.Das folgende Skript druckt alle Pakete aus, die nicht auf automatische Installation eingestellt sind und daher manuell installiert wurden:
Es basiert darauf, wie apt-mark die automatisch installierten Pakete druckt.
quelle
sys.exit(1)
withoutimport sys
kann in neueren Versionen von Python zu einem Fehler führen. Entwederimport sys
oder verwendenexit(1)
.Um eine Liste aller Pakete (nicht installiert, vom Benutzer installiert oder standardmäßig installiert, über alle PPAs hinweg) abzurufen,
apt
verwenden Sie die folgende Methode:apt list [option]
Die dafür nützlichen möglichen Optionen sind:
--installed
um nur die Pakete anzuzeigen, die auf dem System installiert sind (von über 50.000)--manual-installed
um die Pakete aufzulisten, die explizit von einem Befehl entweder direkt oder als Abhängigkeiten installiert wurden.Alternativ können Sie Folgendes tun:
apt list --manual-installed | grep -F \[installed\]
um eine Liste der Pakete zu erhalten, die nur aus Benutzerbefehlen und deren Abhängigkeiten resultieren, und um zusätzliche Informationen zu diesen zu erhalten, wie z. B. die unterstützte Version und Architektur (x86, x86_64, amd64, all, etc.)quelle
Wie mehrere Leute kommentiert haben, scheint das Apt-Mark-Showmanual ein bisschen fehlerhaft zu sein (und ich habe es als Fehler 727799 gemeldet ). Wenn ich es verwende, meldet es tatsächlich eine Menge Dinge, die nicht einmal in / var / lib / apt / extended_states (wo dies gespeichert werden soll) angemeldet sind, und apt-get meldet Dinge nicht als installiert an / var / lib / apt / extended_states (nur in / var / lib / dpkg / status). Das Python-Skript von txwikinger oben stammt direkt aus / var / lib / apt / extended_states, aber wenn Sie es heute verwenden, funktioniert die Syntax möglicherweise nicht (meins generiert gerade Fehler mit Kubuntu 13.10). Die aktualisierte Syntax lautet:
Für mich war dies eine sehr kurze Liste von 5 Punkten, die auch nicht genau zu sein scheint.
quelle
sys.exit(1)
withoutimport sys
kann in neueren Versionen von Python zu einem Fehler führen. Entwederimport sys
oder verwendenexit(1)
.Ich möchte eine GUI-Lösung geben.
Öffnen
Synaptic Package Manager
Gehe zu
Status
Klicken
Installed (manual)
Es wird die Liste der manuell von apt oder aptitude installierten Pakete angezeigt.
Leider konnte ich keine Option
Custom Filters
finden, um herauszufinden, ob einfoobar
Paket manuell oder automatisch installiert wurde.Wenn das Paket unter,
Installed
aber nicht unterInstalled (manual)
ist, wurde es automatisch installiert. Wenn das Paket darunterInstalled (manual)
ist, wurde es manuell installiert.quelle
Wenn Ihnen niemand eine nette Antwort mit einem apr-something-Befehl gibt, können Sie es auf die harte Tour tun . Apt-get speichert seine Informationen in / var / lib / apt / extended_states. Jede automatisch installierte Datei wird dieser Datei hinzugefügt. Wenn Sie ein Paket, das sich bereits in dieser Datei befindet, manuell installieren, bleibt das Paket in dieser Datei, jedoch mit der Einstellung Automatisch installiert: 0 in der zweiten Zeile. Es wird nicht gelöscht.
Hinweis: Erwartungsgemäß bessere Antworten, die wahrscheinlich funktionieren, wenn sich die Dateiposition ändert. Ich behalte meine für den Fall, dass die Informationen zum Speicherort der Datei nützlich sind.
quelle
apt-get install liferea
und es wurde nicht installiert, aber ich habe eine Ausgabe erhalten, die den Effekt "als manuell installiert markiert" hatte. Jetzt ist Liferea noch in der Datei, außer die nächste Zeile hat ein0
statt eines1
. Außerdem sollten Sie Ihr Regex-Muster auf" foobar$"
anstatt auf nur ändernfoobar
.Nachdem ich viel gegoogelt habe, habe ich es geschafft, dieses Skript zusammenzustellen. Es funktioniert in Ordnung für mich:
quelle
sort -u
anstelle von verwendensort | unique
. Daapt-mark
die Architektur nicht angezeigt wird, sollten Sie sie von der Ausgabe von dpkg entfernen, bevor Sie Operationen festlegen (oder verwendendpkg-query -W -f='${Package}\n'
). Außerdem listet dpkg möglicherweise einige Pakete auf, die derzeit nicht installiert sind. Was "desc" betrifft, könnten Sie "dpkg-query -W -f =" # $ {binary: Summary} \ n "$ pack verwenden, was schneller ist.apt-mark
möglicherweise wird die Architektur für einige Pakete angezeigt, jedoch nicht für so vieledpkg -l
.apt-cache search
ist langsam. Das Abrufen einer Liste der installierten Daten im Voraus mithilfe von help.ubuntu.com/community/ListInstalledPackagesByDate ist möglicherweise effizienterWie Li Lo sagte,
apt-mark showauto
sollte man sich eine fette Liste der Dinge automatisch installieren lassen.Nun, um die manuell installierten Dinge zu zeigen, stellt sich heraus, dass es einen schönen einfachen Suchmodifikator für Eignung gibt. Aber das willst du nicht. Sie möchten einen riesigen Bash-Befehl schreiben, der Raketenwissenschaft leistet.
Hinweis: Dies ist eher ein Beispiel dafür, wie cool Sie aussehen werden, wenn Sie all Ihren Freunden massive Bash-Befehle geben.
Ich habe es zur besseren Lesbarkeit in zwei Zeilen aufgeteilt. Was macht das?
apt-mark
quelle
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
ist richtig besser;)Dies listet alle manuell installierten Pakete auf, ohne: Abhängigkeiten, deinstallierte Pakete, Pakete, die während der Systeminstallation installiert wurden.
quelle