web-dev-qa-db-ja.com

「apt-get update」が最後に実行された時間を知る方法は?

リポジトリリストを更新するコマンドがapt-get updateであることを知っています。

今日または過去24時間に実行されたかどうかを確認する方法

ファイルのタイムスタンプを確認する必要があるかどうかはわかりません。または、別のaptコマンドを発行します。または、dpkgユーティリティを使用します。

マニュアルページで何か役に立つものが見つかりませんでした。

24
cavila

ターミナルでコマンド履歴を確認できます:

history | grep 'apt update'

時間で確認するには:

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

(正規表現の[a]部分は、文字aにのみ一致しますが、履歴をgrepするときに一致しないという効果があります。)

enter image description here

願っています!

14
nux

/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を調べるための新しい 提案 from derobert があります。

pkgcache.bin は、Aptのメモリマップパッケージキャッシュの場所です。更新のたびに更新されます。したがって、aptが最後に更新された時間を知ることは完璧な候補です。

次のコマンドを使用して正確な時間を知ることができますが、

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

または

stat /var/cache/apt/pkgcache.bin
53
souravc

/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
Nam Nguyen

また、ファイルについて興味があるかもしれません:

/var/log/apt/term.log

lessまたはcat as rootで開きます。

2

@ssokolowの最後のコメントを here からの回答と組み合わせて、このコマンドは、過去7日間実行されなかった場合、apt-get updateを実行します。

[ -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を使用し、findコマンドで-mtime +7を使用します。
1
itsadok

私はこのコマンドを使用します

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

最後にアクセスした時間を表示する、つまり。最後に「apt-get update」を実行しても、実際に更新されました。

時間が異なる場合は、利用可能なアップデートがなかった可能性があることに注意してください。特定の時間にcrontabでアップデートとアップグレードを実行しているため、アップデートが実行されたかどうかを確認できます。

1
SCBB

次のトピックに関するこの質問への回答を投稿しました

更新履歴はどこで確認できますか?

「apt-get upgrade」を明確に探すため、このトピックに対する答えはあまり適切ではないかもしれません。出力例を次に示します。

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

ソースコードと詳細な説明については、他のトピックを参照してください。

0
JsinJ
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
mikeytown2