Wie kann ich den Verlauf von apt-get install anzeigen?

18

Wie kann ich den Verlauf von apt-get installBefehlen anzeigen, die ich manuell ausgeführt habe?

Mir scheint, dass alle verfügbaren Methoden alles zeigen, was von Beginn der Ubuntu-Installation an installiert wurde.

Wie kann ich den Verlauf apt-get installseit dem Abschluss meines Systeminstallationsprozesses anzeigen ?

Sag mir warum
quelle
Nun ja. Was würden Sie sonst noch erwarten? Möchten Sie nur diejenigen anzeigen, die Sie vom Terminal aus ausgeführt haben, und nicht diejenigen, die von einer GUI oder etwas anderem ausgeführt wurden? Bitte bearbeiten Sie Ihre Frage und klären Sie.
Terdon
@terdon Okay hat eine neue Bearbeitung vorgenommen
TellMeWhy
1
Es gibt Protokolle dpkgin /var/log/dpkg.log*.
Velkan
1
@ParanoidPanda Das schlägt auf verschiedene Arten fehl. Verlaufsverkürzungen, Dinge, die in anderen Shells ausgeführt werden, Dinge, die aus dem Verlauf entfernt oder
gar
1
@ MrBones: Ich weiß, und das habe ich in meiner Antwort (und in den Kommentaren darunter) angegeben. Das OP hat jedoch nach einer Möglichkeit gefragt, alle Instanzen anzuzeigen, wenn sie den apt-get installBefehl zum Installieren eines Pakets manuell ausgeführt haben , und ich habe eine Lösung bereitgestellt, die diese Informationen liefert, sofern die Verlaufsdatei nicht auf bestimmte Weise geändert wurde (z. B. die Einträge) Wurde entfernt).

Antworten:

20

Ich denke , die Antwort gegeben hier von kos ist der beste Weg , die ich bisher gesehen habe. Obwohl Software Center verwendet apt, wird alles, was es installiert hat, ebenfalls aufgelistet.

Der Befehl lautet:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'
Arronisch
quelle
Ich werde es testen, wenn ich nach Hause komme und es akzeptieren, wenn es funktioniert :)
TellMeWhy
Es ist nicht! Schauen
kos
Verwenden Sie diese Option , ist viel sicherer für diese Aufgabe: zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d': grep -Po '^Commandline:(?=.* install ) \K.*'filtert nur die apt-getBefehle enthalten , installmit einem vorderen und hinteren Raum, sed '1,4d' könnte von der spezifischen Installation abhängen; in meinem 1,4löscht genau die Anzahl der Einträge aus Ubiquity, die Sie entfernen möchten. Lassen Sie mich wissen, ob die Nummer in Ihrer Installation identisch ist. Auf diese Weise haben wir zumindest eine Basislinie: |
Kos
@kos Ich bekomme zusätzliche Zeilen wie apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericmit dem neuen Befehl. Sind sie die Ubiquity-Linien?
Arronical
Nein, diese scheinen von Software Updater zu stammen. Es gibt keine Möglichkeit, zwischen Befehlen, die vom Benutzer ausgeführt werden, und Befehlen, die von einem apt-getFrontend ausgeführt werden, zu unterscheiden , abgesehen von Ubiquity, das nur einmal ausgeführt wird ( aptdaemonEinträge werden beispielsweise auch von diesem Befehl angezeigt). Am besten ist es jedoch, diesen Befehl zu verwenden, der die Ubiquity-Einträge zumindest ausschließt.
Kos
9

Geben Sie einfach den folgenden Befehl in Ihr Terminal ein, um alle Installationsprotokolle anzuzeigen.

grep " install " /var/log/dpkg.log
Vikas Chaudhary
quelle
3

Um die @Arronical-Antwort zu vereinfachen: Ein guter Trick, den ich kürzlich gelernt habe, ist, dass Sie zcat -qfsowohl txt- als auch txt-gzipped-Dateien kategorisieren können.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

wird

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Vom mann zcat:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.
jjcf89
quelle
2

Hier ist ein Skript, das nur die aktuell installierten Pakete der obersten Ebene druckt , wobei "Pakete der obersten Ebene" als atp-Pakete definiert ist, von denen keine anderen atp-Pakete abhängen. Wenn solche Top-Level-Programme von atp oder einem Paketmanager wie synaptic installiert wurden, wurden sie vom Benutzer manuell ausgewählt.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

Die Pakete werden in umgekehrter Reihenfolge gedruckt, unter der Annahme, dass der Benutzer die neueren Informationen eher möchte und das Programm langsam ist.

Programmablauf:

  • Das Programm sammelt zuerst alle installierten Pakete in einer Liste, indem es die Dateinamen unter liest /var/lib/dpkg/info/. Die Datei-Mod-Zeiten sind die Installationszeiten.
  • Diese Liste ist in umgekehrter Reihenfolge sortiert.
  • Für jedes installierte Paket $Pkgein Aufruf, apt-cache rdepends $Pkg um die umgekehrten Abhängigkeiten von anzufordern $Pkg. Wenn keine Abhängigkeiten vorhanden sind, handelt es sich um ein Paket der obersten Ebene, und die Paketinformationen werden gedruckt: Datum Uhrzeit Paketname

