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」呼び出しの時刻を取得するコマンド。

また、システムにそのapt設定ファイルがない場合は、いつでも追加できます。


apt.conf行を含めるための+1。Ubuntu 14.04では、ファイルは/var/lib/apt/periodic/update-stamp
GnP

11

apt-get updateを実行すると更新される/ var / lib / apt / lists内のファイルのアクセス時間を確認できます。apt-get updateがsudoで実行された場合、完了時に/var/log/auth.logにログが記録されているはずです。


2
別の場所で指摘したように、一部のファイルは更新されておらず、したがって再度ダウンロードされていない場合があります。これは、パッケージリストの最新状態を知りたい場合は問題ありませんが、apt-get updateが最後に実行されたのはいつかを知りたい場合は問題ありません。前者の可能性が高くなります。
デビッドパシュリー

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

これは1つの2つのコマンドです。最初のコマンドの結果は、パイプ(|)記号を介して2番目にフィルター処理されます。

最初のコマンドでは、「ls」を使用して/ var / log / aptディレクトリのファイルの内容をリストしています。これは、apt-getのアクセス履歴ログを保存するディレクトリです。「-lt」部分は、実際には2つのスイッチです。最初の「l」スイッチは、「ls」に対して、行ごとに1つのファイルを詳細にリストするように指示します。2番目の「t」スイッチは、「ls」に日付と時刻でソートするように指示します。「--time-style」は、日時を「YYYY-MM-DD HH:MM」の形式で強制的に表示します。

コマンドの「grep」部分の「-o」スイッチは、正規表現に正確に一致する各行の部分のみを表示するようにgrepに指示します。ここで使用した正規表現は、「ls」コマンドで指定された形式の日付時刻を検出します。また、「grep」コマンドの最後に、「-m」スイッチがあり、その直後に数字の「1」が付いていることがわかります。これは、「grep」に最初の一致を見つけた後に一致の検索を停止するように指示します。

つまり、要約すると、aptログファイルの詳細を一覧表示して、最終変更日を確認できるようにします。次に、日付で並べ替え、grepに最初の日付を先頭から取得するように指示します。これが、apt-getが実行された最後の日付です。

しかし、しばらくの間、悪魔の支持者を演じるために、UbuntuのようなDebianプラットフォームでは、apt-getを定期的に実行されるジョブとしてスケジュールするのが一般的です。apt-get実行のもう一方の端にいる人を探している場合、実際にマシンを見つけることができます。アクセスログとaptログを常に一致させて、タイムスタンプが一致するかどうかを確認できます。ユーザーのコマンド履歴をある程度見ることも可能です。

お役に立てれば!


1
残念ながら動作しません。また/var/log/apt、たとえば、私が実行したときにも記録されますapt-get install some-package。実際にはUbuntuの上ではないではない私が行うときに何かをログapt-get update
アレックス

2

ファイル/ var / cache / aptの最終変更時刻を確認して、最後の更新がパッケージリストに適用された時期を把握できると思います。

これをテストし、「sudo apt-get update」を連続して2回実行しましたが、日付は現在の値から変更されませんでしたが、これは適用する新しい更新がなく、キャッシュがアップしているためだと思われます現在まで。


1
$ ls -l /var/lib/dpkg/lock 
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock

1

Synapticは履歴ファイル(> File> History)をログに記録し、aptitudeは/ 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


回答が不完全です。何ですinfoisEmptyString?また、infoそれはコマンドでもあるため、関数名の選択は不適切です。それ以外は、素晴らしい解決策です!
ロニーアンダーソン


0

/var/log/dpkg.logは、何が行われたかの履歴を保持しますが、必ずしもdpkg(synaptic、apt-getなど)を呼び出したアプリではありません。


0

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)

1日以上前に変更されたupdate-success-stampファイルを探します。適切な年齢のファイルを見つけると、更新を実行します。注:これが機能するには、update-success-stampファイルが存在する必要があります。

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