¿Cómo saber la última vez que se ejecutó `apt-get update`?

24

Sé que el comando para actualizar las listas de repositorios es apt-get update.

¿Cómo verificar si se ha ejecutado hoy o en las últimas 24 horas?

No sé si debería verificar alguna marca de tiempo del archivo. O emita otro comando apt. O use la utilidad dpkg.

No se pudo encontrar algo útil en las páginas de manual.

cavila
fuente

Respuestas:

15

Puede verificar su historial de comandos en la terminal:

history | grep 'apt update'

Para verificarlo por tiempo:

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

(La [a]parte de la expresión regular solo coincide con la letra, apero tiene el efecto de no coincidir cuando se trabaja en el historial).

ingrese la descripción de la imagen aquí

Espero eso ayude !

nux
fuente
2
Es history | grep 'apt-get update':)
Lucio
77
@souravc tiene razón. Esto no funcionará por sí solo. Si HISTTIMEFORMATno está configurado, .bashrcentonces este comando solo tendrá las marcas de tiempo correctas para los comandos que realmente se ejecutaron desde la sesión de shell actual . Para todos los demás comandos que no son de la sesión actual, la marca de tiempo solo mostrará la marca de tiempo de modificación del ~/.bash_historyarchivo. No puede mostrar las marcas de tiempo para los comandos de otras sesiones, ya que esas marcas de tiempo no se guardan en el ~/.bash_historyarchivo. Puede mostrar marcas de tiempo para la sesión actual porque esas marcas aún están en la memoria.
cetrero
77
Esto no siempre funciona. Por ejemplo, cuando algún otro usuario corrió apto cuando .bash_historyse ha recortado su.
OrangeTux
44
Esta es una respuesta terriblemente incorrecta. No tiene en cuenta las actualizaciones desatendidas, además, si eres alguien como yo que siempre tiene 4-5 terminales abiertas, el historial solo se guarda cuando salen (por defecto), por lo que tendrías que verificarlas todas.
Hackel
3
Haciéndose eco de lo que todos ya han dicho, eso no funcionará si apt ha sido actualizado por un script, si no está mirando el historial correcto, si el historial se ha recortado o si otro usuario ha realizado la actualización. Eso realmente no es lo suficientemente confiable como para resolver el caso general.
zneak
54

Verifique la marca de tiempo de /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

Aquí es el Jan 25 01:41momento de la apt-getúltima ejecución. Para obtener solo el tiempo, use el siguiente comando en la terminal,

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

Es el mejor lugar para consultar la última hora de actualización. Si descubres /var/lib/apt/periodic/que estás vacío, puedes intentarlo,

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

Actualizar

Se encuentra que debido a algunas razones los archivos anteriores update-success-stampo history.logno están disponibles en algunos sistemas. Hay una nueva propuesta de derobert para examinar el archivo /var/cache/apt/pkgcache.bin.

pkgcache.bines la ubicación del caché del paquete mapeado en memoria de Apt. Se renueva después de cada actualización. Por lo tanto, es el candidato perfecto para saber la última vez que aptse actualizó.

Se puede usar el siguiente comando para saber la hora exacta,

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

o

stat /var/cache/apt/pkgcache.bin
souravc
fuente
mi /var/lib/apt/periodic/directorio está vacío
virtualxtc
Mi directorio también está vacío. Debian 7.3 wheezy.
cavila
66
Sería una mejor ubicación de respaldo /var/cache/apt/pkgcache.bin. Además, no analice la salida de ls; utilizar staten su lugar. Tenga en cuenta que la lssalida depende de la configuración regional, depende de la antigüedad del archivo, etc. (Además, creo que solo obtiene el primer archivo que sugiere si tiene instalado update-notifier-common)
derobert
2
Parece /var/cache/apt/pkgcache.binque también se toca en la instalación del paquete, por lo que no es una forma confiable de verificar la última apt-get updateejecución.
GnP
3
... y acabo de descubrir que un sistema Debian 8 donde apt-get cleanse ha ejecutado recientemente no tendrá /var/cache/apt/pkgcache.bin. Voy a tratar de usar el mtime de en su /var/lib/apt/listslugar, ya que parece ser la información en bruto, no almacenada en caché que en apt-get updaterealidad manipula.
ssokolow
6

Yo uso /var/cache/aptpara determinar si necesito correr apt-get update. Por defecto, si la diferencia entre la hora actual y el tiempo de caché /var/cache/aptes inferior a 24 horas, no necesito ejecutar apt-get update. El intervalo de actualización predeterminado se puede anular pasando un número para funcionarrunAptGetUpdate()

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
}

Salida de muestra:

<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate 

Skip apt-get update because its last run was '0h 37m 43s' ago

Extraje estas funciones de mi github personal: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash

Nam Nguyen
fuente
2

También te puede interesar el archivo:

/var/log/apt/term.log

Ábralo con menos o gato como raíz .

Abdelraouf Adjal
fuente
Este es un lugar sensato para verificar los registros de acciones que apt ha realizado en la base de datos del paquete, pero afaik el afiche quiere saber apt-get update, y eso obviamente no está registrado.
Faheem Mitha
1

Yo uso este comando

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

para mostrar la última vez que se accedió, es decir. ejecutando 'apt-get update' también la última vez que se actualizó.

tenga en cuenta que si los horarios son diferentes, es posible que no haya una actualización disponible. Como tengo mis actualizaciones y mejoras ejecutadas por crontab en momentos específicos, puedo decir si mis actualizaciones se ejecutaron o no.

SCBB
fuente
1

Combinando el último comentario de @ssokolow con la respuesta de aquí , este comando se ejecutará apt-get updatesi no se ha ejecutado en los últimos 7 días:

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

Explicación:

  • -mtime -7encuentra archivos que tienen un tiempo de cambio en los últimos 7 días. Puede usarlo -mminsi le preocupan los tiempos más cortos.
  • -maxdepth 0 asegura que find no entrará en el contenido del directorio.
  • -Hdesreferencias /var/lib/apt/listssi es un enlace suave
  • Si por alguna razón findfalla, el comando se ejecutará. Esto me parece el valor predeterminado seguro. Si desea cambiar el valor predeterminado, utilícelo -nen la prueba y -mtime +7en el comando de búsqueda.
itsadok
fuente
0

Acabo de publicar una respuesta a esta pregunta en el siguiente tema

¿Dónde puedo buscar mi historial de actualizaciones?

La respuesta puede ser menos apropiada para este tema, ya que busca específicamente "apt-get upgrade". Aquí está la salida de muestra.

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

Vea el otro tema para el código fuente y más explicaciones.

JsinJ
fuente
Me pareció que su código buscaba una actualización, no una actualización. Por ejemplo, acabo de ejecutar "apt-get update" (el tema de esta pregunta) en mi Ubuntu 16.04 y no aparece ni una pizca de cambio en / var / log / apt, lo que implica que escanear cualquier cosa en ese directorio será inútil en respuesta a esta pregunta en particular.
Ron Burk
1
Tienes toda la razón. Gracias por señalar eso. He cambiado mi respuesta para reflejar eso. Estábamos buscando la última fecha en que se aplicaron las actualizaciones a la máquina, en lugar de las actualizaciones que se acababan de descargar.
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
fuente