Liste over tilgængelige opdateringer, men installer dem ikke

Jeg vil have, at mit cron-run rapporteringsscript skal underrette mig, hvis der er opdateringer til mine pakker. Er det en måde at få apt-get til at give mig listen over tilgængelige opdateringer, men ikke gøre noget mere?

Svar

apt

For moderne versioner af apt er der en specifik switch til dette:

apt list --upgradable

apt-get

For den gamle apt-get kommando -u switch viser en liste over pakker, der er tilgængelige til opgradering:

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

Fra apt-get man-side :

-u
–show- opgraderet
  Vis opgraderede pakker; Udskriv en liste over alle pakker, der skal opgraderes. Konfigurationspunkt: APT :: Get :: Show-Upgraded.
–assume-no   Automatisk “no” til alle meddelelser. & lt == For at forhindre det i at begynde at installere

Kommentarer

  • Jeg håbede, dette kunne gøres uden rod
  • Hvis du skriver ” Y ” og trykker Enter, denne kommando installerer opdateringer. Jeg vil bestemt anbefale at tilføje ” -s “, ellers er dette svar vildledende
  • Dette er en meget forkert svar, fordi kommandoen (uden yderligere valgmuligheder) venter på input, og hvis brugeren indtaster den forkerte input, er pakken installeret, hvilket ændrer systemet hvilket ikke er hvad OP ønsker (er lige sket på mit system)
  • Og btw: -u er en standardindstilling for apt-get
  • @ThorSummoner ‘ -s ‘ gør hvad du vil & fungerer uden rod

Svar

apt-get --just-print upgrade 

Læses ikke så let , nedenfor er en perl-liner til at analysere apt-get “s output:

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

Dette skal udføre noget som:

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

Forhåbentlig hjælper det en anden,

Kommentarer

  • j ust for latter: apt-get -s opgradering | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n “, $ 2, $ 3, $ 4} ‘
  • Det kunne også være meget mere flot, hvis du bruger column sådan: 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 Ser godt ud!
  • Jeg ‘ er bange for, at denne Perl-kode vil hacke min maskine .. .;)
  • @AntonioK Hvordan sorterer du navnene på programmerne alfabetisk?

Svar

En anden mulighed, inspireret af enzotib:

aptitude search "~U" | wc -l

Denne kommando bruger egnethed til at output de nye pakker og derefter wc at bare tælle linjerne.

På en sidenote fandt jeg, at enzotibs løsning uden de enkelte citater omkring ~U ikke fungerede for mig. (Wheezy, ZSH, aptitude 0.6.8.2)

Opdatering:

Med den nye apt kan du gøre:

apt list --upgradeable

Kommentarer

  • Tak for dette, apt list-kommandoen var præcis, hvad jeg ønskede.
  • Dejligt med denne løsning er, at du ikke har brug for sudo / root.

Svar

Det nemmeste er:

apt list --upgradeable

Kommentarer

  • fungerer ikke på mynte.
  • Det ‘ en skam, det gør det ikke ‘ t returnerer forskellige udgangskoder afhængigt af om der er opgraderinger tilgængelige eller ej. Ville have været rart at kunne bruge dette i et script.

Svar

Du kan køre

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

eller udokumenterede

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

En anden metode, der bruger en apt-get simulering:

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

Kommentarer

  • Denne aptitude-kommando fungerede godt for mig og gjorde ikke kræve root
  • apt-get -s dist-upgrade fungerer også godt og har samme output, når du rør det igennem den awker
  • tak! dette kom ud af en hel del afhængigheds helvede. forsøgte at dist-upgrade men ikke miste nogle pakker, der var nødvendige for at bruge aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') gjorde tricket!

Svar

Se på pakken “apticron”:

apticron – Simple værktøj til mail om afventende pakkeopdateringer

Apticron er et simpelt script, der sender daglige e-mails om afventende pakkeopdateringer såsom sikkerhedsopdateringer, der håndterer pakker korrekt begge ved valg og evne.

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

Kommentarer

  • Dit link er brudt …

Svar

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

viser tilgængelige opdateringer uden egentlig installation.

Første kommando opdaterer pakkeindeksfiler før simuleret (altså -s) opgradering er Færdig. “-s” foretager en simuleret opgradering, der viser pakker, der ville blive installeret, men som faktisk ikke installerer noget.

Tværtimod vil “-u” i stedet for “-s” faktisk installeres efter bekræftelse.

Kommentarer

  • Simuleringsmuligheden kan udløses med en hvilken som helst af -s, --simulate, --just-print, --dry-run, --recon, --no-act, recon og dry-run er min personlige favoritter.

Svar

Jeg havde brug for fuld version af oplysninger om mulige opgraderinger, så jeg brugte en ændring af jasonwryan “s svar:

apt-get -V -u upgrade 

Det er simpelt og IMO med rimeligt formateret output.

Svar

Filtrer bare output fra

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

for kun at have de foretrukne oplysninger i din log.

Mest sandsynligt har du brug for den smukke del efter linjen

Følgende pakker opgraderes:

der har få mellemrum i begyndelsen.

Kommentarer

  • Hej og velkommen til siden. Som det står, er dit svar dybest set en genopvaskning af eksisterende og tilføjer derfor ikke noget nyt. Du kan forbedre det ved f.eks. At forklare, hvordan du filtrerer output, tilføje en forklaring på, hvad de forskellige kontakter gør osv.

Svar

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

er det mest enkle for cron-e-mails; der er ingen bruger-iteration, og hvis der ikke er nogen opdateringer, er der ingen output.

Svar

Jet en anden on-liner, inspireret af dette svar :

 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;  

Outputtet ser sådan ud (farvet):

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 

Hvis du ikke vil have den korte beskrivelse, skal du bruge denne:

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

Output:

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) 

Kommentarer

  • Den ene linie er fantastisk, bortset fra at den ikke ‘ ikke udsender beskrivelsen af nogle pakker.

Svar

apt-check er sandsynligvis den mest effektive scriptmetode.

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

En meget lille ændring viser kun sikkerhedsopdateringerne.

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

Svar

Efter at have skrevet advarsel til @jasonwryans svar, vil jeg give min egen løsning:

apt-get dist-upgrade --assume-no 

Desværre fungerer denne ikke med debian wheezy, og jeg var nødt til at kontrollere nogle lxc-containere, som stadig ikke er opgraderet. Denne formular fungerer altid:

apt-get dist-upgrade </dev/null 

Endelig ville jeg også omformatere output. Jeg valgte at ændre opkaldet igen (ved hjælp af --dry-run men ignorerer al ekstra output), fordi det føles mere sikkert:

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

Returnerer:

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

Svar

Jeg kan godt lide at bruge dette:

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

Du får en output som denne:

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

hvis der er tilgængelige opdateringer , og ingen, hvis der ikke er “t. På denne måde kan du blot parre den med en overvågningsløsning.

Svar

Som en variation Jeg bruger følgende:

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

Stick det i et script ved navn apt-updates, og du kan derefter ringe til apt-updates for at få en liste over alle opdateringer uanset bruger.

Du skal stadig ringe til apt-get update med privilegeret adgang.

Kommentarer

  • output viser kun pakkens navn (første kolonne), anden kolonne udskriver altid = ” og tredje kolonne er altid tom. Jeg ‘ m på Mint.

Svar

Der ” er værktøjet iv id = “d4e04eee9b”

. For at vise tilgængelige opdateringer køres:

apt-show-versions -u 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *