apt-get update
の実行が必要かどうかを検出する方法はありますか?
apt-get update
を実行すると、最新のリストが既にある場合でもダウンロードされるようです。最新のリストがある場合は、リストのダウンロードを避けたいと思います。
/etc/apt/sources.list
および/etc/apt/sources.list.d/*
のすべてのソースからURLを抽出し、それぞれのリモートリポジトリ内のファイルのタイムスタンプを/var/lib/apt/lists
内のファイルのctimes
と比較できます。しかし、それはIMHOがそれらを再度ダウンロードするよりも時間がかかります(少なくとも私の接続では、50MBは非常に迅速に処理されます)。
あなたの声明は正しくありません:apt update
は、最新バージョンですでにダウンロードされているカタログファイルをフェッチしません。どれどれ:
apt update
の最初の実行:
…
Get:33 http://deb.debian.org/debian sid/main DEP-11 48x48 Icons [3,683 kB]
Get:34 http://deb.debian.org/debian sid/main DEP-11 64x64 Icons [7,474 kB]
Fetched 16.1 MB in 4s (4,496 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
64 packages can be upgraded. Run 'apt list --upgradable' to see them.
ご覧のとおり、apt
は実際に16.1MiB相当のデータをフェッチしました。
2回目の実行:
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://deb.debian.org/debian buster InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease
Hit:4 http://deb.debian.org/debian sid InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
64 packages can be upgraded. Run 'apt list --upgradable' to see them.
ご覧のとおり、データはフェッチされていません。
ここでの「秘訣」は、apt
がアーカイブサーバーに対してHTTP [S]リクエストを行うときに、すでにキャッシュされている各リソースの「最終変更」時刻が含まれていることです。サーバーはそのタイムスタンプを確認し、より新しいバージョンのリソースがない場合は、特別なHTTPステータスコード(「変更されていない」)で応答し、本文はありません。 apt
はそれに気づき、すぐに利用可能なものを使用します。
ご覧のとおり、まだsomeトラフィック(送信要求とそれらへの受信応答)がありますが、次のようになります。