Encuentra la última actualización realizada con apt-get

30

Necesito encontrar la última vez que el

apt-get update

El comando se ejecutó en mi servidor. ¿Cómo puedo determinar esta información?

Mark Roddy
fuente

Respuestas:

23

Al menos en los sistemas Ubuntu hay un archivo /etc/apt/apt.conf.d/15update-stamp que contiene:

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

Entonces, vea si tiene / var / lib / apt / periodic / update-success-stamp y si lo tiene, puede usar

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

comando para obtener la hora de la última invocación de "apt-get update".

Y si su sistema no tiene ese archivo de configuración apto, siempre puede agregarlo.

Tuomas
fuente
+1 para incluir la línea apt.conf. En ubuntu 14.04 parece que el archivo está en/var/lib/apt/periodic/update-stamp
GnP
11

Puede verificar los tiempos de acceso en los archivos en / var / lib / apt / lists que se actualiza cuando ejecuta apt-get update. Si se ejecutó apt-get update con sudo, debería tener una línea registrada en /var/log/auth.log cuando se realizó.

rkthkr
fuente
2
Como se señaló en otro lugar, es posible que algunos archivos no estén actualizados y, por lo tanto, no se hayan descargado nuevamente. Esto está bien si desea saber qué tan actualizadas están sus listas de paquetes, pero no si desea saber cuándo se ejecutó apt-get update por última vez. Lo primero es más probable.
David Pashley
10

Es apt-get updateposible que no cree ni actualice archivos, actualiza el directorio de caché para que podamos usarlo para obtener la marca de tiempo cuando apt-get updatese ejecutó el último :

stat -c %Y /var/cache/apt/
Hans Lambermont
fuente
Tenga en cuenta que la instalación del paquete también puede actualizar el directorio de caché. Esta no es una verificación confiable paraapt-get update
GnP
3

No te vayas de los archivos de bloqueo. Los archivos de bloqueo no son confiables, tienden a moverse con el tiempo con las nuevas versiones de Linux, y muchos programas limpian (eliminan) archivos de bloqueo cuando terminan con ellos.

El siguiente comando te dará lo que estás buscando.

ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

Estos son dos comandos en uno. Los resultados del primer comando se filtran al segundo a través del símbolo de canalización (|)

En el primer comando, estoy usando "ls" para enumerar el contenido del archivo del directorio / var / log / apt, que es el directorio que almacena los registros del historial de acceso para apt-get. La parte "-lt" es en realidad dos interruptores. El primer interruptor "l" le dice a "ls" que enumere un archivo por línea con detalle. El segundo interruptor "t" le dice a "ls" que ordene por fecha y hora. "--time-style" fuerza que la fecha y hora se muestre en el formato "AAAA-MM-DD HH: MM".

En la porción "grep" del comando, el interruptor "-o" le dice a grep que solo muestre las porciones de cada línea que coincidan exactamente con la expresión regular. La expresión regular que he usado aquí detecta la fecha y la hora en el formato especificado en el comando "ls". También notará la verdadera pequeña pieza de magia al final del comando "grep" de que hay un interruptor "-m" con el número "1" inmediatamente siguiente. Esto le dice a "grep" que deje de buscar coincidencias después de encontrar la primera.

Entonces, en resumen, enumeramos los detalles del archivo de registro de apt para que podamos ver la última fecha de modificación, luego ordenamos por fecha y le decimos a grep que retire la primera fecha de la parte superior, que luego devuelve. Esa es la última fecha en que se ejecutó apt-get.

Sin embargo, para jugar al abogado del diablo por un momento, es común que las plataformas Debian como Ubuntu programen apt-get como un trabajo que se ejecuta regularmente. Si está buscando a la persona en el otro extremo de la ejecución de apt-get, en realidad puede encontrar una máquina. Siempre puede hacer coincidir los registros de acceso con los registros de apt para ver si las marcas de tiempo coinciden. También es posible mirar el historial de comandos de un usuario hasta cierto punto.

¡Espero que esto ayude!

Aaron Belovsky
fuente
1
Lamentablemente no funciona. En /var/log/aptella también se registra cuando, por ejemplo, hacer una apt-get install some-package. En realidad, en Ubuntu no registra algo cuando lo hagoapt-get update
Alex
2

Sospecho que puede verificar los últimos tiempos modificados en los archivos / var / cache / apt para averiguar cuándo se aplicaron las últimas actualizaciones a las listas de paquetes.

Acabo de probar esto y ejecuté "sudo apt-get update" dos veces seguidas, y las fechas no cambiaron de su valor actual, pero sospecho que esto se debe a que no hubo nuevas actualizaciones para aplicar, y que las memorias caché están activas hasta la fecha.

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

Synaptic registra un archivo de historial (> Archivo> Historial), aptitude registra tanto el historial en / var / log / aptitude como los paquetes autoinstalados en / var / lib / aptitude / pkgstates, por lo que puede consultarlos para conocer la actividad más reciente.

Josh Brower
fuente
1

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 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
La respuesta es incompleta. ¿Qué es infoy isEmptyString? Además, infoes una mala elección del nombre de la función, ya que también es un comando. Aparte de eso, buena solución!
Ronny Andersson
@RonnyAndersson, todo en esta biblioteca
Nam Nguyen
0

/var/log/dpkg.log mantendrá un historial de lo que se hizo, pero no necesariamente qué aplicación se llama dpkg (synaptic, apt-get, etc.).

Jonathan
fuente
0

wrap apt-get en un script que primero escribe una marca de tiempo en un archivo y luego hace el trabajo habitual. de esa manera, puede definir el formato y la ubicación de la marca de tiempo;)

Sujoy
fuente
Sujoy, envolverlo en un script no es práctico si tiene cientos de servidores, y no desea mantener otro script que pueda causar problemas la próxima vez que actualice su paquete apt-get. Creo que el solicitante está buscando una respuesta que haga uso de la información que ya existe en su computadora.
pdwalker
0

Aquí hay una línea simple para ejecutar una actualización si no se ha ejecutado en el último día.

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

Busca el archivo update-success-stamp, que se modificó hace más de un día. Si encuentra el archivo de la edad correcta, entonces ejecuta la actualización. Nota: el archivo update-success-stamp tiene que existir para que esto funcione.

Cristiano largo
fuente