Encontre a última vez que a atualização foi realizada com o apt-get

30

Preciso encontrar a última vez que o

apt-get update

O comando foi executado no meu servidor. Como posso determinar essas informações?

Mark Roddy
fonte

Respostas:

23

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.

Tuomas
fonte
+1 para incluir a linha apt.conf. No ubuntu 14.04, parece que o arquivo está em/var/lib/apt/periodic/update-stamp
GnP 2/16/16
11

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.

rkthkr
fonte
2
Como indicado em outro lugar, você pode encontrar alguns arquivos que não são atualizados e, portanto, não foram baixados novamente. Isso é bom se você quiser saber como suas listas de pacotes estão atualizadas, mas não se você quiser saber quando a atualização do apt-get foi executada pela última vez. O primeiro é mais provável.
David Pashley
10

Um apt-get updatepode 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 updatefoi executado:

stat -c %Y /var/cache/apt/
Hans Lambermont
fonte
Observe que a instalação do pacote também pode atualizar o diretório de cache. Esta não é uma verificação confiável paraapt-get update
GnP 2/16/16
3

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!

Aaron Belovsky
fonte
11
Infelizmente não está funcionando. Em /var/log/apttambé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
Alex
2

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.

slacy
fonte
1
$ ls -l /var/lib/dpkg/lock 
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
user104833
fonte
1

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.

Josh Brower
fonte
1

Eu uso /var/cache/aptpara 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/aptfor 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

Nam Nguyen
fonte
A resposta está incompleta. O que é infoe isEmptyString? Além disso, infoé uma má escolha do nome da função, pois também é um comando. Fora isso, boa solução!
Ronny Andersson
@ RonnyAndersson, tudo nesta lib: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen
0

/var/log/dpkg.log manterá um histórico do que foi feito, mas não necessariamente qual aplicativo chamado dpkg (synaptic, apt-get, etc.).

Jonathan
fonte
0

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;)

Sujoy
fonte
Aproveite, Encapsulá-lo em um script não é prático se você possui centenas de servidores e não deseja manter outro script que possa causar problemas na próxima vez que você atualizar seu pacote apt-get. Acho que o solicitante está procurando uma resposta que faça uso das informações já existentes em seu computador.
Pdwalker
0

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.

Christian Long
fonte