Enumere las actualizaciones disponibles pero no las instale

Quiero que mi secuencia de comandos de informes cron-run me notifique en caso de que haya actualizaciones para mis paquetes. ¿Es la forma de hacer que apt-get me dé la lista de actualizaciones disponibles pero no haga nada más?

Responder

apt

Para las versiones modernas de apt hay un interruptor específico para esto:

apt list --upgradable

apt-get

Para el antiguo comando apt-get el -u muestra una lista de paquetes que están disponibles para actualización:

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

Desde apt-get página de manual :

-u
–show- actualizado
  Mostrar paquetes actualizados; Imprima una lista de todos los paquetes que se actualizarán. Elemento de configuración: APT :: Get :: Show-Upgraded.
–assume-no   «no» automático a todas las solicitudes. & lt == Para evitar que comience a instalarse

Comentarios

  • Tenía la esperanza de que esto se pudiera hacer sin root
  • Si escribe » Y » y presiona Enter, este comando instalará las actualizaciones. Definitivamente recomendaría agregar » -s «; de lo contrario, esta respuesta es engañosa
  • Esta es una muy respuesta incorrecta porque (sin opciones adicionales) el comando espera la entrada y si el usuario ingresa la entrada incorrecta, el paquete se instala, que modifica el sistema que no es lo que el OP quiere (acaba de ocurrir en mi sistema)
  • Y por cierto: -u es una opción predeterminada de apt-get
  • @ThorSummoner ‘ -s ‘ hará lo que quieras & funciona sin root

Responder

apt-get --just-print upgrade 

No se lee tan fácilmente , a continuación se muestra una línea de perl para analizar la salida de 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"}" 

Esto debería generar algo como:

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

Con suerte, ayudará a alguien más,

Comentarios

  • j ust para la risa: actualización de apt-get -s | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf » Prog:% s \ tcur:% s \ tavail:% s \ n «, $ 2, $ 3, $ 4} ‘
  • También podría ser mucho más atractivo, si usa column así: 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 ¡Se ve genial!
  • Yo ‘ me temo que este código Perl hackeará mi máquina. .;)
  • @AntonioK ¿Cómo clasifica los nombres de los programas alfabéticamente?

Responder

Otra opción, inspirada en enzotib:

aptitude search "~U" | wc -l

Este comando usará aptitude para generar los nuevos paquetes y luego wc para contar las líneas.

En una nota al margen, encontré que la solución de enzotib sin las comillas simples alrededor de ~U no funcionó para mí. (Wheezy, ZSH, aptitude 0.6.8.2)

Actualización:

Con el nuevo apto puedes hacer:

apt list --upgradeable

Comentarios

  • Gracias por esto, el comando apt list era exactamente lo que quería.
  • Lo bueno con esta solución es que no necesita sudo / root.

Respuesta

La más fácil es:

apt list --upgradeable

Comentarios

  • no funciona en mint.
  • Es ‘ una pena que esto no ‘ t devuelve diferentes códigos de salida dependiendo de si hay actualizaciones disponibles o no. Hubiera sido bueno poder usar esto en un script.

Respuesta

Puede ejecutar

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

o los indocumentados

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

Otro método que usa un apt-get simulación:

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

Comentarios

  • Este comando aptitude funcionó muy bien para mí y no requiere root
  • apt-get -s dist-upgrade también funciona bien y tiene el mismo resultado cuando lo canaliza a través de ese awker
  • ¡gracias! esto salió de un infierno de dependencia. intentaba dist-upgrade pero no perder algunos paquetes, por lo que necesitaba usar aptitude. ¡aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') hizo el truco!

Respuesta

Eche un vistazo al paquete «apticron»:

apticron – Simple herramienta para enviar correos electrónicos sobre actualizaciones de paquetes pendientes

Apticron es un script simple que envía correos electrónicos diarios sobre actualizaciones de paquetes pendientes, como actualizaciones de seguridad, manejando correctamente los paquetes en espera tanto por dselect y aptitude.

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

Comentarios

  • Su enlace está roto …

Responder

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

enumerará las actualizaciones disponibles sin instalarlas realmente.

El primer comando actualiza los archivos de índice del paquete antes de que se realice la actualización simulada (por lo tanto, -s) hecho. «-s» hará una actualización simulada mostrando los paquetes que se instalarían pero que en realidad no instalarán nada.

Por el contrario, «-u» en lugar de «-s» se instalaría después de la confirmación.

Comentarios

  • La opción de simulación se puede activar con cualquiera de -s, --simulate, --just-print, --dry-run, --recon, --no-act, el reconocimiento y la ejecución en seco son mi favoritos personales.

Respuesta

Necesitaba información de la versión completa sobre posibles actualizaciones, así que utilicé una modificación de jasonwryan «s respuesta:

apt-get -V -u upgrade 

Es una salida simple y en mi opinión razonablemente formateada.

Respuesta

Simplemente filtre la salida de

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

para tener solo la información preferida en su registro.

Lo más probable es que necesite la parte hermosa después de la línea

Se actualizarán los siguientes paquetes:

que tiene pocos espacios al principio.

Comentarios

  • Hola y bienvenido al sitio. Tal como está, su respuesta es básicamente una repetición de las existentes y, por lo tanto, no agrega nada nuevo. Puede mejorarlo, por ejemplo, explicando cómo filtrar la salida, agregando una explicación de lo que hacen los distintos conmutadores, etc.

Respuesta

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

es el más simple para los correos electrónicos cron; no hay iteración del usuario, y si no hay actualizaciones, no hay salida.

Responder

Jet otro en línea, inspirado en esta respuesta :

 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;  

El resultado se ve así (coloreado):

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 

Si no desea la descripción breve, utilice esta:

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

Resultado:

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) 

Comentarios

  • La única línea es fantástica, excepto que no ‘ t muestra la descripción de algunos paquetes.

Respuesta

apt-check es probablemente el método de scripting más eficiente.

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

Una pequeña modificación muestra solo las actualizaciones de seguridad.

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

Respuesta

Después de escribir una advertencia a la respuesta de @jasonwryan, quiero proporcionar mi propia solución:

apt-get dist-upgrade --assume-no 

Desafortunadamente, este no funciona con debian wheezy y tuve que comprobar algunos contenedores lxc que todavía no están actualizados. Este formulario siempre funcionará:

apt-get dist-upgrade </dev/null 

Finalmente, también quería reformatear la salida. Elegí cambiar la llamada nuevamente (usando --dry-run pero ignorando todos los resultados adicionales) porque se siente más seguro:

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

Devuelve:

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

Respuesta

Me gusta usar esto:

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

Obtienes un resultado como este:

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

si hay actualizaciones disponibles , y ninguno si no lo hay. De esta manera, simplemente puede combinarlo con una solución de monitoreo.

Responder

Como variación Utilizo lo siguiente:

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

Péguelo en un script llamado apt-updates y luego puede llamar a apt-updates para obtener una lista de todas las actualizaciones independientemente del usuario.

Aún necesita llamar a apt-get update con acceso privilegiado.

Comentarios

  • la salida solo muestra el nombre del paquete (primera columna), la segunda columna siempre imprime = » y la tercera columna siempre está vacía. Yo ‘ estoy en Mint.

Responder

Ahí » s la herramienta apt-show-versions . Para mostrar las actualizaciones disponibles, ejecute:

apt-show-versions -u 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *