Seznam dostupných aktualizací, ale neinstalujte je

Chci, aby mě můj skript pro hlášení cron-run informoval o případných aktualizacích pro mé balíčky. Je způsob, jak mi apt-get poskytnout seznam dostupných aktualizací, ale nedělat nic víc?

Odpovědět

apt

Pro moderní verze apt je k tomu specifický přepínač:

apt list --upgradable

apt-get

U starého apt-get příkazu zobrazuje seznam balíčků, které jsou k dispozici pro upgrade:

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

Z apt-get manuálová stránka :

-u
–show- upgradováno
  Zobrazit upgradované balíčky; Vytisknout seznam všech balíčků, které mají být upgradovány. Položka konfigurace: APT :: Get :: Show-Upgraded.
–assume-no   Automaticky „ne“ na všechny výzvy. & lt == Aby se zabránilo zahájení instalace

Komentáře

  • Doufal jsem, že to bude možné udělat bez root
  • Pokud zadáte “ Y “ a stisknete Enter, tento příkaz nainstaluje aktualizace. Určitě bych doporučil přidat “ -s „, jinak je tato odpověď zavádějící
  • Toto je velmi nesprávná odpověď, protože (bez dalších možností) příkaz čeká na vstup a pokud uživatel zadá nesprávný vstup, balíček se nainstaluje, který upravuje systém což není to, co OP chce (právě se stalo v mém systému)
  • A btw: -u je výchozí možnost apt-get
  • @ThorSummoner ‚ -s ‚ udělá to, co chcete & funguje bez root

Odpověď

apt-get --just-print upgrade 

Není tak snadno čitelný , níže je perl jedna podšívka pro analýzu výstupu 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"}" 

Mělo by se zobrazit něco jako:

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

Doufejme, že to pomůže někomu jinému,

Komentáře

  • j usměj se: upgrade apt-get -s | awk -F ‚ [] [()] + ‚ ‚ / ^ Inst / {printf “ Prog:% s \ tcur:% s \ tavail:% s \ n „, $ 2, $ 3, $ 4} ‚
  • Mohlo by to být také mnohem hezčí, pokud použijete column takto: 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 Vypadá skvěle!
  • Obávám se

