Woher wissen Sie, wann `apt-get update` das letzte Mal ausgeführt wurde?

24

Ich weiß, dass der Befehl zum Aktualisieren der Repository-Listen lautet apt-get update.

Wie kann ich überprüfen, ob es heute oder in den letzten 24 Stunden ausgeführt wurde?

Ich weiß nicht, ob ich einen Datei-Zeitstempel überprüfen soll. Oder setzen Sie einen anderen apt-Befehl ab. Oder verwenden Sie das Dienstprogramm dpkg.

Auf Manpages konnte nichts Nützliches gefunden werden.

cavila
quelle

Antworten:

15

Sie können Ihren Befehlsverlauf im Terminal überprüfen:

history | grep 'apt update'

So überprüfen Sie die Uhrzeit:

HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'

(Der [a]Teil des regulären Ausdrucks stimmt nur mit dem Buchstaben überein a, hat jedoch den Effekt, dass er beim Greifen im Verlauf nicht mit sich selbst übereinstimmt.)

Bildbeschreibung hier eingeben

Ich hoffe es hilft !

Nux
quelle
2
Es ist history | grep 'apt-get update':)
Lucio
7
@souravc ist richtig. Dies wird nicht von alleine funktionieren. Wenn das HISTTIMEFORMATnicht gesetzt .bashrcist, hat dieser Befehl nur die korrekten Zeitstempel für die Befehle, die tatsächlich aus der aktuellen Shell-Sitzung ausgeführt wurden . Für alle anderen Befehle, die nicht aus der aktuellen Sitzung stammen, zeigt der Zeitstempel nur den Änderungszeitstempel der ~/.bash_historyDatei an. Die Zeitstempel für Befehle aus anderen Sitzungen können nicht angezeigt werden, da diese Zeitstempel nicht in der ~/.bash_historyDatei gespeichert werden. Es kann Zeitstempel für die aktuelle Sitzung anzeigen, da sich diese Stempel noch im Speicher befinden.
Falkner
7
Das funktioniert nicht immer. ZB wenn ein anderer Benutzer lief aptoder wenn Ihr .bash_historygekürzt wurde.
OrangeTux
4
Dies ist eine schrecklich falsche Antwort. Unbeaufsichtigte Upgrades werden nicht berücksichtigt. Wenn Sie wie ich immer 4 bis 5 Terminals geöffnet haben, wird der Verlauf nur beim Beenden gespeichert (standardmäßig), sodass Sie alle prüfen müssen.
Hackel
3
Wenn Sie das wiederholen, was alle bereits gesagt haben, funktioniert das nicht, wenn apt von einem Skript aktualisiert wurde, wenn Sie nicht den richtigen Verlauf anzeigen, wenn der Verlauf gekürzt wurde oder wenn ein anderer Benutzer das Update durchgeführt hat. Das ist wirklich nicht zuverlässig genug, um den allgemeinen Fall zu lösen.
Zneak
54

Überprüfen Sie den Zeitstempel von /var/lib/apt/periodic/update-success-stamp.

$ ls -l /var/lib/apt/periodic/update-success-stamp
-rw-r--r-- 1 root root 0 Jan 25 01:41 /var/lib/apt/periodic/update-success-stamp

Hier ist die Zeit , Jan 25 01:41als apt-getletzten ausgeführt. Verwenden Sie den folgenden Befehl im Terminal, um nur die Uhrzeit abzurufen:

$ ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}'
Jan 25 01:41

Dies ist der beste Ort, um die letzte Aktualisierungszeit zu überprüfen. Wenn Sie gefunden haben /var/lib/apt/periodic/, leer zu sein, können Sie versuchen,

ls -l /var/log/apt/history.log

Aktualisieren

Es wurde festgestellt, dass aus den oben genannten Gründen Dateien update-success-stampoder history.login einigen Systemen nicht verfügbar bleiben. Es gibt einen neuen Vorschlag von derobert , in die Akte zu schauen /var/cache/apt/pkgcache.bin.

pkgcache.binist der Speicherort des Apt-Speicherpakets. Es wird nach jedem Update erneuert. Es ist also der perfekte Kandidat, um zu wissen, wann das letzte Mal aptaktualisiert wurde.

Man kann den folgenden Befehl verwenden, um die genaue Zeit zu kennen,

ls -l /var/cache/apt/pkgcache.bin | cut -d' ' -f6,7,8

oder

