Мне нужно найти последний раз, когда
apt-get update
Команда была выполнена на моем сервере. Как я могу определить эту информацию?
Мне нужно найти последний раз, когда
apt-get update
Команда была выполнена на моем сервере. Как я могу определить эту информацию?
Ответы:
По крайней мере, в системах Ubuntu есть файл /etc/apt/apt.conf.d/15update-stamp, содержащий:
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
Посмотрите, есть ли у вас / var / lib / apt / periodic / update-success-stamp и если у вас есть, вы можете использовать
stat -c %y /var/lib/apt/periodic/update-success-stamp
команда для получения времени последнего вызова «apt-get update».
И если ваша система не имеет этого файла конфигурации, вы всегда можете добавить его.
Вы можете проверить время доступа к файлам в / var / lib / apt / lists, которая обновляется при запуске apt-get update. Если обновление apt-get было запущено с помощью sudo, вы должны зарегистрировать строку в /var/log/auth.log, когда это будет сделано.
Он apt-get update
может не создавать и не обновлять файлы, он обновляет каталог кэша, поэтому мы можем использовать его для получения метки времени, когда последний apt-get update
запуск выполнялся:
stat -c %Y /var/cache/apt/
apt-get update
Не уходи от файлов блокировки. Файлы блокировки не надежны, они имеют тенденцию перемещаться с течением времени с новыми выпусками Linux, и многие программы очищают (удаляют) файлы блокировки, когда они делают с ними.
Следующая команда даст вам то, что вы ищете.
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
Это две команды в одной. Результаты первой команды фильтруют во вторую через символ (|).
В первой команде я использую «ls» для отображения содержимого файла каталога / var / log / apt, который является каталогом, в котором хранятся журналы истории доступа для apt-get. Часть "-lt" - это фактически два переключателя. Первый переключатель «l» указывает «ls» перечислять по одному файлу в строке с подробной информацией. Второй переключатель «t» указывает «ls» сортировать по дате и времени. «--time-style» заставляет дату и время отображаться в формате «ГГГГ-ММ-ДД ЧЧ: ММ».
В части команды "grep" ключ "-o" указывает grep показывать только те части каждой строки, которые точно соответствуют регулярному выражению. Регулярное выражение, которое я здесь использовал, определяет время даты в формате, указанном в команде "ls". В самом конце команды «grep» вы также заметите настоящий маленький кусочек магии: здесь есть ключ «-m», за которым следует цифра «1». Это говорит "grep" прекратить поиск совпадений после того, как он найдет первый.
Итак, в итоге, мы перечисляем подробности файла журнала apt, чтобы мы могли видеть дату последнего изменения, затем сортируем по дате и говорим grep, чтобы вытащить первую дату сверху, которую она затем возвращает. Это последнее свидание, которое провёл apt-get.
Однако, чтобы на мгновение сыграть в защиту дьявола, платформы Debian, такие как Ubuntu, часто планируют apt-get как работу, которая выполняется регулярно. Если вы ищете человека на другом конце выполнения apt-get, вы можете найти машину. Вы всегда можете сопоставить журналы доступа с журналами apt, чтобы увидеть, совпадают ли какие-либо временные метки. Также возможно посмотреть историю команд пользователя в некоторой степени.
Надеюсь это поможет!
/var/log/apt
это также регистрируется, когда я например делаю apt-get install some-package
. На самом деле на Ubuntu он не регистрирует что-то, когда я делаюapt-get update
Я подозреваю, что вы можете проверить последние изменения в файлах / var / cache / apt, чтобы выяснить, когда последние обновления были применены к спискам пакетов.
Я только что проверил это и дважды выполнил команду «sudo apt-get update», и даты не изменились по сравнению с их текущим значением, но я подозреваю, что это потому, что не было новых обновлений, которые нужно применить, и что кэши работают встретиться.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
Synaptic регистрирует файл истории (> Файл> История), aptitude записывает историю как в / var / log / aptitude, так и автоматически установленные пакеты в / var / lib / aptitude / pkgstates, так что вы можете проверить их на предмет последних действий.
Я использую, /var/cache/apt
чтобы определить, нужно ли мне бежать apt-get update
. По умолчанию, если разница между текущим временем и временем кэширования /var/cache/apt
составляет менее 24 часов, мне не нужно запускаться apt-get update
. Интервал обновления по умолчанию можно переопределить, передав число в функциюrunAptGetUpdate()
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
}
Пример вывода:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
Я извлек эти функции из моего личного github: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
info
и isEmptyString
? Кроме того, info
это плохой выбор имени функции, так как это также команда. Помимо этого, хорошее решение!
Оберните apt-get в скрипт, который сначала записывает метку времени в файл, а затем выполняет обычную работу. таким образом, вы можете определить формат и местоположение метки времени;)
Вот простой однострочный инструмент для запуска обновления, если оно не было запущено в последний день.
(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)
Он ищет файл update-success-stamp, который был изменен более одного дня назад. Если он находит файл нужного возраста, он запускает обновление. Примечание: файл update-success-stamp должен существовать, чтобы это работало.
/var/lib/apt/periodic/update-stamp