Anmerkungen:

  • Das Skript hängt vom Ausgabeformat ab, apt-cache rdepends $Pkgdas für das menschliche Auge bestimmt ist und in zukünftigen Versionen von apt geändert werden kann.
  • Der Code für das Sammeln von Dateinamen unter / var / lib / dpkg / info / stammt aus diesem Post von unix.stackexchange . Wie das Poster "mikel" bereits sagte , sind die dpgkVerlaufsprotokolldateien nicht zuverlässig, da sie nach Erreichen eines bestimmten Volumens herausgedreht werden.
  • Manpage für apt-chache
  • Der Aufruf apt-cache rdepends ...ist vermutlich sehr langsam, da jeder Aufruf durch Iteration aller Abhängigkeiten berechnet wird. Daher beginnt das obige Skript mit den neuesten Installationen, um dem Benutzer so viel sofortige Befriedigung wie möglich zu bieten.
  • Das --installedFlag after apt-cacheprüft, ob die von dpkg installierten Pakete auch apt-installiert sind. Wenn der Benutzer oder eine andere Installationssoftware apt umgeht und dpkg direkt verwendet, ist dies möglich. DIESER FALL WURDE NICHT GETESTET, aber ich denke, dass etwas Auffälliges entweder in der Standard- oder in der Fehlerausgabe gedruckt wird
  • Die Ausgabe enthält keine manuell ausgewählten Pakete, die später von einem höheren Paket abhängig wurden. Die Ausgabe kann auch Pakete enthalten, die über apt von einer anderen Installationssoftware eines Drittanbieters installiert wurden und daher nicht wirklich manuell installiert werden. Wenn der Zweck der Ausgabe jedoch darin besteht, ein wiederhergestelltes Linux aus einem Sicherungsverzeichnis zu /homeerstellen, in dem die Software von Drittanbietern enthalten ist, ist diese Ausgabe geeignet.
  • Einige der Paketnamen enthalten Versionsnummern, andere nicht. Erwähnt nur, um das Bewusstsein für die Tatsache zu bringen.
Craig Hicks
quelle
1

Wenn Sie alle Dinge sehen möchten, die Sie installiert haben, indem Sie Folgendes ausführen:

sudo apt-get install [package]

Und Sie haben weder den Bash-Verlauf durcheinander gebracht, noch möchten Sie den Verlauf dieser Art von Installation für einen anderen Benutzer (oder für alle Benutzer) anzeigen. Dann können Sie einfach Folgendes ausführen:

history | grep "apt-get install"

Und das sollte Ihnen meist relevante Ergebnisse bringen.


quelle
1
Bekomme ich damit die ganze Geschichte?
TellMeWhy
@DevRobot: Sofern Sie die Einträge apt-get installin der .bash_historyDatei nicht manuell geändert oder diese Datei gelöscht haben, zeigt der Befehl alle Instanzen an, wenn Sie einen Befehl mit der Zeichenfolge apt-get installin Ihrem Benutzerkonto ausgeführt haben (auch wenn Sie dies getan haben) Führen Sie den Befehl als root und damit nicht genau als Benutzerkonto aus - das heißt, Sie führen einen Befehl mit sudo) aus.
2
Es könnte ein Problem geben, wenn Sie mehr als 200 Befehle
eingegeben haben
2
@Arronical Beweis wird erwartet, wenn Ansprüche geltend gemacht werden ;-)
Rinzwind
1
Ich selbst würde 500 als Standard annehmen ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind
1

Wenn Sie apt-get installden Befehlsverlauf anzeigen möchten , verwenden Sie den folgenden Befehl:

grep "apt-get install" .bash_history

Ausgabe:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

Weitere Informationen finden Sie unter Zusätzliche Informationen .

Es gibt auch detaillierte Installationsinformationen in /var/log/apt/den history.logund history.log.X.gzDateien und term.logund term.log.X.gzDateien

Wenn Sie den Verlauf nur apt-geteingeschlossener Befehle wünschen , dann

history | grep apt-get

Ravan
quelle
apt-mark showmanualZeigt alle Pakete an, die installiert wurden, als das Betriebssystem installiert wurde, und nicht nur diejenigen, die tatsächlich manuell installiert wurden. Es ist eine merkwürdige Art, sich zu verhalten!
Arronical
1
Dies gibt nicht notwendigerweise spezifische Details bezüglich der Geschichte. Was die Leute betrachten müssen , sind /var/log/apt/history.logund ähnliche Dateien. Sie erhalten nur die Liste der manuell ausgewählten und automatisch ausgewählten Pakete. Sie geben in dieser Antwort keinen chronologischen Verlauf darüber an, was installiert, was entfernt, was aktualisiert usw. wurde.
Thomas Ward
@Arronical - Wo ist die Manpage apt -mark showmanual? Ich kann es auf der Ubuntu 16.04 LTS-Manpage nicht sehen für apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks
0

Um zu sehen , was Sie haben installiert und entfernt, neu installiert, etc. Mehr Informationen über die Reise von apt-get installiert.

Die Antwort kann in einen Alias ​​geändert werden:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'
Mike
quelle
0

Beachten Sie, dass einige Argumente vor der Installation gesetzt werden können, wie dies das virtualmin-Skript während der Installation tut: apt-get -y install packagename.

Wenn Sie also alle Installationsbefehle erfassen möchten, müssen Sie die Regex-Abfrage ändern.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
Yann Papouin
quelle