Знайти останній раз оновлення виконували за допомогою apt-get


30

Мені потрібно знайти останній раз, коли

apt-get update

команда виконувалася на моєму сервері. Як я можу визначити цю інформацію?

Відповіді:


23

Принаймні, в системах 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".

І якщо у вашій системі немає відповідного файлу конфігурації, ви завжди можете його додати.


+1 за включення лінії apt.conf У ubuntu 14.04 здається, що файл знаходиться/var/lib/apt/periodic/update-stamp
GnP

11

Ви можете перевірити час доступу до файлів у / var / lib / apt / list, який оновлюється під час запуску apt-get update. Якщо оновлення apt-get було запущено за допомогою sudo, у вас повинен був увійти рядок /var/log/auth.log, коли це було зроблено ..


2
Як зазначалося десь в іншому місці, ви можете виявити, що деякі файли не оновлюються і тому не завантажуються знову. Це добре, якщо ви хочете знати, наскільки актуальні списки ваших пакетів, але ні, якщо ви хочете знати, коли останній запуск apt-get було оновлено. Перший є більш імовірним.
Девід Пашлі

10

apt-get updateНе може створювати або файли оновлення, він робить оновлення каталогу кешу , тому ми можемо використовувати, щоб отримати тимчасову мітку , коли останній apt-get updateбув запущений:

stat -c %Y /var/cache/apt/

Зауважте, що встановлення пакета може також оновити кеш-каталог. Це не достовірна перевіркаapt-get update
GnP

3

Не переходьте від файлів блокування. Файли блокування не є надійними, вони, як правило, переміщаються з часом за допомогою нових версій 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, ви можете знайти машину. Ви завжди можете порівнювати журнали доступу з підходящими журналами, щоб побачити, чи збігаються позначки часу. Можна також певною мірою переглянути історію команд користувача.

Сподіваюся, це допомагає!


1
На жаль, не працює. У /var/log/aptньому також реєструється , коли я, наприклад , виконати команду apt-get install some-package. Насправді на Ubuntu він нічого не записує, коли я це роблюapt-get update
Алекс

2

Я підозрюю, що ви можете перевірити останні модифіковані рази у файлах / var / cache / apt, щоб з’ясувати, коли останні оновлення були застосовані до списків пакетів.

Я щойно тестував це, і двічі поспіль запускав "sudo apt-get update", і дати не змінювались від їх поточного значення, але я підозрюю, що це відбувається тому, що не було застосовано нових оновлень, а кеш-пам'ять працює на сьогоднішній день.



1

Synaptic записує файл історії (> Файл> Історія), придатність записує історію в / var / log / aptitude та автоматично встановлені пакети в / var / lib / aptitude / pkgstates, щоб ви могли перевірити їх на останню активність.


1

Я використовую /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це поганий вибір назви функції, оскільки це також команда. Крім цього, приємне рішення!
Ронні Андерссон

@RonnyAndersson, все в цьому розділі: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen

0

/var/log/dpkg.log буде зберігати історію того, що було зроблено, але не обов’язково, яке додаток називається dpkg (синаптичний, apt-get тощо).


0

wrap apt-get в сценарій, який спочатку записує часову позначку у файл, а потім виконує звичайну роботу. таким чином, ви можете визначити формат та місце часової позначки;)


Sujoy, загортання цього сценарію не є практичним, якщо у вас є сотні серверів, і ви не хочете підтримувати ще один сценарій, який може спричинити проблеми наступного разу, коли ви оновите пакет apt-get. Я думаю, що запитувач шукає відповідь, яка використовує інформацію, яка вже є в його комп’ютері.
pdwalker

0

Ось простий однолінійний запуск оновлення, якщо він не був запущений за останній день.

(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 повинен існувати, щоб це працювало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.