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?
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?
Réponses:
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.
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.
Un apt-get update
ne 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/
apt-get update
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!
/var/log/apt
est é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
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.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
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.
J'utilise /var/cache/apt
pour 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/apt
est 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
info
et isEmptyString
? En outre, info
c'est un mauvais choix de nom de fonction car c'est aussi une commande. A part ça, belle solution!
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;)
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.
/var/lib/apt/periodic/update-stamp