Wyświetl dostępne aktualizacje, ale nie instaluj ich

Chcę, aby mój skrypt raportowania cron-run powiadamiał mnie o aktualizacjach moich pakietów. Czy jest sposób, aby apt-get podać mi listę dostępnych aktualizacji, ale nie robić nic więcej?

Odpowiedź

apt

W przypadku nowoczesnych wersji apt jest do tego specjalny przełącznik:

apt list --upgradable

apt-get

W przypadku starego apt-get polecenie pokazuje listę pakietów dostępnych do aktualizacji:

# apt-get -u upgrade --assume-no

Z apt-get strona podręcznika :

-u
–show- upgraded
  Pokaż zaktualizowane pakiety; Wydrukuj listę wszystkich pakietów, które mają zostać zaktualizowane. Pozycja w konfiguracji: APT :: Get :: Show-Upgraded.
–assume-no   Automatyczne „nie” dla wszystkich monitów. & lt == Aby uniemożliwić rozpoczęcie instalacji

Komentarze

  • Miałem nadzieję, że można to zrobić bez rootowania
  • Jeśli wpiszesz ” Y ” i naciśniesz Enter, to polecenie zainstaluje aktualizacje. Zdecydowanie polecam dodanie ” -s „, w przeciwnym razie ta odpowiedź jest myląca
  • To jest bardzo zła odpowiedź, ponieważ (bez dodatkowych opcji) polecenie czeka na dane wejściowe i jeśli użytkownik wprowadzi błędne dane wejściowe, pakiet zostanie zainstalowany, który modyfikuje system co nie jest tym, co OP chce (właśnie wydarzyło się w moim systemie)
  • A przy okazji: -u to domyślna opcja apt-get
  • @ThorSummoner ' -s ' zrobi, co chcesz & bez korzenia

Odpowiedź

apt-get --just-print upgrade 

Nie jest tak łatwo czytać , poniżej znajduje się jedna linijka perla do analizowania wyjścia apt-get:

apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}" 

Powinno to wypisać coś takiego:

PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9 

Mam nadzieję, że pomoże to komuś innemu,

Komentarze

  • j tylko do śmiechu: aktualizacja apt-get -s | awk -F ' [] [()] + ' ' / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n „, $ 2, $ 3, $ 4} '
  • Może też wyglądać znacznie ładniej, jeśli użyjesz column w ten sposób: apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | column -s " " -t
  • @AntonioK Wygląda świetnie!
  • I ' Obawiam się, że ten kod Perla zhakuje mój komputer .. .;)
  • @AntonioK Jak sortować nazwy programów alfabetycznie?

Odpowiedź

Inna opcja, zainspirowana enzotibem:

aptitude search "~U" | wc -l

To polecenie użyje aptitude do wypisania nowych pakietów, a następnie wc po prostu policzyć linie.

Na marginesie stwierdziłem, że rozwiązanie enzotib bez pojedynczych cudzysłowów wokół ~U nie działa dla mnie. (Wheezy, ZSH, aptitude 0.6.8.2)

Aktualizacja:

Z nowym apt możesz:

apt list --upgradeable

Komentarze

  • Dzięki za to polecenie apt list było dokładnie tym, czego chciałem.
  • Fajne z tym rozwiązaniem jest to, że nie potrzebujesz sudo / root.

Odpowiedź

Najłatwiej jest:

apt list --upgradeable

Komentarze

  • nie działa na mięcie.
  • To ' szkoda, że to nie działa ' t zwraca różne kody wyjścia w zależności od tego, czy są dostępne aktualizacje, czy nie. Byłoby miło móc użyć tego w skrypcie.

Odpowiedź

Możesz uruchomić

aptitude -F%p --disable-columns search ~U 

lub nieudokumentowane

/usr/lib/update-notifier/apt-check -p; echo 

Inna metoda wykorzystująca apt-get symulacja:

apt-get -s dist-upgrade | awk "/^Inst/ { print $2 }" 

Komentarze

  • To polecenie aptitude działało świetnie i tak nie wymaga roota
  • apt-get -s dist-upgrade działa również dobrze i ma takie same wyniki, gdy przepuszczasz go przez tego awkera
  • dziękuję! to wydostało się z niezłego piekła zależności. próbował dist-upgrade, ale nie stracił niektórych pakietów, więc potrzebował użyć aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') załatwił sprawę!

Odpowiedź

Spójrz na pakiet „apticron”:

apticron – proste narzędzie do wysyłania wiadomości e-mail o oczekujących aktualizacjach pakietów

Apticron to prosty skrypt, który codziennie wysyła e-maile o oczekujących aktualizacjach pakietów, takich jak aktualizacje bezpieczeństwa, prawidłowo obsługując pakiety zatrzymane przez dselect i aptitude.

https://packages.debian.org/buster/apticron

Komentarze

  • Twój link jest uszkodzony …

Odpowiedz

apt-get update && apt-get -s upgrade 

wyświetli listę dostępnych aktualizacji bez faktycznej instalacji.

Pierwsze polecenie aktualizuje pliki indeksu pakietów przed symulowaną (a tym samym -s) aktualizacją gotowy. „-s” wykona symulowaną aktualizację, pokazującą pakiety, które zostaną zainstalowane, ale w rzeczywistości niczego nie zainstalują.

