web-dev-qa-db-ja.com

利用可能なアップデートがあるかどうかを知る方法は?

12.04 LTS ubuntuサーバーを実行しています。そして、更新プログラムが利用可能になったときに通知を受けることができればいいと思います。しかし、私は知る方法を見つけることができません...

apt-get manページを見てみました。それから、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
8
Adeline

motd(5)pam_motd(8) および update-motd(5) のmanページを読んでください。私のシステムでは、/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)、人間が読めるフラグを省略すると、「19; 12」がstderrに出力されることがわかります。これでそれをつかむことができます:

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
16
glenn jackman