Как узнать количество пакетов, нуждающихся в обновлении, из командной строки?

34

Я работаю над некоторой автоматизацией системного администратора с использованием фабрики, и я хотел бы иметь возможность отслеживать количество пакетов, которые необходимо обновить на данном компьютере. Это та же информация, которую я вижу при первом входе в систему на компьютере, то есть эта часть:

35 packages can be updated.
22 updates are security updates.

Есть ли команда, которую я могу запустить (желательно без sudo), которая дает только эту информацию?

Я посмотрел на привязки apt-python, но они, кажется, имеют высокую кривую обучения, и они также, кажется, сильно изменились - я хотел бы что-то, что будет работать, по крайней мере, так же ясно, как и без необходимости делать разные вещи на разных версиях Ubuntu.

KayEss
источник

Ответы:

33

Чтобы получить этот вывод, вы можете использовать команду

sudo /usr/lib/update-notifier/update-motd-updates-available

или, если вы не хотите использовать sudo,

cat /var/lib/update-notifier/updates-available

объяснение

В loginшоу приложения программы вывод в файле /etc/motd, который является символической ссылкой /var/run/motd.

Этот последний файл обновляется mounted-varrunслужбой (см. /etc/init/mounted-varrun.conf), Вызывая все сценарии /etc/update-motd.d/, в частности,

/etc/update-motd.d/90-updates-available

что в свою очередь вызывает скрипт

/usr/lib/update-notifier/update-motd-updates-available

этот скрипт выполняет различные действия и, наконец, записывает вывод в текстовый файл

/var/lib/update-notifier/updates-available

РЕДАКТИРОВАТЬ

Относительно перезагрузки часть вопроса, запустите эту команду

/usr/lib/update-notifier/update-motd-reboot-required

это не даст никакого выхода, если перезагрузка не требуется.

enzotib
источник
Я просто проверяю машину под управлением 11.04, и byobu показывает 44 необходимых обновления. catпредложенный вами файл пуст, а сценарий, на который вы указали в первую очередь, не существует на этом компьютере - это какой-то пакет, который нужно установить? У меня есть /usr/lib/update-manager, но нет update-notifierкаталога.
KayEss
Проверено на рабочем столе 11.04. Эти файлы принадлежат тому, update-notifier-commonчто было установлено автоматически при новой установке (не обновляется с 10.10).
энзотиб
Я посмотрел на еще несколько машин. Для тех, у кого /var/lib/update-notifier/apt-checkэто выглядит так, как будто он возвращает два числа, то есть 43; 24 (43 обновления, 24 являются безопасными), но даже это не появляется на всех моих машинах. Я предполагаю, что этот файл мог перемещаться между пакетами в разных версиях.
KayEss
21

Почему ты не можешь просто запустить это?

/usr/lib/update-notifier/apt-check --human-readable

Вот что делает / usr / lib / update-notifier / update-motd-updates-available для сбора информации, по крайней мере, в той версии Ubuntu, которую я использую (12.10).

Том Баррон
источник
Только что проверил на Lucid и там тоже работает
KayEss
2
Он записывает свой вывод в stderr. Кто бы это сделал?
KayEss
2
Предпочитаю такой подход, так как он полностью обходит весь update-motdпакет и его мышление. Спасибо, что просто дал прямую команду.
Джеффлунт
3

Я также ищу сценарий для проверки обновлений в минимальных док-контейнерах, когда я нашел комментарий в /usr/lib/update-notifier/apt-check :

apt-get -s -o Debug::NoLocking=true upgrade | grep ^Inst

Это позволяет проверять обновления по сценарию без необходимости установки update-notifier-commonпакета

Саймон Судлер
источник
0

Вы можете использовать check_aptплагин от monitoring-plugins-basic( Nagios ), с преимуществом получения разных кодов возврата в зависимости от того, доступны ли обновления:

$ /usr/lib/nagios/plugins/check_apt
APT WARNING: 18 packages available for upgrade (0 critical updates). |available_upgrades=18;;;0 critical_updates=0;;;0
$ echo $?
1

Коды возврата имеют следующие значения:

  • 0 -> нет доступных пакетов для обновления
  • 1 -> некритические пакеты доступны для обновления
  • 2 -> доступны критические обновления

Ссылки:

Clauz
источник