リポジトリリストを更新するコマンドがapt-get update
であることを知っています。
今日または過去24時間に実行されたかどうかを確認する方法
ファイルのタイムスタンプを確認する必要があるかどうかはわかりません。または、別のaptコマンドを発行します。または、dpkgユーティリティを使用します。
マニュアルページで何か役に立つものが見つかりませんでした。
ターミナルでコマンド履歴を確認できます:
history | grep 'apt update'
時間で確認するには:
HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'
(正規表現の[a]
部分は、文字a
にのみ一致しますが、履歴をgrepするときに一致しないという効果があります。)
願っています!
/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
/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
また、ファイルについて興味があるかもしれません:
/var/log/apt/term.log
lessまたはcat as rootで開きます。
@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
を使用します。私はこのコマンドを使用します
stat /var/cache/apt/ | grep -i -e access -e modify
最後にアクセスした時間を表示する、つまり。最後に「apt-get update」を実行しても、実際に更新されました。
時間が異なる場合は、利用可能なアップデートがなかった可能性があることに注意してください。特定の時間にcrontabでアップデートとアップグレードを実行しているため、アップデートが実行されたかどうかを確認できます。
次のトピックに関するこの質問への回答を投稿しました
「apt-get upgrade」を明確に探すため、このトピックに対する答えはあまり適切ではないかもしれません。出力例を次に示します。
xenial% 9: ./linuxpatchdate
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2
ソースコードと詳細な説明については、他のトピックを参照してください。
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