检测是否需要 apt-get update

检测是否需要 apt-get update

有没有办法检测是否apt-get update需要运行?

似乎无论何时apt-get update运行,它都会下载最新的列表,即使我已经拥有它们,并且如果我已经有最新的列表,我想避免下载列表。

答案1

/etc/apt/sources.list您可以从和中的所有源中提取 URL /etc/apt/sources.list.d/*,然后将相应远程存储库中的文件时间戳与ctimes您在/var/lib/apt/lists...中的文件的时间戳进行比较,但在我看来,这会比再次下载这些文件花费更长的时间(至少在我的连接上,50MB 可以非常快地处理)。

答案2

您的说法不正确:apt update不获取已在最新版本下载的目录文件;让我们看看:

  1. 首次运行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.1 MiB 的数据。

  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这一点并立即使用已经可用的内容。

如你所见,仍然存在一些流量(传出请求和传入响应),但:

  • 与获取数据时相比,这微不足道。
  • 如果不进行检查,您根本无法确定档案中没有更新的数据。

相关内容