Ich habe ein einfaches Ubuntu 10.10 auf meinem Computer installiert und Software über apt-get installiert. Letzte Woche habe ich es geschafft, alles zu brechen und habe gerade von vorne begonnen, und ich muss meine Software neu installieren. Gibt es eine Möglichkeit, eine Liste mit allen Paketen zu erstellen, die ich manuell installiert habe?
Damit es mir eine Liste gibt wie texlive, ...
und nicht texlive, texlive-dep1, textlive-dep2, ...
und alle Standardpakete entfernt werden?
Wenn ich irgendwie herausfinden könnte, welche Programme aus der regulären Installation ich entfernt habe, wäre das auch fantastisch!
Update 23.05.2015: Ich verwende jetzt Ansible als Konfigurationsmanagement auf meinen Systemen. Dort gebe ich die zu installierenden Pakete an. Dies dient dem Ziel, alle Programme auf einem neuen System zu installieren, noch besser. Diese Frage könnte also der Einstieg in ein leichtes Konfigurationsmanagement sein.
something
und nichtsomething-common
so gut.Dieser Thread von superuser.com gibt diese Lösung:
quelle
apt-get
, sowie deren Abhängigkeiten. So zum Beispiel, wenn Sie installiertaptitude
, dann wird es auch Listeapt-xapian-index aptitude-common libboost-iostreams1.54.0 libclass-accessor-perl libcwidget3 libept1.4.12 libio-string-perl libparse-debianchangelog-perl libsigc++-2.0-0c2a libsub-name-perl libtimedate-perl libxapian22 python-chardet python-debian python-six python-xapian
Wenn sich Ihre apt-Protokolle in / var / log / apt befinden, sollte Folgendes funktionieren:
Oder wenn Sie den sich wiederholenden Müll in der Ausgabe loswerden möchten:
quelle
Sie könnten apt-mark verwenden , aber ich empfehle debfoster :
Dadurch werden alle installierten Pakete überprüft und herausgefunden, auf welchen die anderen installiert bleiben:
Wenn Sie jede Frage mit "y" beantworten (drücken Sie einfach die Eingabetaste, um sich schnell zu bewegen), sammelt debfoster die Paketliste und schreibt sie zeilenweise in eine Datei. Standardmäßig ist dies um
/var/lib/debfoster/keepers
. Es sieht aus wie das:Ich konfiguriere debfoster über
/etc/debfoster.conf
, um diese Liste zu/etc/debfoster-keepers
erstellen und die Datei mit etckeeper zu verfolgen zu , um Verlauf und Backups zu führen. Die Antwort hier zeigt, wie eine Liste von Paketen aus einer durch Zeilenumbrüche getrennten Textdatei installiert wird:Beachten Sie hier eine Einschränkung, Pakete, die Sie gelöscht haben, haben ein '-' vor sich. Sie möchten also diese Zeilen entfernen, bevor Sie apt-mark aufrufen.
Auch wenn die Website des Debfosters besagt, dass Debfoster zugunsten von Aptitude veraltet ist, bevorzuge ich die schnelle und einfache Konfiguration von Debfoster. Es versetzt Sie in die Mitte Ihrer Paketdatenbank und ermöglicht es Ihnen, Dinge zu bereinigen und die automatischen und manuellen Pakete offensichtlicher werden.
Geben Sie an der Debfoster-Eingabeaufforderung "h" ein, um Ihre Optionen zu erläutern. Art "?" um die Paketbeschreibung zu sehen. Das How-to hier könnte nützlich sein.
quelle
Gibt alle manuell installierten Pakete an (keine Systempakete, keine Abhängigkeiten). Zum Beispiel zeigt es
build-essential
aber nichtgcc
.quelle
Für diejenigen, die apt- * tools bevorzugen, gibt es ein Dienstprogramm, mit dem Sie den manuellen / automatischen Status abfragen und ändern können.
Sie können auch Muster für Pakete angeben, an denen Sie interessiert sind:
quelle
Ich habe es jetzt endlich verstanden:
quelle
/var/log/apt/history.log(.N.gz)
.zgrep
anstelle vongunzip
oderzcat
verrohrtgrep
. Ich glaube, es ist ein Wrapper-Skript, das mit gzip ausgeliefert wird. Es akzeptiert auch unkomprimierte Dateien, so dass Sie Ihr Skript vereinfachen könnenzgrep -E '(\[INSTALLIEREN\]|\[INSTALL\])' /var/log/aptitude* | awk '{ print $2 }'
Ich kann alles abrufen, indem ich die Protokolldateien in / var / log / apt / öffne.
Ich gehe dann hinein und filtere die apt-get install-Pakete manuell heraus. Es kann einen Weg geben, dies programmatisch zu tun, aber ich bin mir dessen nicht bewusst.
quelle
Auf diese Weise sehen Sie die Liste der in der Vergangenheit ausgeführten Befehle.
Entfernen Sie den Grep-Code, wenn Sie weitere Informationen benötigen:
wenn das Protokoll komprimiert ist (dh mit gz enden)
Wenn Sie fertig sind, können Sie es erneut komprimieren:
quelle
zcat
? Es ist so einfach wiezcat filename.gz
. Man kann es einfach für gzip-komprimierte Dateien anstelle von verwendencat
. Auchgrep
kann durchzgrep
zzgrep Commandline history.log.1.gz
.(grep "Commandline" history.log ; zgrep "Commandline" history.log.*.gz ) | grep " install " | grep -v -- "--yes" | sed -r "s/^.*install //"
. Es weist Fehler auf, da die entfernten Pakete ebenfalls aufgelistet werden und wenn ein Paket mehrmals installiert wurde, wird es mehrmals aufgelistet.Ich habe hier keine Lösung für mich gesehen, ich habe einige Deb-Pakete mit dpkg installiert und einige der Dinge, nach denen ich besonders gesucht habe, fehlten.
Ein ziemlich langer Einzeiler, der sich aber bequem kopieren und einfügen lässt, wäre:
Der obige Befehl speichert eine Liste von Paketen in einer Datei in Ihrem aktuellen Arbeitsverzeichnis mit dem Namen
my-packages
.Erläuterung
Ich habe zuerst eine Liste von Paketen erstellt, die die Grundlinie der während der Installation ausgewählten Pakete bilden.
Gefolgt von einer langen Liste von Elementen, die im Allgemeinen installiert sind.
Ich verglich dann die zwei Akten
initial
undinstalled
listete nur die Einzelteile auf, die zum installierten einzigartig sind.Von dort wollte ich die Abhängigkeiten herausfiltern, hier kann es vorkommen, dass bei dieser Methode einige gewünschte Pakete fehlen, es sind keine Abhängigkeiten bekannt, die auch explizit installiert werden.
Ich habe eine schnelle Bash-Funktion geschrieben, um diese Schritte bei der Verarbeitung dieser Elemente zu verkürzen.
Danach habe ich jede Zeile aus meiner Datei
custom
in diese Funktion mit übergebenxargs
.Sobald ich die lange Liste aller möglichen Abhängigkeiten hatte (nicht sicher bei jeder möglichen Anweisung), bekam ich wieder die Zeilen, die für eine einzelne Datei eindeutig waren.
Und meine fertige Paketliste ist jetzt in einer Datei mit dem Namen
manual
verfügbar, die ich überprüfen kann.quelle
Jemand, der mit https://unix.stackexchange.com/questions/3595/ubuntu-list-explicitly-installed-packages/3624#3624 verlinkt ist, hat eine gute Lösung, verhält sich aber nicht richtig als Ausgabe von aptitude hat sich verändert. Hier ist eine aktualisierte Version, basierend auf den aktuell installierten Paketen im Vergleich zu 12.04 LTS. Sie müssen
aptitude
installiert sein, das ist die einzige Voraussetzung.Um den obigen Befehl in Teile zu zerlegen, gibt dieses Bit ein Paket pro Zeile von allem aus, was auf dem System installiert ist
Dadurch wird die Standardpaketliste heruntergeladen und die redundanten Informationen werden abgeschnitten.
und
comm
vergleicht die beiden Dateien und gibt die Pakete aus, die nicht in der Standardliste enthalten sind.quelle
Verwenden Sie eine Verteilungsmanifestdatei als Basispaket. Sortieren Sie die manuell installierten Ergebnisse nach Architektur und Abschnitt in Paketgruppen, damit Sie sich leichter auf Gruppen von Paketen konzentrieren können (möglicherweise interessieren Sie sich nicht für einige Abschnitte).
https://gist.github.com/darrenleeweber/8cc570ff402f19af7fa4
quelle
apt-get install -y
und die Datei ein Bash-Skript ist. Dann könnten alle Paketdateien in eine Vagrant-Bereitstellungsschleife aufgenommen werden.quelle
Ich habe kein passendes für mich gefunden, also habe ich ein Drehbuch geschrieben. Durch Analyse des Inhalts von /var/log/apt/history.log* und / var / log / aptitude und anschließende Sortierung nach Datum und Uhrzeit werden zwei Listen erstellt, wobei eine manuell installierte und eine installierte, aber entfernte pkgs. Skript mit Bestätigung der 'Apt-Liste'. eine kleine abweichung, da die verwendung von dpkg als ppa quelle installiert und modifiziert.
Ich habe hier, https://github.com/eexpress/eexp-bin/blob/master/self-installed-pkg.pl .
Wenn jemand es testen muss, möglicherweise Code ändern muss, da meine Protokolldateien in Chinesisch und Englisch (insbesondere RFC2822-Datum / Uhrzeit-Format) gemischt sind, muss ich damit umgehen.
quelle
Ich denke, Sie möchten
/var/log/apt/history.log
und seine Freunde verwenden, um die vorgenommenen Änderungen zu geben:(Geändert von der Quelle )
Gibt Ihnen alle Pakete, die in der Befehlszeile mit einer Variation von installiert wurden
apt-get install
.Es werden die komprimierten Dateien in den alten
history.log
s mit den aktuellen addierthistory.log
und grep durchlaufen, wobei Zeilen mit apt [-get] install [und / oder restart] extrahiert werden und der Rest der Zeile (-o flag) angezeigt wird, der dem entspricht Paketname (n).Dies erfordert eine kleine Modifikation (zB mit
sed
), wenn Sie nur die Paketnamen in separaten Zeilen haben möchten. eine Übung für den Leser!Es ist erwähnenswert, dass der Synaptic Package Manager (
gksu synaptic
oderkdesudo synaptic
) im Abschnitt "Status" eine Liste "Installiert (Manuell)" hat. Wenn Sie die gesamte Liste zum Entfernen markieren [nicht anwenden !!], sollten Sie in der Lage sein, die markierten Änderungen zu speichern und auf diese Weise eine Liste der Pakete zu erhalten. Achtung: das hatsynaptic
für mich gesperrt (Berechnung der Abhängigkeitsentfernungen vermutlich).quelle