Preciso encontrar a última vez que o
apt-get update
O comando foi executado no meu servidor. Como posso determinar essas informações?
Preciso encontrar a última vez que o
apt-get update
O comando foi executado no meu servidor. Como posso determinar essas informações?
Respostas:
Pelo menos nos sistemas Ubuntu, há um arquivo /etc/apt/apt.conf.d/15update-stamp contendo:
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
Portanto, veja se você possui / var / lib / apt / periodic / update-success-stamp e se possui, você pode usar
stat -c %y /var/lib/apt/periodic/update-success-stamp
comando para obter a hora da última chamada "apt-get update".
E se o seu sistema não tiver esse arquivo de configuração apt, você sempre poderá adicioná-lo.
Você pode verificar os tempos de acesso nos arquivos em / var / lib / apt / lists, que são atualizados quando você executa o apt-get update. Se a atualização do apt-get foi executada com o sudo, você deve ter uma linha registrada em /var/log/auth.log quando terminar.
Um apt-get update
pode não criar ou atualizar arquivos, ele atualiza o diretório de cache para que possamos usá-lo para obter o carimbo de data / hora quando o último apt-get update
foi executado:
stat -c %Y /var/cache/apt/
apt-get update
Não vá dos arquivos de bloqueio. Os arquivos de bloqueio não são confiáveis, tendem a se movimentar ao longo do tempo com as novas versões do Linux e muitos programas limpam (removem) os arquivos de bloqueio quando terminam.
O comando a seguir irá fornecer o que você está procurando.
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
Este é dois comandos em um. Os resultados do primeiro comando são filtrados para o segundo através do símbolo de barra vertical (|).
No primeiro comando, estou usando "ls" para listar o conteúdo do diretório / var / log / apt, que é o diretório que armazena os logs do histórico de acesso para o apt-get. A parte "-lt" é na verdade duas opções. A primeira opção "l" diz a "ls" para listar um arquivo por linha com detalhes. A segunda opção "t" indica "ls" para classificar por data e hora. "--time-style" força a data e hora a serem exibidas no formato "AAAA-MM-DD HH: MM".
Na parte "grep" do comando, a opção "-o" diz ao grep para mostrar apenas as partes de cada linha que correspondem exatamente à expressão regular. A expressão regular que usei aqui detecta horários de data que estão no formato especificado no comando "ls". Você também notará a verdadeira pequena peça mágica no final do comando "grep", indicando que há uma opção "-m" com o número "1" imediatamente a seguir. Isso diz ao "grep" para parar de procurar correspondências depois de encontrar a primeira.
Então, em resumo, estamos listando os detalhes do arquivo de log do apt para que possamos ver a data da última modificação, depois classificamos por data e pedimos ao grep para retirar a primeira data do topo, que então retorna. Essa é a última data em que o apt-get foi executado.
Para bancar o advogado do diabo por um momento, no entanto, é comum que plataformas Debian como o Ubuntu planejem o apt-get como um trabalho que é executado regularmente. Se você estiver procurando pela pessoa do outro lado da execução do apt-get, poderá encontrar uma máquina. Você sempre pode associar os logs de acesso aos logs do apt para ver se os carimbos de hora coincidem. Também é possível examinar o histórico de comandos de um usuário até certo ponto.
Espero que isto ajude!
/var/log/apt
também é registrado quando eu, por exemplo, fazer um apt-get install some-package
. Na verdade no Ubuntu ele não log algo quando eu façoapt-get update
Eu suspeito que você pode verificar os últimos horários modificados em files / var / cache / apt para descobrir quando as últimas atualizações foram aplicadas às listas de pacotes.
Acabei de testar isso e executei o "sudo apt-get update" duas vezes seguidas, e as datas não mudaram em relação ao valor atual, mas suspeito que seja porque não houve novas atualizações a serem aplicadas e que os caches estão em funcionamento Até a presente data.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
O Synaptic registra um arquivo de histórico (> Arquivo> Histórico), o aptitude registra o histórico em / var / log / aptitude e os pacotes instalados automaticamente em / var / lib / aptitude / pkgstates, para que você possa verificá-los para as atividades mais recentes.
Eu uso /var/cache/apt
para determinar se preciso executar apt-get update
. Por padrão, se a diferença entre o tempo atual e o tempo do cache /var/cache/apt
for menor que 24 horas, não preciso executar apt-get update
. O intervalo de atualização padrão pode ser substituído, passando um 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
}
Saída de amostra:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
Extraí essas funções do meu github pessoal: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
info
e isEmptyString
? Além disso, info
é uma má escolha do nome da função, pois também é um comando. Fora isso, boa solução!
envolva o apt-get em um script que primeiro grava um carimbo de data / hora em um arquivo e depois faz o trabalho usual. Dessa forma, você pode definir o formato do carimbo de data e hora;)
Aqui está uma única linha para executar uma atualização se ela não tiver sido executada no último dia.
(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)
Ele procura o arquivo update-success-stamp, modificado mais de um dia atrás. Se encontrar o arquivo da idade certa, executará a atualização. Nota: o arquivo update-success-stamp deve existir para que isso funcione.
/var/lib/apt/periodic/update-stamp