列出可用更新但不安装它们

Mor*_*ris 271 apt

如果我的包有更新,我希望我的 cron-run 报告脚本通知我。有没有办法让apt-get我提供可用更新的列表,但不要再做任何事情?

jas*_*yan 310

易于

对于现代版本,apt有一个特定的开关:

apt list --upgradable

apt-get

对于旧apt-get命令,-u开关显示可用于升级的软件包列表:

# apt-get -u upgrade --assume-no
Run Code Online (Sandbox Code Playgroud)

apt-get手册页

-u
--show-upgraded
 显示升级包;打印出所有要升级的包的列表。配置项:APT::Get::Show-Upgraded。
--assume-no  对所有提示自动“否”。<== 防止它开始安装

  • 如果您键入“Y”并按 Enter,则此命令_将_安装更新。我肯定会建议添加“-s”,否则这个答案会产生误导 (19认同)
  • 我希望这可以在没有 root 的情况下完成 (5认同)
  • 这是一个*非常*错误的答案,因为(没有附加选项)命令等待输入,如果用户输入错误的输入,则安装包,*它修改系统*这不是OP想要的(只是发生在我的系统) (5认同)

Tom*_*Tom 71

apt-get --just-print upgrade
Run Code Online (Sandbox Code Playgroud)

不是那么容易阅读,下面是一个 perl one liner 来解析 apt-get 的输出:

apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}'
Run Code Online (Sandbox Code Playgroud)

这应该输出如下内容:

PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9
Run Code Online (Sandbox Code Playgroud)

希望它会帮助别人,

  • 如果像这样使用`column`,它也可能看起来更漂亮:`apt-get --just-print upgrade 2&gt;&amp;1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\. ,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 已安装:$2 可用:$3\n"}' | 列 -s " " -t` (9认同)
  • 我担心这个 Perl 代码会侵入我的机器...;) (2认同)

小智 40

另一种选择,受 enzotib 启发:

aptitude search '~U' | wc -l

此命令将使用 aptitude 输出新包,然后使用 wc 来计算行数。

在旁注中,我发现 enzotib 没有单引号的解决方案~U对我不起作用。(喘息,ZSH,资质 0.6.8.2)

更新 :

使用新的 apt,您可以执行以下操作:

apt list --upgradeable


小智 30

最简单的是:

apt list --upgradeable

  • 遗憾的是,根据是否有可用的升级,这不会返回不同的退出代码。能够在脚本中使用它会很好。 (2认同)

enz*_*tib 21

你可以跑

aptitude -F%p --disable-columns search ~U
Run Code Online (Sandbox Code Playgroud)

或无证

/usr/lib/update-notifier/apt-check -p; echo
Run Code Online (Sandbox Code Playgroud)

另一种使用apt-get模拟的方法:

apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
Run Code Online (Sandbox Code Playgroud)


f4m*_*4m8 12

看看包“apticron”:

apticron - 邮寄有关待定软件包更新的简单工具

Apticron 是一个简单的脚本,它每天发送有关待处理软件包更新(例如安全更新)的电子邮件,通过 dselect 和 aptitude 正确处理保留的软件包。

https://packages.debian.org/buster/apticron


小智 12

apt-get update && apt-get -s upgrade
Run Code Online (Sandbox Code Playgroud)

将列出可用更新而无需实际安装。

第一个命令在模拟(因此 -s)升级完成之前更新包索引文件。“-s”将进行模拟升级,显示将安装但实际上不会安装任何内容的数据包。

相反,“-u”而不是“-s”将在确认后实际安装。

  • 模拟选项可以用`-s、--simulate、--just-print、--dry-run、--recon、--no-act`中的任何一个触发,recon和dry-run是我个人的最爱。 (2认同)

小智 10

我需要有关可能升级的完整版本信息,所以我使用了 jasonwryan 答案的修改:

apt-get -V -u upgrade
Run Code Online (Sandbox Code Playgroud)

它很简单,而且 IMO 的输出格式合理。


use*_*275 5

apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
Run Code Online (Sandbox Code Playgroud)

对于 cron 电子邮件来说是最简单的;没有用户迭代,如果没有更新,就没有输出。