Elenca gli aggiornamenti disponibili ma non installarli

Voglio che il mio script di report eseguito da cron mi avvisi nel caso in cui ci siano aggiornamenti per i miei pacchetti. È un modo per farmi apt-get fornirmi lelenco degli aggiornamenti disponibili ma non fare altro?

Risposta

apt

Per le versioni moderne di apt cè un interruttore specifico per questo:

apt list --upgradable

apt-get

Per il vecchio comando apt-get, il mostra un elenco di pacchetti disponibili per laggiornamento:

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

Dal apt-get pagina man :

-u
–show- aggiornato
  Mostra i pacchetti aggiornati; stampa un elenco di tutti i pacchetti che devono essere aggiornati. Elemento di configurazione: APT :: Get :: Show-Upgraded.
–assume-no   “no” automatico a tutti i prompt. & lt == Per impedire lavvio dellinstallazione di

Commenti

  • Speravo che fosse possibile farlo senza root
  • Se digiti ” Y ” e premi Invio, questo comando installerà gli aggiornamenti. Consiglio vivamente di aggiungere ” -s “, altrimenti questa risposta è fuorviante
  • Questo è un risposta molto sbagliata perché (senza opzioni aggiuntive) il comando attende linput e se lutente inserisce linput sbagliato, viene installato il pacchetto, che modifica il sistema che non è quello che lOP vuole (appena accaduto sul mio sistema)
  • E btw: -u è unopzione predefinita di apt-get
  • @ThorSummoner ‘ -s ‘ farà quello che vuoi & funziona senza root

Risposta

apt-get --just-print upgrade 

Non si legge così facilmente , di seguito è riportato un perl one liner per analizzare loutput di 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"}" 

Questo dovrebbe produrre qualcosa come:

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

Si spera che possa aiutare qualcun altro,

Commenti

  • j per ridere: apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf ” Prog:% s \ tcur:% s \ tavail:% s \ n “, $ 2, $ 3, $ 4} ‘
  • Potrebbe anche essere molto più bello se utilizzi column in questo modo: 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 Sembra fantastico!
  • ‘ temo che questo codice Perl possa violare la mia macchina .. .;)
  • @AntonioK Come ordinate alfabeticamente i nomi dei programmi?

Risposta

Unaltra opzione, ispirata da enzotib:

aptitude search "~U" | wc -l

Questo comando userà aptitude per produrre i nuovi pacchetti e poi wc contare solo le linee.

In una nota a margine, ho scoperto che la soluzione di enzotib senza le virgolette singole attorno a ~U non funzionava per me. (Wheezy, ZSH, aptitude 0.6.8.2)

Aggiornamento:

Con il nuovo apt puoi fare:

apt list --upgradeable

Commenti

  • Grazie per questo, il comando apt list era esattamente quello che volevo.
  • Bello con questa soluzione è che non hai bisogno di sudo / root.

Risposta

La più semplice è:

apt list --upgradeable

Commenti

  • non funziona su mint.
  • ‘ è un peccato che non ‘ t restituisce codici di uscita diversi a seconda che siano disponibili o meno aggiornamenti. Sarebbe stato bello poterlo utilizzare in uno script.

Risposta

Puoi eseguire

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

o non documentato

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

Un altro metodo che utilizza un apt-get simulazione:

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

Commenti

  • Questo comando aptitude ha funzionato alla grande per me e ha funzionato non richiede root
  • apt-get -s dist-upgrade funziona bene e ha lo stesso output quando lo installi attraverso quellimbarazzo
  • grazie! questo è uscito da un po di inferno di dipendenza. stava cercando di dist-upgrade ma non perdeva alcuni pacchetti, quindi era necessario utilizzare aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') ha funzionato!

Risposta

Dai unocchiata al pacchetto “apticron”:

apticron – Semplice strumento per inviare e-mail sugli aggiornamenti dei pacchetti in sospeso