Wręcz przeciwnie, „-u” zamiast „-s” zostanie faktycznie zainstalowane po potwierdzeniu.

Komentarze

  • Opcja symulacji może zostać uruchomiona za pomocą dowolnej z -s, --simulate, --just-print, --dry-run, --recon, --no-act, rekonstrukcji i próbnej pracy osobiste ulubione.

Odpowiedź

Potrzebowałem pełnej informacji o możliwych aktualizacjach, więc użyłem modyfikacji jasonwryan „s odpowiedź:

apt-get -V -u upgrade 

To proste i rozsądnie sformatowane wyjście IMO.

Odpowiedź

Po prostu przefiltruj dane wyjściowe

apt-get update && apt-get -s -V -u upgrade 

, aby w dzienniku były tylko preferowane informacje.

Najprawdopodobniej będziesz potrzebować pięknej części po linii

Następujące pakiety zostaną zaktualizowane:

który ma niewiele spacji na początku.

Komentarze

  • Witam i witam na stronie. W obecnym stanie Twoja odpowiedź jest w zasadzie powtórzeniem istniejących, więc nie dodaje nic nowego. Możesz to poprawić, na przykład wyjaśniając, jak filtrować dane wyjściowe, dodając wyjaśnienie, co robią różne przełączniki itp.

Odpowiedź

apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst " 

to najprostszy sposób na e-maile cron; nie ma iteracji użytkownika, a jeśli nie ma aktualizacji, nie ma wyjścia.

Odpowiedź

Wyszukaj inną osobę on-line, zainspirowany tą odpowiedzią :

 function a { read input;dpkg -l ${input} | grep " ${input} " | awk "{$1=$2=$3=$4="";print $0}" | sed "s/^ *//";unset input;};{ apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}";} | while read -r line; do echo -en "$line $(echo $line | awk "{print $1}" | a )\n"; done;  

Wynik wygląda następująco (kolorowy):

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) Embedded GNU C Library: National Language (locale) data [support] linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Header files for Linux 3.2.0-4-amd64 linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Common header files for Linux 3.2.0-4 sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) Provide limited super user privileges to specific users 

Jeśli nie chcesz, aby krótki opis był taki, użyj tego:

 { apt-get --just-print upgrade 2>&1 | perl -ne "if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}";} | while read -r line; do echo -en "$line\n"; done;  

Dane wyjściowe:

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) 

Komentarze

  • Jedna linijka jest fantastyczna, z wyjątkiem tego, że nie ' nie wyświetla opisu niektórych pakietów.

Odpowiedź

apt-check to prawdopodobnie najbardziej wydajna metoda tworzenia skryptów.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 1 

Bardzo mała modyfikacja pokazuje tylko aktualizacje zabezpieczeń.

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ";" -f 2 

Odpowiedź

Po napisaniu ostrzeżenia w odpowiedzi @jasonwryan „chcę podać własne rozwiązanie:

apt-get dist-upgrade --assume-no 

Niestety, ten nie działa z debian wheezy i musiałem sprawdzić kilka kontenerów lxc, które nadal nie są zaktualizowane. Ten formularz zawsze będzie działał:

apt-get dist-upgrade </dev/null 

Na koniec chciałem również przeformatować wynik. Zdecydowałem się ponownie zmienić wywołanie (używając --dry-run, ale ignorując wszystkie dodatkowe dane wyjściowe), ponieważ wydaje mi się to bezpieczniejsze:

apt-get --dry-run dist-upgrade | awk " BEGIN{p=0} /^The/{p=1;t=$0} /no longer required/{p=0} #optional: /been kept back/{p=0} p && t{print t;t=""} /^ / && p{print $0} " 

Zwroty:

The following packages have been kept back: iproute The following packages will be upgraded: unzip 

Odpowiedź

Lubię tego:

apt-get -qq update && apt-get -qq -s upgrade 

Otrzymasz takie wyjście:

Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all]) Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all]) 

jeśli są dostępne aktualizacje i żadnego, jeśli nie ma „t. W ten sposób możesz po prostu połączyć go z rozwiązaniem monitorującym.

Odpowiedz

Jako odmiana Używam następującego:

apt-get -V -s dist-upgrade \ |grep -E "^ .*=>.*" \ |awk "BEGIN { ul=sprintf("%*s",40,""); gsub(/ /,"-",ul); printf "%-30s %-30s %-30s\n", "Package", "Installed", "Available"; printf "%-30.30s %-30.30s %-30.30s\n", ul, ul, ul; } { printf "%-30s %-30s %-30s\n", $1, substr($2,2), substr($4,1,length($4)-1) }" 

Umieść go w skrypcie o nazwie apt-updates i możesz zadzwonić do apt-updates, aby uzyskać listę wszystkich aktualizacji niezależnie od użytkownika.

Nadal musisz zadzwonić pod numer apt-get update z dostępem uprzywilejowanym.

Komentarze

  • dane wyjściowe pokazują tylko nazwę pakietu (pierwsza kolumna), druga kolumna zawsze jest drukowana = „, a trzecia kolumna jest zawsze pusta. Mam ' m on Mint.

Odpowiedź

Tam ” to narzędzie apt-show-versions . Aby wyświetlić dostępne aktualizacje, uruchom:

apt-show-versions -u 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *