Enumerați actualizările disponibile, dar nu le instalați

Vreau ca scriptul meu de raportare cron-run să mă anunțe în caz că există actualizări pentru pachetele mele. Este o modalitate de a-mi face apt-get să-mi dea lista actualizărilor disponibile, dar nu mai faceți nimic?

Răspundeți

apt

Pentru versiunile moderne ale apt există un comutator specific pentru acest lucru:

apt list --upgradable

apt-get

Pentru vechea comandă apt-get comanda afișează o listă de pachete disponibile pentru upgrade:

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

Din apt-get pagina manuală :

-u
–show- actualizat
  Afișați pachetele actualizate; Imprimați o listă cu toate pachetele care urmează să fie actualizate. Element de configurare: APT :: Get :: Show-Upgraded.
–assume-no   Automat „nu” la toate solicitările. & lt == Pentru a împiedica instalarea lui

Comentarii

  • Speram că acest lucru se poate face fără root
  • Dacă tastați ” Y ” și apăsați Enter, această comandă va instala actualizări. Aș recomanda cu siguranță să adăugați ” -s „, altfel acest răspuns este înșelător
  • Acesta este un foarte răspuns greșit deoarece (fără opțiuni suplimentare) comanda așteaptă intrarea și dacă utilizatorul introduce intrarea greșită, pachetul este instalat, ceea ce modifică sistemul ceea ce nu este ceea ce OP vrea (tocmai s-a întâmplat pe sistemul meu)
  • Și btw: -u este o opțiune implicită a apt-get
  • @ThorSummoner ‘ -s ‘ va face ceea ce doriți & fără rădăcină

Răspuns

apt-get --just-print upgrade 

Nu este citit atât de ușor , mai jos este o linie perl one pentru a analiza ieșirea 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"}" 

Aceasta ar trebui să afișeze ceva de genul:

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

Sperăm că va ajuta pe altcineva,

Comentarii

  • j pentru râs: apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n „, $ 2, $ 3, $ 4} ‘
  • De asemenea, ar putea fi mult mai frumos, dacă folosiți column astfel: 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 Arată grozav!
  • Mă ‘ mă tem că acest cod Perl îmi va pirata mașina .. .;)
  • @AntonioK Cum ordonați numele programelor în ordine alfabetică?

Răspuns

O altă opțiune, inspirată de enzotib:

aptitude search "~U" | wc -l

Această comandă va folosi aptitude pentru a genera noile pachete și apoi wc să numere doar liniile.

Într-un sens, am constatat că soluția enzotibului fără ghilimelele din jurul ~U nu a funcționat pentru mine. (Wheezy, ZSH, aptitude 0.6.8.2)

Actualizare:

Cu noul apt puteți face:

apt list --upgradeable

Comentarii

  • Vă mulțumim pentru aceasta, comanda apt list a fost exact ceea ce am dorit.
  • Bine cu această soluție este că nu aveți nevoie de sudo / root.

Răspuns

Cel mai simplu este:

apt list --upgradeable

Comentarii

  • nu funcționează pe mint.
  • Este ‘ păcat că asta nu ‘ nu returnează coduri de ieșire diferite, în funcție de disponibilitatea actualizărilor sau nu. Ar fi fost plăcut să pot folosi acest lucru într-un script.

Răspuns

Puteți rula

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

sau cel nedocumentat

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

O altă metodă care utilizează un apt-get simulare:

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

Comentarii

  • Această comandă aptitude a funcționat excelent pentru mine și a făcut-o nu necesită root
  • apt-get -s dist-upgrade funcționează bine și are aceeași ieșire atunci când îl trimiți prin acel awker
  • mulțumesc! asta a ieșit dintr-un pic de iad de dependență. a încercat să dist-upgrade, dar să nu piardă unele pachete atât de necesare pentru a utiliza aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') a făcut trucul!

Răspuns

Aruncă o privire asupra pachetului „apticron”:

apticron – Simplu instrument pentru a trimite prin e-mail despre actualizările pachetelor în așteptare

