Como saber a última vez que o `apt-get update` foi executado?


24

Eu sei que o comando para atualizar as listas de repositórios é apt-get update.

Como verificar se foi executado hoje ou nas últimas 24 horas?

Não sei se deve verificar algum carimbo de data / hora do arquivo. Ou emita outro comando apt. Ou use o utilitário dpkg.

Não foi possível encontrar algo útil nas páginas do manual.

Respostas:


15

Você pode verificar seu histórico de comandos no terminal:

history | grep 'apt update'

Para verificar por hora:

HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'

(A [a]parte da expressão regular corresponde apenas à letra, amas tem o efeito de não corresponder a si mesma ao grepping no histórico.)

insira a descrição da imagem aqui

Espero que ajude !


2
É history | grep 'apt-get update':)
Lucio

7
@souravc está certo. Isso não vai funcionar por si só. Se o HISTTIMEFORMATnão estiver definido .bashrc, esse comando terá apenas registros de data e hora corretos para os comandos que foram realmente executados a partir da sessão atual do shell . Para todos os outros comandos que não são da sessão atual, o registro de data e hora mostra apenas o registro de data e hora da modificação do ~/.bash_historyarquivo. Ele não pode mostrar os registros de data e hora dos comandos de outras sessões, pois esses registros não são salvos no ~/.bash_historyarquivo. Ele pode mostrar os carimbos de data e hora da sessão atual porque esses carimbos ainda estão na memória.
Falconer

7
Isso nem sempre funciona. Por exemplo, quando outro usuário foi executado aptou quando o seu .bash_historyfoi cortado.
precisa saber é o seguinte

4
Esta é uma resposta terrivelmente errada. Isso não leva em conta as atualizações autônomas; além disso, se você é alguém como eu, que sempre tem de 4 a 5 terminais abertos, o histórico só é salvo quando eles saem (por padrão), então você deve verificar todos eles.
Hackel

3
Fazendo eco do que todos já disseram, isso não funcionará se o apt tiver sido atualizado por um script, se você não estiver olhando para o histórico correto, se o histórico foi aparado ou se outro usuário tiver feito a atualização. Isso realmente não é confiável o suficiente para resolver o caso geral.
zneak 25/09

54

Verifique o carimbo de hora de /var/lib/apt/periodic/update-success-stamp.

$ ls -l /var/lib/apt/periodic/update-success-stamp
-rw-r--r-- 1 root root 0 Jan 25 01:41 /var/lib/apt/periodic/update-success-stamp

Aqui o tempo é Jan 25 01:41quando apt-getúltima executada. Para obter apenas o horário, use o seguinte comando no terminal,

$ ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}'
Jan 25 01:41

É o melhor lugar para verificar a hora da última atualização. Se você achou /var/lib/apt/periodic/que estava vazio, pode tentar,

ls -l /var/log/apt/history.log

Atualizar

Verificou-se que, devido a algumas razões acima, os arquivos update-success-stampou history.logpermanecem indisponíveis em alguns sistemas. Há uma nova proposta da derobert para examinar o arquivo /var/cache/apt/pkgcache.bin.

pkgcache.biné o local do cache do pacote mapeado na memória do Apt. É renovado após cada atualização. Portanto, é o candidato perfeito para saber a última vez em que aptfoi atualizado.

Pode-se usar o seguinte comando para saber a hora exata,

ls -l /var/cache/apt/pkgcache.bin | cut -d' ' -f6,7,8

ou

stat /var/cache/apt/pkgcache.bin

meu /var/lib/apt/periodic/diretório está vazio
virtualxtc

Meu diretório também está vazio. Debian 7.3 wheezy.
Cavila

6
Um local de backup melhor seria /var/cache/apt/pkgcache.bin. Além disso, não analise a saída de ls; use em statvez disso. Tenha em mente que lsa saída depende da localidade, depende da idade do arquivo, etc. (Além disso, eu acho que você só tem o primeiro arquivo que você sugere, se você tem update-notifier-comum instalado)
derobert

