Ich muss das letzte Mal finden, dass die
apt-get update
Befehl wurde auf meinem Server ausgeführt. Wie kann ich diese Informationen ermitteln?
Ich muss das letzte Mal finden, dass die
apt-get update
Befehl wurde auf meinem Server ausgeführt. Wie kann ich diese Informationen ermitteln?
Antworten:
Zumindest in Ubuntu-Systemen gibt es eine Datei /etc/apt/apt.conf.d/15update-stamp mit:
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
Sehen Sie also nach, ob Sie / var / lib / apt / periodic / update-success-stamp haben und ob Sie es haben, können Sie es verwenden
stat -c %y /var/lib/apt/periodic/update-success-stamp
Befehl zum Abrufen des Zeitpunkts des letzten Aufrufs von "apt-get update".
Und wenn Ihr System nicht über diese passende Konfigurationsdatei verfügt, können Sie sie jederzeit hinzufügen.
Sie können die Zugriffszeiten für die Dateien in / var / lib / apt / lists überprüfen, die beim Ausführen von apt-get update aktualisiert werden. Wenn apt-get update mit sudo ausgeführt wurde, sollte nach Abschluss eine Zeile in /var/log/auth.log angemeldet sein.
Eine apt-get update
kann erstellen oder zu aktualisieren Dateien nicht, tut es das Cache - Verzeichnis aktualisieren , damit wir verwenden können , um den Zeitstempel zu erhalten , wenn die letzten apt-get update
ausgeführt wurde:
stat -c %Y /var/cache/apt/
apt-get update
Gehen Sie nicht von den Sperrdateien aus. Sperrdateien sind nicht zuverlässig, sie bewegen sich mit der Zeit bei neuen Linux-Versionen und viele Programme bereinigen (entfernen) Sperrdateien, wenn sie damit fertig sind.
Mit dem folgenden Befehl erhalten Sie, wonach Sie suchen.
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
Dies sind zwei Befehle in einem. Die Ergebnisse des ersten Befehls werden durch das Pipe-Symbol (|) in den zweiten gefiltert.
Im ersten Befehl verwende ich "ls", um den Dateiinhalt des Verzeichnisses / var / log / apt aufzulisten. In diesem Verzeichnis werden die Zugriffsprotokolle für apt-get gespeichert. Der "-lt" -Teil besteht eigentlich aus zwei Schaltern. Der erste Schalter "l" weist "ls" an, eine Datei pro Zeile mit Details aufzulisten. Der zweite Schalter "t" weist "ls" an, nach Datum und Uhrzeit zu sortieren. "--time-style" bewirkt, dass die Datums- und Uhrzeitanzeige im Format "JJJJ-MM-TT HH: MM" erfolgt.
Im "grep" -Teil des Befehls weist die Option "-o" grep an, nur die Teile jeder Zeile anzuzeigen, die exakt mit dem regulären Ausdruck übereinstimmen. Der reguläre Ausdruck, den ich hier verwendet habe, erkennt Datums- und Uhrzeitangaben in dem Format, das im Befehl "ls" angegeben ist. Ganz am Ende des "grep" -Befehls werden Sie auch die wahre Magie bemerken, dass es einen "-m" -Schalter mit der Nummer "1" gibt, der unmittelbar folgt. Dadurch wird "grep" angewiesen, nicht mehr nach Übereinstimmungen zu suchen, nachdem die erste gefunden wurde.
Zusammenfassend listen wir also die Details der Apt-Protokolldatei auf, damit wir das Datum der letzten Änderung sehen können. Anschließend sortieren wir nach Datum und teilen grep mit, dass das erste Datum ganz oben stehen soll. Dieses Datum wird dann zurückgegeben. Das ist das letzte Datum, an dem apt-get gelaufen ist.
Um Devil's Advocate für einen Moment zu spielen, ist es jedoch üblich, dass Debian-Plattformen wie Ubuntu apt-get als einen Job einplanen, der regelmäßig ausgeführt wird. Wenn Sie nach der Person am anderen Ende der Ausführung von apt-get suchen, finden Sie möglicherweise tatsächlich eine Maschine. Sie können jederzeit Zugriffsprotokolle mit den entsprechenden Protokollen abgleichen, um festzustellen, ob Zeitstempel übereinstimmen. Es ist auch möglich, den Befehlsverlauf eines Benutzers in einem gewissen Umfang anzuzeigen.
Hoffe das hilft!
/var/log/apt
wird auch protokolliert, wenn ich zum Beispiel eine apt-get install some-package
. Eigentlich auf Ubuntu protokolliert es nicht etwas, wenn ich es tueapt-get update
Ich vermute, Sie können die zuletzt geänderten Zeiten in files / var / cache / apt überprüfen, um herauszufinden, wann die letzten Aktualisierungen auf die Paketlisten angewendet wurden.
Ich habe dies gerade getestet und zweimal hintereinander "sudo apt-get update" ausgeführt, und die Daten haben sich nicht von ihrem aktuellen Wert geändert. Ich vermute jedoch, dass dies darauf zurückzuführen ist, dass keine neuen Updates angewendet werden mussten und dass die Caches aktiv sind miteinander ausgehen.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
Synaptic protokolliert eine Verlaufsdatei (> Datei> Verlauf). Aptitude protokolliert sowohl den Verlauf in / var / log / aptitude als auch automatisch installierte Pakete in / var / lib / aptitude / pkgstates, sodass Sie diese auf die neuesten Aktivitäten überprüfen können.
Ich benutze, /var/cache/apt
um festzustellen, ob ich laufen muss apt-get update
. Wenn der Unterschied zwischen der aktuellen Zeit und der Cache-Zeit /var/cache/apt
weniger als 24 Stunden beträgt, muss ich standardmäßig nicht ausgeführt werden apt-get update
. Das Standardaktualisierungsintervall kann überschrieben werden, indem eine Zahl an function übergeben wirdrunAptGetUpdate()
function getLastAptGetUpdate()
{
local aptDate="$(stat -c %Y '/var/cache/apt')"
local nowDate="$(date +'%s')"
echo $((nowDate - aptDate))
}
function runAptGetUpdate()
{
local updateInterval="${1}"
local lastAptGetUpdate="$(getLastAptGetUpdate)"
if [[ "$(isEmptyString "${updateInterval}")" = 'true' ]]
then
# Default To 24 hours
updateInterval="$((24 * 60 * 60))"
fi
if [[ "${lastAptGetUpdate}" -gt "${updateInterval}" ]]
then
info "apt-get update"
apt-get update -m
else
local lastUpdate="$(date -u -d @"${lastAptGetUpdate}" +'%-Hh %-Mm %-Ss')"
info "\nSkip apt-get update because its last run was '${lastUpdate}' ago"
fi
}
Beispielausgabe:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
Ich habe diese Funktionen aus meinem persönlichen Github extrahiert: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
info
und isEmptyString
? Auch info
ist eine schlechte Wahl des Funktionsnamens, da dies auch ein Befehl ist. Ansonsten schöne Lösung!
Binden Sie apt-get in ein Skript ein, das zuerst einen Zeitstempel in eine Datei schreibt und dann die übliche Arbeit erledigt. Auf diese Weise können Sie das Zeitstempelformat und den Speicherort definieren.
Hier ist ein einfacher Einzeiler, um ein Update auszuführen, wenn es am letzten Tag noch nicht ausgeführt wurde.
(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)
Es wird nach der Datei update-success-stamp gesucht, die vor mehr als einem Tag geändert wurde. Wenn die Datei des richtigen Alters gefunden wird, wird das Update ausgeführt. Hinweis: Damit dies funktioniert, muss die Datei update-success-stamp vorhanden sein.
/var/lib/apt/periodic/update-stamp