Apticron è un semplice script che invia quotidianamente e-mail sugli aggiornamenti dei pacchetti in sospeso come gli aggiornamenti di sicurezza, gestendo correttamente i pacchetti in attesa di dselect e aptitude.

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

Commenti

  • Il tuo link è interrotto …

Risposta

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

elencherà gli aggiornamenti disponibili senza effettivamente installarli.

Il primo comando aggiorna i file di indice del pacchetto prima dellaggiornamento simulato (quindi -s) fatto. “-s” eseguirà un aggiornamento simulato mostrando i pacchetti che verrebbero installati ma in realtà non installerà nulla.

Al contrario “-u” invece di “-s” verrebbe effettivamente installato dopo la conferma.

Commenti

  • Lopzione di simulazione può essere attivata con uno qualsiasi dei -s, --simulate, --just-print, --dry-run, --recon, --no-act, ricognizione e prova a secco sono i miei preferiti personali.

Risposta

Avevo bisogno di informazioni sulla versione completa sui possibili aggiornamenti, quindi ho usato una modifica di jasonwryan “La risposta:

apt-get -V -u upgrade 

È un output semplice e con un formato IMO ragionevole.

Risposta

Filtra loutput di

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

per avere solo le informazioni preferite nel tuo registro.

Molto probabilmente, avrai bisogno della bella parte dopo la riga

Verranno aggiornati i seguenti pacchetti:

con pochi spazi allinizio.

Commenti

  • Ciao e benvenuto nel sito. Allo stato attuale, la tua risposta è fondamentalmente un rimaneggiamento di quelli esistenti e quindi non aggiunge nulla di nuovo. Potresti migliorarlo, ad esempio, spiegando come filtrare loutput, aggiungendo una spiegazione di cosa fanno i vari interruttori ecc.

Risposta

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

è il più semplice per le email di cron; non cè iterazione utente e se non ci sono aggiornamenti non cè output.

Risposta

Lancia un altro on-liner, ispirato da questa risposta :

 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;  

Loutput è simile a questo (colorato):

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 

Se non vuoi la breve descrizione usa questa:

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

Risultato:

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) 

Commenti

  • Lunica riga è fantastica, tranne per il fatto che ‘ non restituisce la descrizione di alcuni pacchetti.

Risposta

apt-check è probabilmente il metodo di scripting più efficiente.

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

Una piccola modifica mostra solo gli aggiornamenti di sicurezza.

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

Risposta

Dopo aver scritto un avviso alla risposta di @jasonwryan, desidero fornire la mia soluzione:

apt-get dist-upgrade --assume-no 

Sfortunatamente, questo non funziona con Debian wheezy e ho dovuto controllare alcuni contenitori lxc che non sono ancora aggiornati. Questo modulo funzionerà sempre:

apt-get dist-upgrade </dev/null 

Infine, volevo anche riformattare loutput. Ho scelto di cambiare di nuovo la chiamata (utilizzando --dry-run ma ignorando tutto loutput aggiuntivo) perché mi sembra più sicuro:

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

Restituisce:

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

Risposta

Mi piace usare questo:

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

Ottieni un output come questo:

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

se sono disponibili aggiornamenti e nessuno se non cè “t. In questo modo puoi semplicemente accoppiarlo con una soluzione di monitoraggio.

Risposta

Come un variante uso la seguente:

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

Inseriscilo in uno script chiamato apt-updates e puoi quindi chiamare apt-updates per ottenere un elenco di tutti gli aggiornamenti indipendentemente dallutente.

È comunque necessario chiamare apt-get update con accesso privilegiato.

Commenti

  • loutput mostra solo il nome del pacchetto (prima colonna), la seconda colonna mostra sempre = ” e la terza colonna è sempre vuota. ‘ m su Mint.

Rispondi

Lì ” è lo strumento apt-show-versions . Per mostrare gli aggiornamenti disponibili, esegui:

apt-show-versions -u 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *