web-dev-qa-db-ja.com

apt-getを使用して更新が最後に実行された時間を検索する

私は最後の時間を見つける必要があります

apt-get update

サーバーでコマンドが実行されました。この情報をどのように判断できますか?

30
Mark Roddy

少なくとも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構成ファイルがない場合は、いつでも追加できます。

23
Tuomas

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

11
rkthkr

apt-get updateはファイルを作成または更新しない場合があります。キャッシュディレクトリを更新するため、それを使用して最後のapt-get updateが実行されました:

stat -c %Y /var/cache/apt/
10
Hans Lambermont

ロックファイルから移動しないでください。ロックファイルは信頼できません。新しい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」を使用して/ apt/getのアクセス履歴ログを格納するディレクトリである/ var/log/aptディレクトリのファイル内容を一覧表示しています。 「-lt」の部分は実際には2つのスイッチです。最初の "l"スイッチは、 "ls"に1行に1つのファイルを詳細にリストするように指示します。 2番目の「t」スイッチは、「ls」に日付と時刻でソートするように指示します。 「--time-style」は、日付時刻を「YYYY-MM-DD HH:MM」の形式で強制的に表示します。

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

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

ただし、Devilの擁護者を少しの間プレイするために、UbuntuなどのDebianプラットフォームでは、apt-getを定期的に実行されるジョブとしてスケジュールするのが一般的です。 apt-get実行の反対側にいる人を探している場合、実際にはマシンを見つけることができます。アクセスログとaptログを常に一致させて、タイムスタンプが一致するかどうかを確認できます。ユーザーのコマンド履歴をある程度見ることもできます。

お役に立てれば!

3
Aaron Belovsky

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

私はこれをテストし、「Sudo apt-get update」を続けて2回実行しましたが、日付は現在の値から変更されませんでしたが、これは、適用する新しい更新がなく、キャッシュが稼働しているためと考えられます現在まで。

2
slacy

Synapticは履歴ファイル(> File> History)をログに記録し、aptitudeは履歴を/ var/log/aptitudeに記録し、自動インストールされたパッケージを/ var/lib/aptitude/pkgstatesに記録するため、最新のアクティビティを確認できます。

1
Josh Brower

_/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

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

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

0
Jonathan

更新が最終日に実行されていない場合に更新を実行する簡単な1行を次に示します。

(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ファイルが存在している必要があります。

0
Christian Long

最初にタイムスタンプをファイルに書き込み、次に通常の作業を行うスクリプトでapt-getをラップします。そうすれば、タイムスタンプの形式と場所を定義できます;)

0
Sujoy