Rechercher la dernière mise à jour effectuée avec apt-get

30

Je dois trouver la dernière fois que le

apt-get update

La commande a été exécutée sur mon serveur. Comment puis-je déterminer ces informations?

Mark Roddy
la source

Réponses:

23

Au moins dans les systèmes Ubuntu, il existe un fichier /etc/apt/apt.conf.d/15update-stamp contenant:

APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

Donc, voyez si vous avez / var / lib / apt / periodic / update-success-stamp et si vous l'avez, vous pouvez utiliser

stat -c %y /var/lib/apt/periodic/update-success-stamp

pour obtenir l'heure de la dernière invocation "apt-get update".

Et si votre système n'a pas ce fichier de configuration apt, vous pouvez toujours l'ajouter.

Tuomas
la source
+1 pour inclure la ligne apt.conf. Sur Ubuntu 14.04, il semble que le fichier soit à/var/lib/apt/periodic/update-stamp
GnP
11

Vous pouvez vérifier les temps d'accès sur les fichiers dans / var / lib / apt / lists qui sont mis à jour lorsque vous exécutez la mise à jour apt-get. Si la mise à jour apt-get a été exécutée avec sudo, vous devriez avoir une ligne connectée dans /var/log/auth.log quand cela a été fait.

rkthkr
la source
2
Comme indiqué ailleurs, vous pouvez constater que certains fichiers ne sont pas mis à jour et n'ont donc pas été téléchargés à nouveau. C'est très bien si vous voulez savoir à quel point vos listes de paquets sont à jour, mais pas si vous voulez savoir quand la mise à jour apt-get a été exécutée pour la dernière fois. Le premier est plus probable.
David Pashley
10

Un apt-get updatene peut pas créer ou mettre à jour des fichiers, il met à jour le répertoire de cache afin que nous puissions l'utiliser pour obtenir l'horodatage lorsque le dernier a apt-get updateété exécuté:

stat -c %Y /var/cache/apt/
Hans Lambermont
la source
Notez que l'installation du package peut également mettre à jour le répertoire de cache. Ce n'est pas une vérification fiable pourapt-get update
GnP
3

Ne vous éloignez pas des fichiers de verrouillage. Les fichiers de verrouillage ne sont pas fiables, ils ont tendance à se déplacer avec le temps avec les nouvelles versions de Linux, et de nombreux programmes nettoient (suppriment) les fichiers de verrouillage lorsqu'ils en ont fini avec eux.

La commande suivante vous obtiendra ce que vous recherchez.

ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

Il s'agit de deux commandes en une. Les résultats du premier filtre de commande dans le second via le symbole de canal (|).

Dans la première commande, j'utilise "ls" pour répertorier le contenu du fichier du répertoire / var / log / apt, qui est le répertoire qui stocke les journaux d'historique d'accès pour apt-get. La partie "-lt" est en fait deux commutateurs. Le premier commutateur "l" indique à "ls" de répertorier un fichier par ligne avec des détails. Le deuxième commutateur "t" indique à "ls" de trier par date et heure. "--time-style" force l'affichage de la date et de l'heure au format "AAAA-MM-JJ HH: MM".

Dans la partie "grep" de la commande, le commutateur "-o" indique à grep de n'afficher que les parties de chaque ligne qui correspondent exactement à l'expression régulière. L'expression régulière que j'ai utilisée ici détecte les heures de date au format spécifié dans la commande "ls". Vous remarquerez également le vrai petit morceau de magie à la toute fin de la commande "grep" qu'il y a un commutateur "-m" avec le numéro "1" immédiatement après. Cela indique à "grep" d'arrêter de rechercher des correspondances après avoir trouvé la première.

Donc, en résumé, nous listons les détails du fichier journal apt afin que nous puissions voir la dernière date modifiée, nous trions ensuite par date et demandons à grep de retirer la première date du haut, qu'elle renvoie ensuite. C'est la dernière date à laquelle apt-get s'est déroulée.

Pour jouer l'avocat du diable pendant un moment, cependant, il est courant que les plateformes Debian comme Ubuntu planifient apt-get comme un travail qui s'exécute régulièrement. Si vous recherchez la personne à l'autre bout de l'exécution apt-get, vous pouvez en fait trouver une machine. Vous pouvez toujours faire correspondre les journaux d'accès avec les journaux apt pour voir si des horodatages coïncident. Il est également possible de consulter l'historique des commandes d'un utilisateur dans une certaine mesure.

J'espère que cela t'aides!

Aaron Belovsky
la source
1
Malheureusement ne fonctionne pas. Il /var/log/aptest également enregistré lorsque je fais par exemple un apt-get install some-package. En fait, sur Ubuntu, il n'enregistre pas quelque chose quand je le faisapt-get update
Alex
2

Je soupçonne que vous pouvez vérifier les dernières heures modifiées sur les fichiers / var / cache / apt pour savoir quand les dernières mises à jour ont été appliquées aux listes de paquets.

Je viens de tester cela et j'ai exécuté "sudo apt-get update" deux fois de suite, et les dates n'ont pas changé par rapport à leur valeur actuelle, mais je pense que c'est parce qu'il n'y avait pas de nouvelles mises à jour à appliquer et que les caches sont en place à ce jour.

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

Synaptic enregistre un fichier d'historique (> Fichier> Historique), aptitude enregistre à la fois l'historique dans / var / log / aptitude et les packages auto-installés dans / var / lib / aptitude / pkgstates, afin que vous puissiez vérifier ces dernières activités.

Josh Brower
la source
1

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

Nam Nguyen
la source
La réponse est incomplète. Qu'est-ce que infoet isEmptyString? En outre, infoc'est un mauvais choix de nom de fonction car c'est aussi une commande. A part ça, belle solution!
Ronny Andersson
@RonnyAndersson, tout dans cette lib: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen
0

/var/log/dpkg.log conservera un historique de ce qui a été fait, mais pas nécessairement de l'application appelée dpkg (synaptic, apt-get, etc.).

Jonathan
la source
0

envelopper apt-get dans un script qui écrit d'abord un horodatage dans un fichier, puis fait le travail habituel. de cette façon, vous pouvez définir le format et l'emplacement de l'horodatage;)

Sujoy
la source
Je vous en prie, l'envelopper dans un script n'est pas pratique si vous avez des centaines de serveurs, et vous ne souhaitez pas conserver un autre script qui pourrait causer des problèmes la prochaine fois que vous mettrez à jour votre paquet apt-get. Je pense que le demandeur cherche une réponse qui utilise des informations déjà existantes dans son ordinateur.
pdwalker
0

Voici une simple ligne pour exécuter une mise à jour si elle n'a pas été exécutée le dernier jour.

(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)

Il recherche le fichier update-success-stamp, qui a été modifié il y a plus d'un jour. S'il trouve le fichier du bon âge, il exécute la mise à jour. Remarque: le fichier update-success-stamp doit exister pour que cela fonctionne.

Christian Long
la source