Apticron este un script simplu care trimite zilnic e-mailuri despre actualizările pachetelor în așteptare, cum ar fi actualizările de securitate, gestionarea corectă a pachetelor în așteptare prin dselect și aptitudine.

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

Comentarii

  • Link-ul dvs. este rupt …

Răspundeți

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

va afișa actualizările disponibile fără instalarea efectivă.

Prima comandă actualizează fișierele index ale pachetului înainte ca actualizarea simulată (astfel -s) să fie Terminat. „-s” va face o actualizare simulată care va arăta pachetele care ar fi instalate, dar nu vor instala nimic.

Dimpotrivă, „-u” în loc de „-s” s-ar instala după confirmare.

Comentarii

  • Opțiunea de simulare poate fi declanșată cu oricare dintre -s, --simulate, --just-print, --dry-run, --recon, --no-act, recon și run-run sunt favorite personale.

Răspuns

Aveam nevoie de informații despre versiunea completă cu privire la posibilele upgrade-uri, așa că am folosit o modificare a jasonwryan „s answer:

apt-get -V -u upgrade 

Este un rezultat simplu și IMO formatat în mod rezonabil.

Răspuns

Doar filtrați rezultatul

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

pentru a avea doar informațiile preferate în jurnalul dvs.

Cel mai probabil, veți avea nevoie de partea frumoasă după linie

Următoarele pachete vor fi actualizate:

care are puține spații la început.

Comentarii

  • Bună ziua și bine ai venit pe site. În starea actuală, răspunsul dvs. este în esență o refacere a celor existente și, prin urmare, nu adaugă nimic nou. Puteți să-l îmbunătățiți, de exemplu, explicând cum să filtrați ieșirea, adăugând o explicație a ceea ce fac diferitele comutatoare etc.

Răspuns

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

este cel mai simplu pentru e-mailurile cron; nu există nicio iterație a utilizatorului și, dacă nu există actualizări, nu există nicio ieșire.

Răspuns

Jetează un alt on-liner, inspirat de acest răspuns :

 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;  

Rezultatul arată astfel (colorat):

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 

Dacă nu doriți scurta descriere, utilizați-o pe aceasta:

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

Ieșire:

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) 

Comentarii

  • Unul liner este fantastic, cu excepția faptului că nu ‘ nu afișează descrierea unor pachete.

Răspuns

apt-check este probabil cea mai eficientă metodă de scriptare.

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

O modificare foarte mică vă arată doar actualizările de securitate.

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

Răspuns

După ce am scris avertisment la răspunsul lui @jasonwryan, vreau să ofer propria mea soluție:

apt-get dist-upgrade --assume-no 

Din păcate, acesta nu funcționează cu debian wheezy și a trebuit să verific niște containere lxc care încă nu sunt actualizate. Acest formular va funcționa întotdeauna:

apt-get dist-upgrade </dev/null 

În sfârșit, am vrut să reformatez rezultatul. Am ales să schimb apelul din nou (folosind --dry-run, dar ignorând toate rezultatele suplimentare), deoarece se simte mai sigur:

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

Returnează:

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

Răspuns

Îmi place să folosesc acest lucru:

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

Obțineți o ieșire ca aceasta:

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

dacă există actualizări disponibile , și niciunul, dacă nu există. În acest fel, îl puteți cupla pur și simplu cu o soluție de monitorizare.

Răspuns

variantă folosesc următoarele:

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

Lipiți-l într-un script numit apt-updates și puteți apela apoi apt-updates pentru a obține o listă a tuturor actualizărilor indiferent de utilizator.

În continuare trebuie să apelați apt-get update cu acces privilegiat.

Comentarii

  • rezultatul arată doar numele pachetului (prima coloană), a doua coloană imprimă întotdeauna = ” și a treia coloană este întotdeauna goală. ‘ m pe Mint.

Răspuns

Acolo ” s instrumentul apt-show-versions . Pentru a afișa actualizările disponibile rulați:

apt-show-versions -u 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *