Мені потрібно знайти останній раз, коли
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 / list, який оновлюється під час запуску 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" змушує час дати відображатися у форматі "РРРР-ММ-ДД HH: MM".
У частині "grep" команди перемикач "-o" повідомляє grep відображати лише ті частини кожного рядка, які точно відповідають регулярному виразу. Використовуваний тут регулярний вираз визначає часові дати у форматі, вказаному в команді "ls". Ви також помітите справжній маленький фрагмент магії на самому кінці команди "grep", що тут же слід перемикач "-m" з цифрою "1". Це говорить «грепу», щоб перестати шукати сірники після того, як він знайде перший.
Отже, підводячи підсумок, ми перелічуємо деталі файлу влучного журналу, щоб ми могли побачити останню змінену дату, потім сортуємо за датою та повідомляємо grep витягнути першу дату зверху, яку вона потім повертає. Це останній день, коли вдалий бігти.
На хвилину грати захисника диявола, але для платформ Debian, таких як Ubuntu, звичайно планувати apt-get як роботу, яка працює регулярно. Якщо ви шукаєте людину на іншому кінці виконання apt-get, ви можете знайти машину. Ви завжди можете порівнювати журнали доступу з підходящими журналами, щоб побачити, чи збігаються позначки часу. Можна також певною мірою переглянути історію команд користувача.
Сподіваюся, це допомагає!
/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 записує файл історії (> Файл> Історія), придатність записує історію в / 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
це поганий вибір назви функції, оскільки це також команда. Крім цього, приємне рішення!
wrap 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