Как узнать, когда в последний раз выполнялось `apt-get update`?

Я знаю, что команда для обновления списков репозитория - apt-get update.

Как проверить, было ли оно выполнено сегодня или за последние 24 часа?

Я не знаю, стоит ли проверять временную метку файла. Или введите другую команду apt. Или используйте утилиту dpkg.

Не удалось найти что-то полезное на страницах руководства.

24
задан 1 December 2016 в 23:06

9 ответов

Вы можете проверить историю команд в терминале:

history | grep 'apt update'

Чтобы проверить это по времени:

HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'

(Часть регулярного выражения [a] соответствует только букве a, но имеет эффект, чтобы не совпадать при поиске в истории.)

enter image description here

Надеюсь, это помогает!

0
ответ дан 1 December 2016 в 23:06

Проверьте отметку времени /var/lib/apt/periodic/update-success-stamp.

$ ls -l /var/lib/apt/periodic/update-success-stamp
-rw-r--r-- 1 root root 0 Jan 25 01:41 /var/lib/apt/periodic/update-success-stamp

Здесь время Jan 25 01:41, когда apt-get последний раз выполнялся. Чтобы узнать только время, используйте следующую команду в терминале:

$ ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}'
Jan 25 01:41

Это лучшее место для проверки времени последнего обновления. Если вы обнаружили, что /var/lib/apt/periodic/ пусто, вы можете попробовать,

ls -l /var/log/apt/history.log

Обновить

Обнаружено, что по некоторым причинам выше файлы update-success-stamp или history.log остаются недоступными в некоторых системах. Существует новое предложение от Дероберта для просмотра в файле /var/cache/apt/pkgcache.bin.

pkgcache.bin - это расположение кэша пакетов Apt в памяти. Это обновляется после каждого обновления. Так что это идеальный кандидат, чтобы знать, когда в последний раз обновлялся apt.

Чтобы узнать точное время, можно использовать следующую команду:

ls -l /var/cache/apt/pkgcache.bin | cut -d' ' -f6,7,8

или

stat /var/cache/apt/pkgcache.bin
0
ответ дан 1 December 2016 в 23:06

Я использую /var/cache/apt определить, должен ли я работать apt-get update. По умолчанию, если различие между текущим временем и временем кэша /var/cache/apt менее, чем с 24 часами, я не должен работать apt-get update. Интервал обновления по умолчанию может быть переопределен путем передачи числа для функционирования runAptGetUpdate()

function trimString()
{
    local -r string="${1}"

    sed -e 's/^ *//g' -e 's/ *$//g' <<< "${string}"
}

function isEmptyString()
{
    local -r string="${1}"

    if [[ "$(trimString "${string}")" = '' ]]
    then
        echo 'true'
    else
        echo 'false'
    fi
}

function info()
{
    local -r message="${1}"

    echo -e "\033[1;36m${message}\033[0m" 2>&1
}

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

6
ответ дан 1 December 2016 в 23:06

Вам также может быть интересен файл:

/var/log/apt/term.log

Откройте его с меньше или cat как корень .

0
ответ дан 1 December 2016 в 23:06

Я использую эту команду

stat /var/cache/apt/ | grep -i -e access -e modify

, чтобы показать, когда в последний раз к ней обращались, т.е. запуск 'apt-get update' также в прошлый раз, когда он был фактически обновлен.

обратите внимание, что если времена отличаются, возможно, обновление недоступно. Поскольку мои обновления и обновления выполняются crontab в определенное время, я могу сказать, запускались ли мои обновления или нет.

0
ответ дан 1 December 2016 в 23:06
  • 1
    относительно Вашего редактирования материнская плата пожарена так или иначе, таким образом, what' s вред? – dabadaba 15 July 2015 в 18:50

Комбинируя последний комментарий @ ssokolow с ответом из здесь , эта команда будет выполняться apt-get update, если она не выполнялась в течение последних 7 дней:

[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update

Объяснение:

  • -mtime -7 находит файлы, у которых есть время изменения за последние 7 дней. Вы можете использовать -mmin, если вам небезразлично короткое время.
  • -maxdepth 0 гарантирует, что find не попадет в содержимое каталога.
  • -H разыменовывает /var/lib/apt/lists, если это мягкая ссылка
  • Если по какой-то причине find не удается, то команда будет выполнена. Это кажется мне безопасным по умолчанию. Если вы хотите перевернуть значение по умолчанию, используйте -n в тесте и -mtime +7 в команде поиска.
0
ответ дан 1 December 2016 в 23:06

Я только что опубликовал ответ на этот вопрос по следующей теме

Где я могу посмотреть историю обновлений?

Ответ может быть менее подходящим для этой темы , так как он специально ищет «apt-get upgrade». Вот пример вывода.

xenial% 9: ./linuxpatchdate 
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2

См. В другой теме исходный код и дополнительные пояснения.

0
ответ дан 1 December 2016 в 23:06
LAST_UPDATED=$( stat --format="%X" /var/cache/apt/pkgcache.bin )
UNIX_TIME=$( date +%s )
TIME_DIFF=$(( UNIX_TIME - LAST_UPDATED ))

if [[ "${TIME_DIFF}" -gt 43200 ]]
then
  # It's been 12 hours since apt-get update was ran.
fi
0
ответ дан 1 December 2016 в 23:06

В частности, для apt я рекомендую этот однострочный от @itsadok:

[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update

Однако, если вам нужен более портативный " менеджер пакетов обновлений на минимум каждые x дней "семантика, вы можете просто коснуться временного файла при обновлении.

Например:

APT_UPDATED="/tmp/apt-update-tstamp"

# Delete temp file created >1 day ago
find "$APT_UPDATED" -mtime +1 -exec rm {} \; 2>/dev/null

# Update apt if needed
if [ ! -f "$APT_UPDATED" ]; then
  if apt-get update; then
    touch "$APT_UPDATED"
  fi
fi

Это должно работать в большинстве сценариев, так как:

  • Больше обновлений вам не повредит (кроме времени)
  • Не полагается на какие-либо внутренние компоненты (может расширяться до pkg, yum и т. Д.)
1
ответ дан 20 January 2020 в 03:09

Другие вопросы по тегам:

Похожие вопросы: