Comment savoir la dernière fois que la mise à jour apt-get a été exécutée?


24

Je sais que la commande pour mettre à jour les listes de référentiels est apt-get update.

Comment vérifier si elle a été exécutée aujourd'hui ou au cours des dernières 24 heures?

Je ne sais pas s'il faut vérifier un horodatage de fichier. Ou lancez une autre commande apt. Ou utilisez l'utilitaire dpkg.

Impossible de trouver quelque chose d'utile dans les pages de manuel.

Réponses:


15

Vous pouvez vérifier l'historique de vos commandes dans le terminal:

history | grep 'apt update'

Pour le vérifier par le temps:

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

(La [a]partie de l'expression régulière ne correspond qu'à la lettre amais a pour effet de ne pas correspondre à elle-même lors de la lecture de l'historique.)

entrez la description de l'image ici

J'espère que ça aide !


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

7
@souravc a raison. Cela ne fonctionnera pas seul. Si le HISTTIMEFORMATn'est pas défini, .bashrccette commande n'aura que des horodatages corrects pour les commandes réellement exécutées à partir de la session shell actuelle . Pour toutes les autres commandes qui ne proviennent pas de la session en cours, l'horodatage n'affichera que l'horodatage de modification du ~/.bash_historyfichier. Il ne peut pas afficher les horodatages des commandes d'autres sessions car ces horodatages ne sont pas enregistrés dans le ~/.bash_historyfichier. Il peut afficher des horodatages pour la session en cours car ces tampons sont toujours en mémoire.
fauconnier

7
Cela ne fonctionne pas toujours. Par exemple, quand un autre utilisateur a couru aptou quand votre .bash_historya été coupé.
OrangeTux

4
C'est une réponse terriblement fausse. Il ne tient pas compte des mises à niveau sans assistance, et si vous êtes quelqu'un comme moi qui a toujours 4 à 5 terminaux ouverts, l'historique n'est sauvegardé qu'à leur sortie (par défaut), vous devrez donc tous les vérifier.
hackel

3
En écho à ce que tout le monde a déjà dit, cela ne fonctionnera pas si apt a été mis à jour par un script, si vous ne regardez pas le bon historique, si l'historique a été coupé, ou si un autre utilisateur a fait la mise à jour. Ce n'est vraiment pas assez fiable pour résoudre le cas général.
zneak

54

Vérifiez l'horodatage 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

Ici , le temps est Jan 25 01:41en apt-getdernière exécution. Pour obtenir l'heure uniquement, utilisez la commande suivante dans le terminal,

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

C'est le meilleur endroit pour vérifier l'heure de la dernière mise à jour. Si vous avez trouvé /var/lib/apt/periodic/vide, vous pouvez essayer,

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

Mise à jour

Il est constaté que pour certaines raisons, les fichiers ci-dessus update-success-stampou history.logrestent indisponibles dans certains systèmes. Il y a une nouvelle proposition de derobert pour examiner le fichier /var/cache/apt/pkgcache.bin.

pkgcache.binest l'emplacement du cache de package mappé en mémoire d'Apt. Il est renouvelé après chaque mise à jour. C'est donc le candidat parfait pour savoir la dernière fois où a aptété mis à jour.

On peut utiliser la commande suivante pour connaître l'heure exacte,

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

ou

stat /var/cache/apt/pkgcache.bin

mon /var/lib/apt/periodic/répertoire est vide
virtualxtc

Mon répertoire est également vide. Debian 7.3 Wheezy.
cavila

6
Un meilleur emplacement de sauvegarde serait /var/cache/apt/pkgcache.bin. Aussi, veuillez ne pas analyser la sortie de ls; utiliser à la statplace. Gardez à l'esprit que la lssortie dépend des paramètres régionaux, de l'âge du fichier, etc. (De plus, je pense que vous n'obtiendrez le premier fichier que si vous avez installé update-notifier-common)
derobert

2
Il semble que cela /var/cache/apt/pkgcache.binconcerne également l'installation du package, ce n'est donc pas un moyen fiable de vérifier la dernière apt-get updateexécution.
GnP

3
... et je viens de découvrir qu'un système Debian 8 sur lequel apt-get cleana été exécuté récemment n'en aura pas /var/cache/apt/pkgcache.bin. Je vais essayer d'utiliser le mtime from à la /var/lib/apt/listsplace, car cela semble être les données brutes non mises en cache qui apt-get updatemanipulent réellement.
ssokolow

6

J'utilise /var/cache/aptpour déterminer si j'ai besoin de courir apt-get update. Par défaut, si la différence entre l'heure actuelle et l'heure du cache /var/cache/aptest inférieure à 24 heures, je n'ai pas besoin de courir apt-get update. L'intervalle de mise à jour par défaut peut être remplacé en passant un nombre à la fonctionrunAptGetUpdate()

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
}

Exemple de sortie:

<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate 

Skip apt-get update because its last run was '0h 37m 43s' ago

J'ai extrait ces fonctions de mon github personnel: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash


2

Vous pouvez également être intéressé par le fichier:

/var/log/apt/term.log

Ouvrez-le avec moins ou chat comme racine .


C'est un endroit judicieux pour vérifier les journaux des actions qu'apt a effectuées sur la base de données du package, mais afaik que l'affiche veut connaître apt-get update, et qui n'est évidemment pas enregistré.
Faheem Mitha

1

J'utilise cette commande

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

pour montrer la dernière fois qu'il a été accédé c.-à-d. exécutant «apt-get update» également la dernière fois qu'il a été réellement mis à jour.

notez que si les horaires sont différents, il se peut qu'aucune mise à jour n'ait été disponible. Étant donné que mes mises à jour et mises à niveau sont exécutées par crontab à des moments précis, je peux dire si mes mises à jour ont fonctionné ou non.


1

Combinant le dernier commentaire de @ ssokolow avec la réponse d' ici , cette commande s'exécutera apt-get updatesi elle ne s'est pas exécutée au cours des 7 derniers jours:

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

Explication:

  • -mtime -7recherche les fichiers dont l'heure de modification a été modifiée au cours des 7 derniers jours. Vous pouvez utiliser -mminsi vous vous souciez de temps plus courts.
  • -maxdepth 0 assure que find ne rentrera pas dans le contenu du répertoire.
  • -Hdéréférences /var/lib/apt/listss'il s'agit d'un lien logiciel
  • Si pour une raison quelconque find, la commande échoue, la commande s'exécute. Cela me semble être la valeur par défaut sûre. Si vous souhaitez inverser la valeur par défaut, utilisez-la -ndans le test et -mtime +7dans la commande find.

0

Je viens de poster une réponse à cette question sur le sujet suivant

Où puis-je consulter mon historique de mise à jour?

La réponse peut être moins appropriée pour cette rubrique, car elle recherche spécifiquement la "mise à niveau apt-get". Voici un exemple de sortie.

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

Voir l'autre rubrique pour le code source et plus d'explications.


Il me semblait que votre code recherchait une mise à niveau, pas une mise à jour. Par exemple, je viens de lancer "apt-get update" (le sujet de cette question) sur mon Ubuntu 16.04 et pas un iota de changement n'apparaît dans / var / log / apt, ce qui implique que scanner quoi que ce soit dans ce répertoire ne sera d'aucune utilité pour répondre à cette question particulière.
Ron Burk

1
Vous avez tout à fait raison. Merci d'avoir fait remarquer cela. J'ai changé ma réponse pour refléter cela. Nous recherchions la dernière date à laquelle les mises à jour ont été appliquées à la machine, plutôt que les mises à jour qui viennent d'être téléchargées.
JsinJ

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.