, že tento kód Perl hackne můj stroj .. .;)

  • @AntonioK Jak seřadíte názvy programů podle abecedy?
  • Odpověď

    Další možnost, inspirovaná enzotibem:

    aptitude search "~U" | wc -l

    Tento příkaz použije aptitude k výstupu nových balíčků a poté wc jen spočítat řádky.

    Na sidenote jsem zjistil, že řešení enzotibu bez jednoduchých uvozovek kolem ~U pro mě nefungovalo. (Wheezy, ZSH, aptitude 0.6.8.2)

    Aktualizace:

    S novým apt můžete:

    apt list --upgradeable

    Komentáře

    • Díky za to byl příkaz apt list přesně to, co jsem chtěl.
    • Pěkné u tohoto řešení je, že nepotřebujete sudo / root.

    Odpověď

    Nejjednodušší je:

    apt list --upgradeable

    Komentáře

    • na mincovně nefunguje.
    • To je ‚ ostuda, ‚ Nevrací různé kódy ukončení podle toho, zda jsou k dispozici aktualizace nebo ne. Bylo by hezké, kdybychom to mohli použít ve skriptu.

    Odpovědět

    Můžete spustit

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

    nebo nezdokumentovaný

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

    Další způsob využívající apt-get simulace:

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

    Komentáře

    • Tento příkaz aptitude pro mě fungoval skvěle a udělal nevyžadovat root
    • dist-upgrade apt-get -s funguje také dobře a má stejný výstup, když ho procházíš skrz ten šílenec
    • děkuji! tohle se dostalo z pekla závislostí. se pokoušel dist-upgrade, ale neztratil některé balíčky, takže bylo potřeba použít aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') to zvládl!

    Odpověď

    Podívejte se na balíček „apticron“:

    apticron – jednoduchý nástroj pro zasílání e-mailů o nevyřízených aktualizacích balíčků

    Apticron je jednoduchý skript, který denně odesílá e-maily o nevyřízených aktualizacích balíků, jako jsou aktualizace zabezpečení, se správným zpracováním balíčků při pozastavení dselect a aptitude.

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

    Komentáře

    • Váš odkaz je nefunkční …

    Odpovědět

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

    zobrazí seznam dostupných aktualizací bez skutečné instalace.

    První příkaz aktualizuje indexové soubory balíčku před simulovanou (tedy -s) aktualizací Hotovo. „-s“ provede simulovaný upgrade zobrazující pakety, které by byly nainstalovány, ale ve skutečnosti nic nenainstalují.

    Naopak „-u“ místo „-s“ by se po potvrzení skutečně nainstalovalo.

    Komentáře

    • Možnost simulace může být spuštěna kterýmkoli z -s, --simulate, --just-print, --dry-run, --recon, --no-act, recon a dry-run jsou moje osobní oblíbené.

    Odpověď

    Potřeboval jsem úplné informace o verzi možných upgradů, proto jsem použil modifikaci jasonwryan „s answer:

    apt-get -V -u upgrade 

    Je to jednoduchý a přiměřeně formátovaný výstup IMO.

    Odpověď

    Stačí filtrovat výstup

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

    , abyste ve svém protokolu měli pouze preferované informace.

    S největší pravděpodobností budete po řádku potřebovat krásnou část

    Budou upgradovány následující balíčky:

    s několika mezerami na začátku.

    Komentáře

    • Ahoj, vítejte na stránkách. V současné podobě je vaše odpověď v zásadě opakováním existujících a nepřidává tedy nic nového. Mohli byste to vylepšit například vysvětlením, jak filtrovat výstup, přidáním vysvětlení toho, co jednotlivé přepínače dělají atd.

    Odpověď

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

    je nejjednodušší pro e-maily cron; neexistuje žádná uživatelská iterace a pokud nejsou k dispozici žádné aktualizace, není žádný výstup.

    Odpovědět

    Jet další online, inspirováno touto odpovědí :

     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;  

    Výstup vypadá takto (barevně):

    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 

    Pokud si nepřejete krátký popis, použijte tento:

     { 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;  

    Výstup:

    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) 

    Komentáře

    • Jedna podšívka je fantastická, až na to, že nevypíše popis některých balíků

    . / li>

    Odpověď

    apt-check je pravděpodobně nejúčinnější skriptovací metoda.

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

    Velmi malá úprava zobrazí pouze aktualizace zabezpečení.

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

    Odpověď

    Po napsání upozornění na odpověď @jasonwryan chci poskytnout vlastní řešení:

    apt-get dist-upgrade --assume-no 

    Toto bohužel nefunguje s debian wheezy a musel jsem zkontrolovat některé lxc kontejnery, které stále nejsou upgradovány. Tento formulář bude vždy fungovat:

    apt-get dist-upgrade </dev/null 

    Nakonec jsem také chtěl přeformátovat výstup. Rozhodl jsem se změnit hovor znovu (pomocí --dry-run, ale ignoruji všechny další výstupy), protože se cítím bezpečněji:

    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} " 

    Vrací:

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

    Odpovědět

    Rád jej používám:

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

    Získáte výstup jako tento:

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

    pokud jsou k dispozici aktualizace , a žádný, pokud neexistuje „t. Tímto způsobem ho můžete jednoduše spojit s monitorovacím řešením.

    Odpovědět

    Jako variace Používám následující:

    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) }" 

    Vložte jej do skriptu s názvem apt-updates a můžete zavolat apt-updates pro získání seznamu všech aktualizací bez ohledu na uživatele.

    Stále je třeba volat apt-get update s privilegovaným přístupem.

    Komentáře

    • výstup zobrazuje pouze název balíčku (první sloupec), druhý sloupec vždy vytiskne = “ a třetí sloupec je vždy prázdný. ‚ m na mincovně.

    odpověď

    tam “ pomocí nástroje apt-show-versions . Dostupné aktualizace zobrazíte spuštěním:

    apt-show-versions -u 

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *