Die letzte Aktualisierung der Suche wurde mit apt-get durchgeführt

30

Ich muss das letzte Mal finden, dass die

apt-get update

Befehl wurde auf meinem Server ausgeführt. Wie kann ich diese Informationen ermitteln?

Mark Roddy
quelle

Antworten:

23

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.

Tuomas
quelle
+1 für das Einschließen der apt.conf-Zeile. Am Ubuntu 14.04 scheint die Datei bei/var/lib/apt/periodic/update-stamp
GnP
11

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.

rkthkr
quelle
2
Wie an anderer Stelle bereits erwähnt, werden einige Dateien möglicherweise nicht aktualisiert und wurden daher nicht erneut heruntergeladen. Dies ist in Ordnung, wenn Sie wissen möchten, wie aktuell Ihre Paketlisten sind, aber nicht, wenn Sie wissen möchten, wann apt-get update zuletzt ausgeführt wurde. Ersteres ist wahrscheinlicher.
David Pashley
10

Eine apt-get updatekann 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 updateausgeführt wurde:

stat -c %Y /var/cache/apt/
Hans Lambermont
quelle
Beachten Sie, dass bei der Paketinstallation möglicherweise auch das Cache-Verzeichnis aktualisiert wird. Dies ist keine zuverlässige Überprüfung aufapt-get update
GnP
3

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!

Aaron Belovsky
quelle
1
Funktioniert leider nicht. Darin /var/log/aptwird 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
Alex
2

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.

slacy
quelle
1
$ ls -l /var/lib/dpkg/lock 
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
user104833
quelle
1

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.

Josh Brower
quelle
1

Ich benutze, /var/cache/aptum festzustellen, ob ich laufen muss apt-get update. Wenn der Unterschied zwischen der aktuellen Zeit und der Cache-Zeit /var/cache/aptweniger 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

Nam Nguyen
quelle
Die Antwort ist unvollständig. Was ist infound isEmptyString? Auch infoist eine schlechte Wahl des Funktionsnamens, da dies auch ein Befehl ist. Ansonsten schöne Lösung!
Ronny Andersson
@RonnyAndersson, alles in dieser Bibliothek: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen
0

/var/log/dpkg.log zeichnet auf, was getan wurde, aber nicht unbedingt welche App mit dem Namen dpkg (synaptic, apt-get, etc).

Jonathan
quelle
0

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.

Viel Spaß
quelle
Es ist nicht praktikabel, es in ein Skript einzuschließen, wenn Sie Hunderte von Servern haben und kein weiteres Skript verwalten möchten, das bei der nächsten Aktualisierung Ihres apt-get-Pakets Probleme verursachen könnte. Ich denke, der Anforderer sucht nach einer Antwort, die die bereits auf seinem Computer vorhandenen Informationen nutzt.
PDWalker
0

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.

Christian Long
quelle