Necesito encontrar la última vez que el
apt-get update
El comando se ejecutó en mi servidor. ¿Cómo puedo determinar esta información?
Necesito encontrar la última vez que el
apt-get update
El comando se ejecutó en mi servidor. ¿Cómo puedo determinar esta información?
Respuestas:
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.
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ó.
Es apt-get update
posible que no cree ni actualice archivos, actualiza el directorio de caché para que podamos usarlo para obtener la marca de tiempo cuando apt-get update
se ejecutó el último :
stat -c %Y /var/cache/apt/
apt-get update
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!
/var/log/apt
ella 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
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.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
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.
Yo uso /var/cache/apt
para determinar si necesito correr apt-get update
. Por defecto, si la diferencia entre la hora actual y el tiempo de caché /var/cache/apt
es 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
info
y isEmptyString
? Además, info
es una mala elección del nombre de la función, ya que también es un comando. Aparte de eso, buena solución!
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;)
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.
/var/lib/apt/periodic/update-stamp