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
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 utilizaaptitude
.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
-u
este o opțiune implicită aapt-get