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


24

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

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

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

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

回答:


15

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

history | grep 'apt update'

時間で確認するには:

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

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

ここに画像の説明を入力してください

それが役に立てば幸い !


2
それはhistory | grep 'apt-get update':)
ルシオ14年

7
@souravcは正しい。これだけでは機能しません。HISTTIMEFORMATが設定されていない場合、.bashrcこのコマンドは、現在のシェルセッションから実際に実行されたコマンドの正しいタイムスタンプのみを持ちます。現在のセッションからのものではない他のすべてのコマンドについては、タイムスタンプは~/.bash_historyファイルの変更タイムスタンプのみを表示します。これらのタイムスタンプは~/.bash_historyファイルに保存されないため、他のセッションからのコマンドのタイムスタンプを表示できません。これらのスタンプはまだメモリにあるため、現在のセッションのタイムスタンプを表示できます。
鷹匠14年

7
これは常に機能するとは限りません。たとえば、他のユーザーが実行したaptときや、ユーザー.bash_historyがトリミングされたとき。
OrangeTux 14年

4
これはひどく間違った答えです。無人アップグレードは考慮されていません。また、あなたが私のように4-5台の端末を常に開いている場合、履歴は(デフォルトで)終了したときにのみ保存されるため、すべてをチェックする必要があります。
ハッケル

3
誰もがすでに言ったことをエコーし​​ますが、aptがスクリプトによって更新された場合、適切な履歴を表示していない場合、履歴がトリミングされている場合、または別のユーザーが更新を行った場合は機能しません。これは、一般的なケースを解決するのに十分な信頼性がありません。
zneak

54

のタイムスタンプを確認し/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:41apt-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いくつかのシステムでは利用できないまま。新しいある提案からderobert ファイルに見ては/var/cache/apt/pkgcache.bin

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

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

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

または

stat /var/cache/apt/pkgcache.bin

私の/var/lib/apt/periodic/ディレクトリが空である
virtualxtc

私のディレクトリも空です。Debian 7.3 wheezy。
カビラ14年

6
より良いバックアップ場所はになります/var/cache/apt/pkgcache.bin。また、ls; の出力を解析しないでください。stat代わりに使用してください。ことを覚えておいてくださいls(また、私はあなたがアップデート-通知-共通がインストールされている場合にのみ、あなたが提案する最初のファイルを取得すると思います)など、ファイルの年齢に依存、出力はロケールに依存
derobert

2
/var/cache/apt/pkgcache.binパッケージのインストールについても触れられているようですので、最後のapt-get update実行を確認する信頼できる方法ではありません。
GnP 16

3
...そしてapt-get clean最近実行されたDebian 8システムには何もありません/var/cache/apt/pkgcache.bin/var/lib/apt/lists代わりにmtimeを使用してみapt-get updateます。これは、実際に操作する生のキャッシュされていないデータのようです。
ssokolow

6

私は/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


2

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

/var/log/apt/term.log

rootとしてlessまたはcatを使用して開きます。


これは、aptがパッケージデータベースで実行したアクションのログをチェックするのに賢明な場所ですが、投稿者はについて知りたいと思っておりapt-get update、明らかにログに記録されていません。
ファヒームミタ

1

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

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

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

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


1

@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

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

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

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

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

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


あなたのコードは更新ではなく、アップグレードを探しているように見えました。たとえば、Ubuntu 16.04で「apt-get update」(この質問の主題)を実行しただけで、/ var / log / aptに変更のiotaが1つも表示されません。この特定の質問に答えて。
ロン・バーク

1
あなたはまったく正しい。それを指摘してくれてありがとう。それを反映するように答えを変更しました。更新がダウンロードされるのではなく、更新がマシンに適用される最終日を探していました。
JsinJ

0
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.