Frage Finden Sie, wann das letzte Update mit apt-get durchgeführt wurde


Ich muss das letzte Mal finden, dass die

apt-get update

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


29
2018-06-05 19:10


Ursprung




Antworten:


Zumindest in Ubuntu-Systemen gibt es eine Datei /etc/apt/apt.conf.d/15update-stamp, die folgendes enthält:

APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

Sehen Sie, ob Sie / var / lib / apt / periodic / update-success-stamp haben und wenn Sie es haben, können Sie verwenden

stat -c %y /var/lib/apt/periodic/update-success-stamp

Befehl, um den Zeitpunkt des letzten Aufrufs von "apt-get update" zu erhalten.

Und wenn Ihr System diese apt-Konfigurationsdatei nicht hat, können Sie sie jederzeit hinzufügen.


21
2017-09-07 09:55



+1 für die Aufnahme der apt.conf-Zeile. Auf Ubuntu 14.04 scheint es, dass die Datei an ist /var/lib/apt/periodic/update-stamp - GnP


Sie können die Zugriffszeiten für die Dateien in / var / lib / apt / lists überprüfen, die aktualisiert werden wenn Sie apt-get update ausführen. Wenn apt-get update mit sudo ausgeführt wurde, sollten Sie a haben Zeile eingeloggt /var/log/auth.log wenn es fertig war ..


11
2018-06-05 19:16



Wie bereits erwähnt, können einige Dateien nicht aktualisiert werden 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


Ein apt-get update möglicherweise erstellt oder aktualisiert es keine Dateien, es aktualisiert das Cache-Verzeichnis, so dass wir damit den Zeitstempel beim letzten abrufen können apt-get update wurde ausgeführt:

stat -c %Y /var/cache/apt/

10
2018-05-06 14:24



Beachten Sie, dass die Paketinstallation auch das Cache-Verzeichnis aktualisieren kann. Dies ist kein zuverlässiger Check für apt-get update - GnP


Geh nicht von den Sperrdateien. Lock-Dateien sind nicht zuverlässig, sie neigen dazu, sich im Laufe der Zeit mit neuen Linux-Versionen zu bewegen, und viele Programme bereinigen (entfernen) Sperrdateien, wenn sie damit fertig sind.

Der folgende Befehl wird Ihnen helfen, 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

Das sind zwei Befehle in einem. Die Ergebnisse des ersten Befehls filtern in das zweite durch das Pipe-Symbol (|).

Im ersten Befehl verwende ich "ls", um den Dateiinhalt des Verzeichnisses / var / log / apt aufzulisten. Dies ist das Verzeichnis, in dem die Zugriffsprotokollprotokolle für apt-get gespeichert sind. Der "-lt" -Teil ist eigentlich zwei Schalter. Der erste "l" -Schalter sagt "ls", um eine Datei pro Zeile mit Details aufzulisten. Der zweite Schalter "t" sagt "ls" an, nach Datum und Uhrzeit zu sortieren. "--time-style" erzwingt die Anzeige der Datumszeit im Format "YYYY-MM-DD HH: MM".

Im "grep" -Befehl des Befehls weist die Option "-o" grep an, nur die Teile jeder Zeile anzuzeigen, die genau mit dem regulären Ausdruck übereinstimmen. Der reguläre Ausdruck, den ich hier verwendet habe, erkennt Datumsangaben in dem Format, das im Befehl "ls" angegeben ist. Sie werden auch am Ende des "grep" -Befehls das wahre kleine Stück Magie entdecken, dass es einen "-m" -Schalter mit der unmittelbar darauf folgenden Zahl "1" gibt. Das sagt "grep", dass es aufhören soll nach Übereinstimmungen zu suchen, nachdem es die erste gefunden hat.

