Grundsätzlich besuche ich die einzelnen Hosts nacheinander mit einem Skript. Dieses Problem ist bereits für andere Kontexte gelöst. Darum möchte ich hier nur einen einzelnen Host betrachten.
Unter /var/log/apt gibt es verschiedene Log-Dateien. Das ist zum einen das aktulle history.log. Andererseits hat es mehrere archivierte Logdateien, die komprimiert sind, also history.log.1.gz, history.log.2.gz usw. Die Dateien enthalten Einträge der folgenden Struktur:
Code: Alles auswählen
Start-Date: 2020-07-19 21:21:51
Commandline: apt-get upgrade
Requested-By: debian (1000)
Upgrade: qemu-utils:amd64 (1:3.1+dfsg-8+deb10u5, 1:3.1+dfsg-8+deb10u6)
End-Date: 2020-07-19 21:21:52
Start-Date: 2020-07-30 10:11:29
Commandline: apt-get dist-upgrade
Requested-By: debian (1000)
Upgrade: grub-common:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), grub2-common:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), redis:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2), grub-pc:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), grub-pc-bin:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), qemu-utils:amd64 (1:3.1+dfsg-8+deb10u6, 1:3.1+dfsg-8+deb10u7), redis-tools:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2), redis-server:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2)
End-Date: 2020-07-30 10:11:36
Als ersten Schritt möchte ich mal alle Dateien zusammenhängen. Mit zcat -f kann ich sowohl komprimierte als auch unkomprimierte Dateien zusammenhängen:
Code: Alles auswählen
zcat -f /var/log/apt/history.log*
Code: Alles auswählen
grep -E '(^Commandline:|^End-Date:)'
Code: Alles auswählen
$ zcat -f /var/log/apt/history.log* | grep -E '(^Commandline:|^End-Date:)'
Commandline: apt-get autoremove python3-virtualenv
End-Date: 2020-04-04 14:58:50
Commandline: apt-get install python3-venv
End-Date: 2020-04-04 14:58:57
Commandline: apt-get upgrade
End-Date: 2020-04-05 12:51:53
Commandline: apt-get dist-upgrade
End-Date: 2020-04-05 12:52:14
Commandline: apt-get install lsof
End-Date: 2020-04-11 00:42:59
Code: Alles auswählen
awk '/Commandline: apt-get dist-upgrade/ { getline; print }'
Code: Alles auswählen
$ zcat -f /var/log/apt/history.log* | grep -E '(^Commandline:|^End-Date:)' | awk '/Commandline: apt-get dist-upgrade/ { getline; print }'
End-Date: 2020-07-30 10:11:36
End-Date: 2020-05-12 18:34:14
End-Date: 2020-04-05 12:52:14
Code: Alles auswählen
grep -o -E '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'
Code: Alles auswählen
sort -n | tail -1
Code: Alles auswählen
$ zcat -f /var/log/apt/history.log* | grep -E '(^Commandline:|^End-Date:)' | awk '/Commandline: apt-get dist-upgrade/ { getline; print }' | grep -o -E '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}' | sort -n | tail -1
2020-07-30