私は最後の時間を見つける必要があります
apt-get update
サーバーでコマンドが実行されました。この情報をどのように判断できますか?
少なくとも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-get updateを実行すると更新される/ var/lib/apt/lists内のファイルのアクセス時間を確認できます。 Sudoを使用してapt-get updateを実行した場合は、完了時に/var/log/auth.logにログが記録されているはずです。
apt-get update
はファイルを作成または更新しない場合があります。キャッシュディレクトリを更新するため、それを使用して最後のapt-get update
が実行されました:
stat -c %Y /var/cache/apt/
ロックファイルから移動しないでください。ロックファイルは信頼できません。新しい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ログを常に一致させて、タイムスタンプが一致するかどうかを確認できます。ユーザーのコマンド履歴をある程度見ることもできます。
お役に立てれば!
ファイル/ var/cache/aptの最終変更時刻をチェックして、最後の更新がパッケージリストにいつ適用されたかを確認できると思います。
私はこれをテストし、「Sudo apt-get update」を続けて2回実行しましたが、日付は現在の値から変更されませんでしたが、これは、適用する新しい更新がなく、キャッシュが稼働しているためと考えられます現在まで。
Synapticは履歴ファイル(> File> History)をログに記録し、aptitudeは履歴を/ var/log/aptitudeに記録し、自動インストールされたパッケージを/ var/lib/aptitude/pkgstatesに記録するため、最新のアクティビティを確認できます。
_/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
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
/var/log/dpkg.logは何が行われたかの履歴を保持しますが、必ずしもどのアプリがdpkg(synaptic、apt-getなど)を呼び出したかは関係ありません。
更新が最終日に実行されていない場合に更新を実行する簡単な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ファイルが存在している必要があります。
最初にタイムスタンプをファイルに書き込み、次に通常の作業を行うスクリプトでapt-getをラップします。そうすれば、タイムスタンプの形式と場所を定義できます;)