2
Parece que /var/cache/apt/pkgcache.bintambém foi abordado na instalação de pacotes, portanto, não é uma maneira confiável de verificar a última apt-get updateexecução.
GnP

3
... e eu acabei de descobrir que um sistema Debian 8 onde apt-get cleanfoi executado recentemente não terá /var/cache/apt/pkgcache.bin. Em /var/lib/apt/listsvez disso, tentarei usar o mtime , pois esses parecem os dados brutos e não armazenados em cache que apt-get updaterealmente manipulam.
ssokolow

6

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 trimString()
{
    local -r string="${1}"

    sed -e 's/^ *//g' -e 's/ *$//g' <<< "${string}"
}

function isEmptyString()
{
    local -r string="${1}"

    if [[ "$(trimString "${string}")" = '' ]]
    then
        echo 'true'
    else
        echo 'false'
    fi
}

function info()
{
    local -r message="${1}"

    echo -e "\033[1;36m${message}\033[0m" 2>&1
}

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


2

Você também pode se interessar pelo arquivo:

/var/log/apt/term.log

Abra com menos ou gato como raiz .


Este é um local sensato para verificar os logs de ações que o apt executou no banco de dados do pacote, mas o que o pôster quer saber apt-get updatee que obviamente não está registrado.
Faheem Mitha

1

Eu uso esse comando

stat /var/cache/apt/ | grep -i -e access -e modify

para mostrar a última vez que foi acessado, ie. executando o 'apt-get update' também da última vez que foi atualizado.

observe se os horários são diferentes, pode não haver uma atualização disponível. Como tenho minhas atualizações e upgrades em execução pelo crontab em horários específicos, posso saber se minhas atualizações foram executadas ou não.


1

Combinando o último comentário de @ ssokolow com a resposta de daqui , este comando será executado apt-get updatese não for executado nos últimos 7 dias:

[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update

Explicação:

  • -mtime -7localiza arquivos que possuem um horário de alteração nos últimos 7 dias. Você pode usar -mminse se preocupa com tempos mais curtos.
  • -maxdepth 0 garante que a localização não entre no conteúdo do diretório.
  • -H desreferências /var/lib/apt/lists se for um link suave
  • Se, por algum motivo find, falhar, o comando será executado. Isso me parece o padrão de segurança. Se você quiser inverter o padrão, use -nno teste e -mtime +7no comando find.

0

Acabei de publicar uma resposta a esta pergunta sobre o seguinte tópico

Onde posso procurar meu histórico de atualizações?

A resposta pode ser menos apropriada para este tópico, pois procura especificamente "apt-get upgrade". Aqui está o exemplo de saída.

xenial% 9: ./linuxpatchdate 
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2

Consulte o outro tópico para obter o código fonte e mais explicações.


Pareceu-me que seu código procurava atualização, não atualização. Por exemplo, eu apenas executei "apt-get update" (o assunto desta pergunta) no meu Ubuntu 16.04 e nenhuma pitada de alteração aparece em / var / log / apt, o que implica que a digitalização de qualquer coisa nesse diretório será inútil em resposta a esta pergunta em particular.
Ron Burk

1
Você está totalmente certo. Obrigado por apontar isso. Eu mudei minha resposta para refletir isso. Estávamos procurando pela última data em que as atualizações foram aplicadas à máquina, em vez de apenas as atualizações serem baixadas.
perfil completo de Jsin

0
LAST_UPDATED=$( stat --format="%X" /var/cache/apt/pkgcache.bin )
UNIX_TIME=$( date +%s )
TIME_DIFF=$(( UNIX_TIME - LAST_UPDATED ))

if [[ "${TIME_DIFF}" -gt 43200 ]]
then
  # It's been 12 hours since apt-get update was ran.
fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.