如何知道是否有可用的更新?


8

我正在运行12.04 LTS ubuntu服务器。而且我认为如果能够在更新可用时得到通知会很好。但我找不到方法

我尝试查看apt-get手册页。从中我可以用来apt-get -s upgrade在脚本中获取apt-get输出,而不会阻塞问题。

现在,我清楚地看到了区别:

有可用的更新:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  dpkg dpkg-dev libdpkg-perl
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Conf dpkg (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Inst dpkg-dev [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all]) []
Inst libdpkg-perl [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf libdpkg-perl (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf dpkg-dev (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])

更新不可用:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

但是我不知道如何从那里继续。我如何通过bash脚本(或php脚本)判断是否有可用的更新?

编辑:

这是我当前的bash代码。这没用。

updates_available=`/etc/update-motd.d/90-updates-available`

if [ "${updates_available}" = "0 packages can be updated. 0 updates are security updates." ];
then
   echo "No updates are available"
else
   echo "There are updates available"
fi

好吧,这只会说0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.是否没有更新。
Nattgew 2014年

Answers:


18

阅读手册页 motd(5)pam_motd(8)update-motd(5)。在我的系统上,/etc/update-motd.d/90-updates-available调用/usr/lib/update-notifier/update-motd-updates-available时在登录时显示以下内容:

19 packages can be updated.
12 updates are security updates.

深入研究,“ ...- updates-available”脚本调用/usr/lib/update-notifier/apt-check --human-readable。如果您阅读该内容(python),将会看到,如果您省略了人类可读的标志,它将向stderr输出“ 19; 12”。我们可以这样:

IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
echo $updates
echo $security_updates 
19
12

现在您可以说:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi

我可以使用它并测试if [ / etc / update-motd.d / 90-updates-available` =“可以更新0个软件包。0个更新是安全更新。” ]; 然后... fi`
Adeline

不幸的是,该检查不起作用(我在上次答复中添加了被遗忘的引号。)我怀疑与新行有关。我已使用从您的回复中获得的代码更新了我的帖子。
Adeline 2014年

精致的答案。
glenn jackman 2014年

很棒的答案,@ glennjackman。我打算用google.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)回答
0xSheepdog 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.