Jak znaleźć liczbę pakietów wymagających aktualizacji z wiersza poleceń?

34

Pracuję nad pewną automatyzacją administrowania systemem za pomocą sieci szkieletowej i chciałbym móc monitorować liczbę pakietów, które wymagają aktualizacji na danym komputerze. To są te same informacje, które widzę, kiedy loguję się po raz pierwszy na maszynie, tj. Ta część:

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

Czy istnieje polecenie, które mogę uruchomić (najlepiej bez sudo), które podaje tylko te informacje?

Patrzyłem na wiązania apt-python, ale wydaje się, że mają wysoką krzywą uczenia się, a także wydają się być bardzo zmienione - chciałbym czegoś, co zadziała przynajmniej tak wyraźnie, jak to możliwe, bez konieczności robić różne rzeczy w różnych wersjach Ubuntu.

KayEss
źródło

Odpowiedzi:

33

Aby uzyskać ten wynik, możesz użyć polecenia

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

lub, jeśli nie chcesz używać sudo,

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

Wyjaśnienie

Te loginpokazy nakładania wyjściowe w pliku /etc/motd, który jest dowiązaniem symbolicznym do /var/run/motd.

Ten ostatni plik jest aktualizowany przez mounted-varrunusługę (patrz /etc/init/mounted-varrun.conf) wywołującą wszystkie skrypty /etc/update-motd.d/w szczególności

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

to z kolei wywołuje skrypt

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

ten skrypt wykonuje różne działania i zapisuje dane wyjściowe w pliku tekstowym

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

EDYTOWAĆ

Jeśli chodzi o część pytania dotyczącą ponownego uruchomienia, uruchom to polecenie

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

nie da danych wyjściowych, jeśli ponowne uruchomienie nie jest wymagane.

enzotib
źródło
Sprawdzam tylko maszynę z 11.04 i byobu pokazuje 44 wymagane aktualizacje. catplik, który sugerujesz, jest pusty, a skrypt, na który wskazujesz, nie istnieje na tym komputerze - czy jest w jakimś pakiecie, który należy zainstalować? Mam /usr/lib/update-manager, ale nie mam update-notifierkatalogu.
KayEss
Testowany na pulpicie 11.04. Te pliki należą do update-notifier-commontego, że został zainstalowany automatycznie podczas nowej instalacji (nie aktualizuj z wersji 10.10).
enzotib
Spojrzałem na więcej maszyn. Dla tych, którzy /var/lib/update-notifier/apt-checkto mają, wygląda na to, że zwraca dwie liczby, tj. 43; 24 (43 aktualizacje, 24 to zabezpieczenia), ale nawet to nie pojawia się na wszystkich moich komputerach. Przypuszczam, że ten plik mógł być przenoszony między pakietami w różnych wersjach.
KayEss
21

Dlaczego nie możesz tego po prostu uruchomić?

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

To właśnie robi / usr / lib / update-notifier / update-motd-updates-available, aby zebrać informacje, przynajmniej w używanej przeze mnie wersji Ubuntu (12.10).

Tom Barron
źródło
Właśnie sprawdziłem Lucid i tam też działa
KayEss
2
Zapisuje swoje wyjście do stderr. Kto by to zrobił?
KayEss
2
Preferuj to podejście, ponieważ całkowicie przesuwa ono cały update-motdpakiet i jego myślenie. Dzięki za przekazanie bezpośredniego polecenia.
jefflunt
3

Poszukuję też sprawdzonej metody sprawdzania aktualizacji w minimalnych kontenerach dokerów, gdy znalazłem komentarz w /usr/lib/update-notifier/apt-check:

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

Umożliwia to sprawdzanie aktualizacji skryptowej bez konieczności instalowania update-notifier-commonpakietu

Simon Sudler
źródło
0

Możesz użyć check_aptwtyczki od monitoring-plugins-basic( Nagios ), z korzyścią uzyskania różnych kodów powrotu w zależności od dostępności aktualizacji:

$ /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

Kody zwrotne mają następujące znaczenie:

  • 0 -> brak dostępnych pakietów do aktualizacji
  • 1 -> pakiety niekrytyczne dostępne do aktualizacji
  • 2 -> dostępne aktualizacje krytyczne

Referencje:

Clauz
źródło