Devo trovare l'ultima volta che il
apt-get update
il comando è stato eseguito sul mio server. Come posso determinare queste informazioni?
Devo trovare l'ultima volta che il
apt-get update
il comando è stato eseguito sul mio server. Come posso determinare queste informazioni?
Risposte:
Almeno nei sistemi Ubuntu c'è un file /etc/apt/apt.conf.d/15update-stamp contenente:
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
Quindi vedi se hai / var / lib / apt / periodic / update-success-stamp e se ce l'hai, puoi usare
stat -c %y /var/lib/apt/periodic/update-success-stamp
comando per ottenere l'ora dell'ultima chiamata "apt-get update".
E se il tuo sistema non ha quel file di configurazione apt, puoi sempre aggiungerlo.
È possibile controllare i tempi di accesso sui file in / var / lib / apt / lists che viene aggiornato quando si esegue apt-get update. Se apt-get update è stato eseguito con sudo dovresti avere una riga loggata in /var/log/auth.log al termine.
Un apt-get update
non possono creare o aggiornare i file, lo fa aggiornare la directory della cache in modo che possiamo utilizzare per ottenere che il timestamp quando l'ultimo apt-get update
è stato eseguito:
stat -c %Y /var/cache/apt/
apt-get update
Non passare dai file di blocco. I file di blocco non sono affidabili, tendono a spostarsi nel tempo con le nuove versioni di Linux e molti programmi puliscono (rimuovono) i file di blocco quando hanno finito con loro.
Il seguente comando ti darà quello che stai cercando.
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
Sono due comandi in uno. I risultati del primo comando filtrano nel secondo tramite il simbolo pipe (|).
Nel primo comando, sto usando "ls" per elencare il contenuto del file della directory / var / log / apt, che è la directory che memorizza i registri della cronologia degli accessi per apt-get. La parte "-lt" è in realtà due interruttori. Il primo interruttore "l" dice a "ls" di elencare un file per riga con i dettagli. Il secondo interruttore "t" dice a "ls" di ordinare per data e ora. "--time-style" impone che l'ora della data venga visualizzata nel formato "AAAA-MM-GG HH: MM".
Nella parte "grep" del comando, l'opzione "-o" indica a grep di mostrare solo le porzioni di ciascuna riga che corrispondono esattamente all'espressione regolare. L'espressione regolare che ho usato qui rileva gli orari di data nel formato specificato nel comando "ls". Noterai anche il vero piccolo pezzo di magia proprio alla fine del comando "grep" che c'è un interruttore "-m" con il numero "1" immediatamente successivo. Questo dice a "grep" di smettere di cercare le partite dopo aver trovato la prima.
Quindi, in sintesi, stiamo elencando i dettagli del file di registro apt in modo da poter vedere l'ultima data modificata, quindi ordiniamo per data e diciamo a grep di estrarre la prima data dalla cima, che poi restituisce. Questa è l'ultima data in cui apt-get ha funzionato.
Per interpretare l'avvocato del diavolo per un momento, tuttavia, è comune per piattaforme Debian come Ubuntu programmare apt-get come un lavoro che viene eseguito regolarmente. Se stai cercando la persona all'altro capo dell'esecuzione di apt-get, potresti effettivamente trovare una macchina. È sempre possibile abbinare i registri di accesso ai registri apt per vedere se i timestamp coincidono. È anche possibile esaminare la cronologia dei comandi di un utente in una certa misura.
Spero che sia di aiuto!
/var/log/apt
esso viene anche registrato quando ad esempio faccio un apt-get install some-package
. In realtà su Ubuntu non registra qualcosa quando lo faccioapt-get update
Ho il sospetto che tu possa controllare gli ultimi tempi modificati su files / var / cache / apt per capire quando gli ultimi aggiornamenti sono stati applicati agli elenchi dei pacchetti.
Ho appena provato questo, ed eseguito "sudo apt-get update" due volte di seguito, e le date non sono cambiate rispetto al loro valore attuale, ma sospetto che ciò sia dovuto al fatto che non c'erano nuovi aggiornamenti da applicare e che le cache sono attive ad oggi.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
Synaptic registra un file di cronologia (> File> Cronologia), aptitude registra sia la cronologia in / var / log / aptitude sia i pacchetti installati automaticamente in / var / lib / aptitude / pkgstates, in modo da poterli controllare per le ultime attività.
Uso /var/cache/apt
per determinare se devo eseguire apt-get update
. Per impostazione predefinita, se la differenza tra l'ora corrente e l'ora della cache /var/cache/apt
è inferiore a 24 ore, non è necessario eseguire apt-get update
. L'intervallo di aggiornamento predefinito può essere ignorato passando un numero alla funzionerunAptGetUpdate()
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
}
Uscita campione:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
Ho estratto queste funzioni dal mio github personale: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
info
e isEmptyString
? Inoltre, info
è una scelta sbagliata del nome della funzione poiché è anche un comando. A parte questo, bella soluzione!
avvolgere apt-get in uno script che prima scrive un timestamp su un file, quindi fa il solito lavoro. in questo modo, puoi definire il formato e la posizione del timestamp;)
Ecco un semplice one-liner per eseguire un aggiornamento se non è stato eseguito nell'ultimo giorno.
(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)
Cerca il file update-success-stamp, che è stato modificato più di un giorno fa. Se trova il file della giusta età, quindi esegue l'aggiornamento. Nota: il file update-success-stamp deve esistere affinché funzioni.
/var/lib/apt/periodic/update-stamp