你如何查看可用于更新的软件包?

自由BSD用户加入你们的行列。我被要求照看一个运行10.04 LTS的Ubuntu服务器。
从`/usr/lib/update-notifier/update-motd-updates-available`中可以看到服务器上有一些更新,但是我没有找到一种方法来确定哪些将会被更新。
是否有人能够指导我一下,这样我就可以在运行`apt-get upgrade`时看到将要更新的软件包了?
更新:
目前还不能回答我的问题,所以暂时在这里提供以下内容:
除了下面建议的`apt-get upgrade --dry-run`之外,`/usr/lib/update-notifier/apt-check -p`将列出所有可用更新的软件包。

欢迎加入我们的行列,如果需要进一步的帮助,请尽管使用和利用网站;如果你找到了满意的答案,请在其旁边的绿色勾选框中标记。 - Bruno Pereira
2现在你应该能够回答自己的问题了,因为你已经有足够的声望来解除新用户限制 - jokerdino
看起来需要100个声望或者等待8个小时才能回答自己的问题。 - Jan Geep
2016年,@doru给出的答案完全正确。http://askubuntu.com/a/788049/560610 - jeremysawesome
4个回答

目前(Ubuntu 16.04)可以使用apt list命令与--upgradable标志;

sudo apt update
apt list --upgradable

你将会得到一个包含所有可升级软件包的列表。

1太棒了!这正是我想要看到的 :) - jeremysawesome
apt 在 12.04 版本中是一个未知的命令。 - confiq
1@confiq "APT 1.0于2014年4月1日发布",所以可能您的系统没有进行升级。请尝试运行sudo apt-cache policy apt来查看您安装的apt版本。 - doru
解释说明... - confiq

如果尚未安装,您可以安装aptitude。它是一个在无头设置中管理软件包的绝佳工具。

enter image description here

否则,如果你只想看看在运行某个东西时会发生什么,使用--dry-run参数,它实际上不会执行任何操作,只会告诉你它会做什么:
apt-get man page中获取
-s, --simulate, --just-print, --dry-run, --recon, --no-act
          No action; perform a simulation of events that would occur but do
          not actually change the system. Configuration Item:
          APT::Get::Simulate.

          Simulate prints out a series of lines each one representing a dpkg
          operation, Configure (Conf), Remove (Remv), Unpack (Inst). Square
          brackets indicate broken packages with and empty set of square
          brackets meaning breaks that are of no consequence (rare).
将选项添加到命令中的方式如下
apt upgrade --dry-run

5我改动了你的回答,希望你不介意。 - Bruno Pereira
2有趣的是,apt-get upgrade --dry-run 不需要 sudo,这使得它非常适合自动显示所需的软件包更新。 - dshepherd
更有趣的是,在我的Ubuntu 14.04 LTS上,“apt-get -s update”不接受“-s”...也不接受“--dry-run”,“--no-act”...这是为什么呢? - mBardos
@mBardos 你是否用一个“辅助”脚本替换了你的路径中的 apt-get 命令?请检查 which apt-get 确保它是 /usr/bin/apt-get - Oli
martonb@martonb-ubu:~/work/qt$ apt-get在Ubuntu 14.04 LTS上适用吗? /usr/bin/apt-getmartonb@martonb-ubu:~/work/qt$ apt-get -s update E: 命令行选项's' [来自-s]未知。 - mBardos
当你使用--dry-run时,不需要使用sudo - Ruslan

以下命令将显示您在软件源中可用更新的已安装软件包列表。
dpkg --get-selections | xargs apt-cache policy {} | grep -1 Installed | sed -r 's/(:|Installed: |Candidate: )//' | uniq -u | tac | sed '/--/I,+1 d' | tac | sed '$d' | sed -n 1~2p

1这是一段很棒的命令行魔法! - Teemu Leisti
1不错,但是@sierrasdetandil和@doru的回答以一种简洁而美妙的方式完全相同... - Giuseppe
是的,但aptitude是一个额外的安装程序,而apt不喜欢被编写脚本。 - Mausy5043
@Avinash Raj 你是否打算在命令管道段grep -1 Installed 中包含--ignore-case-i而不是1?你是不是想说的是-A 1,因为它们有相同的输出!我对这种行为感到好奇,是否存在一个可以直接用数字替代的 grep 的占位变量标志! - polendina

另一个选择是使用aptitude搜索词一起使用。
aptitude search '~U'

(注意大写字母'U')
这意味着:“搜索所有已安装并可升级的软件包”。参考:aptitude用户手册 默认情况下,aptitude search会显示每个软件包的名称、描述和一些标志,但您也可以根据需要调整输出。例如,要仅列出软件包名称,命令将是:
aptitude search -F '%p' --disable-columns '~U'

--disable-columns 避免在行尾填充空白字符)