如何通过命令行仅检查安全更新?

有没有办法从命令行快速检查安全更新的可用性?
在我的12.04系统上,每次运行apt-get update时,都会获取大约20MB的有关可用软件包的数据,并且会访问许多存储库。然后,我可以使用这里描述的任何方法来执行实际的更新。
我的问题只是关于检测安全更新的可用性(即,不使用apt-get/aptitude等执行实际升级):是否有一种可以从命令行快速检查的方法,以提供对问题“是否有安全更新可用?”的是或否的答案。我希望在运行冗长的apt-get update + 实际升级之前运行该检查。
我想每天都不需要下载20MB的数据来知道答案。

请查看以下链接: http://askubuntu.com/questions/65245/apt-get-update-only-for-a-specific-repository http://askubuntu.com/questions/27362/how-to-only-install-updates-from-a-specific-repository - user244
你是说 apt-get update 命令会获取 20MB 的软件包元数据? - Jeremy Kerr
@JeremyKerr:是的,如果你使用主要(archive/us.archive)服务器,它会有影响,因为软件包列表每半小时更新一次......AU上有一两个长贴涉及国际/低速用户对此非常失望的问题。 - ish
@izx:有趣,我刚刚使用澳大利亚镜像(我在.au)运行了一个“apt-get update”的测试;总共下载了1.3MB。 - Jeremy Kerr
2个回答

我的问题只是关于检测安全更新的可用性。
是的,这是可行的,但需要注意的是,当您下次运行正常的apt-get update命令时,它将进行完整的刷新(20 MB的数据量意味着它无论如何都会这样做)。
  • sudo sh -c 'grep precise-security /etc/apt/sources.list > /etc/apt/secsrc.list

  • 然后,如果你运行以下命令,你将看到是否有任何安全更新可用(示例输出):

    sudo sh -c 'apt-get -o Dir::Etc::sourcelist="secsrc.list" \
    -o Dir::Etc::sourceparts="-" update && \
    apt-get --assume-no upgrade'
    
  • 这告诉apt-get临时使用特殊的仅安全源列表,然后运行upgrade,自动回答否。

  • 如果有任何安全更新,请运行适当的apt-get update(这将进行完全刷新),然后升级。

  • 如果你不想解析apt-get的输出,你可以将上述内容制作成一个简单的bash脚本,最后进行grep/exit code检查 :)


这正是我正在寻找的,非常感谢!:) 一个快速的问题:我的/etc/apt/sources.list文件没有提及“partners”仓库(只有“main restricted”,“universe”和“multiverse”),那么我是否还会收到该仓库中软件包的安全更新通知呢? - laramichaels
@laramichaels,partners存储库包含仅有十五个软件包,这些基本上是封装在.deb文件中的专有二进制文件。这些软件包不会发布增量的“安全”更新,我想即使是常规更新也很少(就像Adobe Reader一样)。鉴于合作伙伴更新文件的微小大小(5 kb),我建议将实际存储库(deb http://archive.canonical.com/ubuntu precise partner)添加到secsrc.list中。 - ish
@laramichaels,我还对你之前的问题关于合作伙伴安全更新方面给出了更详细的答案。我认为被接受的答案是错误的,请在有空的时候看一下,并且如果你认为我的答案更好,请接受我的答案。 - ish
1这个部分是用来做什么的?-o Dir::Etc::sourceparts="-" - ChocoDeveloper
@ChocoDeveloper 我猜(在网上搜索后)是因为有一个在线报告的错误,标题为“Bug#449386: 要使用单独的sources.list,OPTIONS需要设置Dir::Etc::SourceParts以及Dir::Etc::SourceList”。 - NoOne

这可能不完全符合问题的要求,但如果你已经运行了apt update,你可以使用以下命令查看可用的安全更新:
sudo apt list --upgradable | grep -e "-security"

这将给你一些类似的东西:
libssl1.0.0/xenial-updates,xenial-security 1.0.2g-1ubuntu4.9 i386 [upgradable from: 1.0.2g-1ubuntu4.8]
openssl/xenial-updates,xenial-security 1.0.2g-1ubuntu4.9 i386 [upgradable from: 1.0.2g-1ubuntu4.8]