Zusammenfassend listen wir die Details der apt-Protokolldatei auf, so dass wir das Datum der letzten Änderung sehen können. Dann sortieren wir nach Datum und teilen grep mit, das erste Datum von oben zu entfernen, das dann zurückgegeben wird. Das ist das letzte Datum, an dem apt-get lief.

Um den Advokaten des Teufels für einen Moment zu spielen, ist es jedoch üblich, dass Debian-Plattformen wie Ubuntu apt-get als einen Job planen, der regelmäßig ausgeführt wird. Wenn Sie nach der Person am anderen Ende der apt-get-Ausführung suchen, können Sie tatsächlich eine Maschine finden. Sie können Zugriffsprotokolle immer mit den Apt-Protokollen abgleichen, um festzustellen, ob Zeitstempel übereinstimmen. Es ist auch möglich, die Befehlsgeschichte eines Benutzers in einem gewissen Ausmaß zu betrachten.

Hoffe das hilft!


3
2017-07-04 22:50



Funktioniert leider nicht. Im /var/log/apt es wird auch protokolliert, wenn ich zum Beispiel ein mache apt-get install some-package. Eigentlich unter Ubuntu nicht Logge etwas ein, wenn ich es tue apt-get update - Alex


Ich vermute, dass Sie die letzten modifizierten Zeiten für Dateien / var / cache / apt überprüfen können, um herauszufinden, wann die letzten Aktualisierungen auf die Paketlisten angewendet wurden.

Ich habe das gerade getestet und zweimal hintereinander "sudo apt-get update" ausgeführt, und die Daten haben sich gegenüber ihrem aktuellen Wert nicht geändert, aber ich vermute, dass dies darauf zurückzuführen ist, dass keine neuen Updates angewendet wurden und dass die Caches aktiv sind miteinander ausgehen.


2
2018-06-05 19:59





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

1
2018-02-04 01:00





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.


1
2018-06-05 19:19





ich benutze /var/cache/apt um festzustellen, ob ich rennen muss apt-get update. Wenn der Unterschied zwischen der aktuellen Uhrzeit und der Cachezeit von /var/cache/apt ist weniger als 24 Stunden, ich brauche nicht zu laufen apt-get update. Das Standardaktualisierungsintervall kann überschrieben werden, indem eine Zahl an die Funktion übergeben wird runAptGetUpdate()

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


1
2018-02-23 20:38



Die Antwort ist unvollständig. Was ist info und isEmptyString? Ebenfalls, info ist eine schlechte Wahl des Funktionsnamens, da dies auch ein Befehl ist. Ansonsten eine schöne Lösung! - Ronny Andersson
@RonnyAndersson, alle in dieser lib: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/... - Nam Nguyen


/var/log/dpkg.log wird eine Historie von dem, was gemacht wurde, aber nicht unbedingt welche App namens dpkg (synaptic, apt-get, etc).


0
2018-06-05 19:21





wrap apt-get in einem Skript, das zuerst einen Zeitstempel in eine Datei schreibt und dann die übliche Arbeit erledigt. Auf diese Weise können Sie das Zeitstempelformat und den Ort definieren;)


0
2018-06-06 13:17



Sujoy, es in einem Skript zu verpacken ist nicht praktisch, wenn Sie Hunderte von Servern haben, und Sie möchten nicht noch ein Skript beibehalten, das beim nächsten Update Ihres apt-get-Pakets Probleme verursachen könnte. Ich denke, der Anfragende sucht nach einer Antwort, die Informationen nutzt, die bereits in seinem Computer vorhanden sind. - pdwalker


Hier ist ein einfacher Einzeiler, um ein Update auszuführen, wenn es am letzten Tag nicht ausgeführt wurde.

(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)

Es sucht nach der update-success-stamp-Datei, die vor mehr als einem Tag geändert wurde. Wenn es die Datei im richtigen Alter findet, wird das Update ausgeführt. Hinweis: Die update-success-stamp-Datei muss vorhanden sein, damit dies funktioniert.


0
2018-04-15 15:32