stat /var/cache/apt/pkgcache.bin
souravc
quelle
Mein /var/lib/apt/periodic/Verzeichnis ist leer
virtualxtc
Mein Verzeichnis ist auch leer. Debian 7.3 keuchend.
Cavila
6
Ein besserer Sicherungsort wäre /var/cache/apt/pkgcache.bin. Bitte analysieren Sie auch nicht die Ausgabe von ls; Verwenden Sie statstattdessen. Denken Sie daran, dass die lsAusgabe von der Ländereinstellung, dem Alter der Datei usw. abhängt. (Ich denke, Sie erhalten nur die erste Datei, die Sie vorschlagen, wenn Sie Update-Notifier-Common installiert haben.)
Derobert
2
Es scheint /var/cache/apt/pkgcache.binauch die Paketinstallation zu berühren, so dass es keine zuverlässige Möglichkeit ist, nach dem letzten apt-get updateDurchlauf zu suchen .
GnP
3
... und ich habe gerade herausgefunden, dass ein Debian 8-System, auf dem apt-get cleanes kürzlich lief, keine haben wird /var/cache/apt/pkgcache.bin. Ich werde /var/lib/apt/listsstattdessen versuchen, mtime from zu verwenden, da dies die rohen, nicht zwischengespeicherten Daten zu sein scheinen, die apt-get updatetatsächlich manipuliert werden.
ssokolow
6

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 trimString()
{
    local -r string="${1}"

    sed -e 's/^ *//g' -e 's/ *$//g' <<< "${string}"
}

function isEmptyString()
{
    local -r string="${1}"

    if [[ "$(trimString "${string}")" = '' ]]
    then
        echo 'true'
    else
        echo 'false'
    fi
}

function info()
{
    local -r message="${1}"

    echo -e "\033[1;36m${message}\033[0m" 2>&1
}

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
2

Möglicherweise interessieren Sie sich auch für die Datei:

/var/log/apt/term.log

Öffne es mit less oder cat als root .

Abdelraouf Adjal
quelle
Dies ist ein sinnvoller Ort, um nach Protokollen von Aktionen zu suchen, die apt in der Paketdatenbank ausgeführt hat, aber das Poster möchte davon wissen apt-get update, und das ist offensichtlich nicht protokolliert.
Faheem Mitha
1

Ich benutze diesen Befehl

stat /var/cache/apt/ | grep -i -e access -e modify

um anzuzeigen, wann das letzte Mal darauf zugegriffen wurde, dh. Ausführen von 'apt-get update' auch beim letzten Mal, als es tatsächlich aktualisiert wurde.

Beachten Sie, dass bei abweichenden Zeiten möglicherweise kein Update verfügbar ist. Da meine Updates und Upgrades zu bestimmten Zeiten von crontab ausgeführt werden, kann ich feststellen, ob meine Updates ausgeführt wurden oder nicht.

SCBB
quelle
1

Wenn Sie den letzten Kommentar von @ ssokolow mit der Antwort von hier kombinieren , wird dieser Befehl ausgeführt, apt-get updatewenn er in den letzten 7 Tagen nicht ausgeführt wurde:

[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update

Erläuterung:

  • -mtime -7findet Dateien, deren Änderungszeit in den letzten 7 Tagen liegt. Sie können verwenden-mmin wenn Sie kürzere Zeiten interessieren.
  • -maxdepth 0 Stellt sicher, dass find nicht in den Inhalt des Verzeichnisses eingeht.
  • -H Dereferenzen /var/lib/apt/lists wenn es eine weiche Verbindung ist
  • Wenn aus irgendeinem Grund ein findFehler auftritt, wird der Befehl ausgeführt. Dies scheint mir die sichere Voreinstellung zu sein. Wenn Sie die Standardeinstellung umkehren möchten, verwenden Sie den Befehl -ntest und -mtime +7find.
itsadok
quelle
0

Ich habe gerade eine Antwort auf diese Frage zu folgendem Thema gepostet

Wo kann ich meinen Update-Verlauf nachschlagen?

Die Antwort ist für dieses Thema möglicherweise weniger geeignet, da speziell nach "apt-get upgrade" gesucht wird. Hier ist eine Beispielausgabe.

xenial% 9: ./linuxpatchdate 
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2

Im anderen Thema finden Sie den Quellcode und weitere Erklärungen.

JsinJ
quelle
Es sah für mich so aus, als ob Ihr Code nach einem Upgrade und nicht nach einem Update gesucht hätte. Zum Beispiel habe ich gerade "apt-get update" (das Thema dieser Frage) auf meinem Ubuntu 16.04 ausgeführt, und in / var / log / apt wird kein Jota von Änderungen angezeigt, was bedeutet, dass das Scannen von Objekten in diesem Verzeichnis keinen Nutzen hat um diese spezielle Frage zu beantworten.
Ron Burk
1
Du hast vollkommen recht. Vielen Dank für den Hinweis. Ich habe meine Antwort geändert, um das zu reflektieren. Wir haben nach dem letzten Datum gesucht, an dem Aktualisierungen auf den Computer angewendet wurden, und nicht nach Aktualisierungen, die nur heruntergeladen wurden.
JsinJ
0
LAST_UPDATED=$( stat --format="%X" /var/cache/apt/pkgcache.bin )
UNIX_TIME=$( date +%s )
TIME_DIFF=$(( UNIX_TIME - LAST_UPDATED ))

if [[ "${TIME_DIFF}" -gt 43200 ]]
then
  # It's been 12 hours since apt-get update was ran.
fi
mikeytown2
quelle