Répertoriez les mises à jour disponibles mais ne les installez pas

Je veux que mon script de création de rapports cron-run minforme au cas où il y aurait des mises à jour pour mes paquets. Est-ce que le moyen de faire en sorte que apt-get me donne la liste des mises à jour disponibles mais ne faites rien de plus?

Réponse

apt

Pour les versions modernes de apt, il existe un commutateur spécifique pour cela:

apt list --upgradable

apt-get

Pour lancienne commande apt-get, la affiche une liste des packages disponibles pour la mise à niveau:

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

À partir de apt-get page de manuel :

-u
–show- mis à jour
  Afficher les packages mis à niveau; Imprimer une liste de tous les packages à mettre à niveau. Élément de configuration: APT :: Get :: Show-Upgraded.
–assume-no   « Non » automatique à toutes les invites. & lt == Pour lempêcher de démarrer linstallation

Commentaires

  • Jespérais que cela pourrait être fait sans racine
  • Si vous tapez  » Y  » et appuyez sur Entrée, cette commande va installer les mises à jour. Je recommanderais certainement dajouter  » -s « , sinon cette réponse est trompeuse
  • Ceci est un très mauvaise réponse car (sans options supplémentaires) la commande attend lentrée et si lutilisateur entre la mauvaise entrée, le package est installé, ce qui modifie le système ce qui nest pas ce que lOP veut (vient darriver sur mon système)
  • Et btw: -u est une option par défaut de apt-get
  • @ThorSummoner ‘ -s ‘ fera ce que vous voulez & fonctionne sans racine

Réponse

apt-get --just-print upgrade 

Ne se lit pas si facilement , ci-dessous est un perl one liner pour analyser la sortie dapt-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"}" 

Cela devrait afficher quelque chose comme:

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

Jespère que cela aidera quelquun dautre,

Commentaires

  • j ust pour rire: apt-get -s upgrade | awk -F ‘ [] [()] + ‘ ‘ / ^ Inst / {printf  » Prog:% s \ tcur:% s \ tavail:% s \ n « , 2 $, 3 $, 4 $} ‘
  • Cela pourrait aussi être beaucoup plus joli, si vous utilisez column comme ceci: 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 Ça a lair génial!
  • Jai ‘ peur que ce code Perl ne pirate ma machine. .;)
  • @AntonioK Comment trier les noms des programmes par ordre alphabétique?

Réponse

Une autre option, inspirée par enzotib:

aptitude search "~U" | wc -l

Cette commande utilisera aptitude pour sortir les nouveaux paquets puis wc pour juste compter les lignes.

Sur une note latérale, jai trouvé que la solution denzotib sans les guillemets simples autour du ~U ne fonctionnait pas pour moi. (Wheezy, ZSH, aptitude 0.6.8.2)

Mise à jour:

Avec le nouvel apt, vous pouvez faire:

apt list --upgradeable

Commentaires

  • Merci pour cela, la commande apt list était exactement ce que je voulais.
  • Bien avec cette solution, cest que vous navez pas besoin de sudo / root.

Réponse

Le plus simple est:

apt list --upgradeable

Commentaires

  • ne fonctionne pas sur la menthe.
  • Cest ‘ dommage que cela ne fonctionne pas ‘ t renvoie des codes de sortie différents selon quil y a des mises à jour disponibles ou non. Cela aurait été bien de pouvoir utiliser ceci dans un script.

Answer

Vous pouvez exécuter

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

ou les sans-papiers

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

Une autre méthode utilisant un apt-get simulation:

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

Commentaires

  • Cette commande aptitude a très bien fonctionné pour moi et a fonctionné pas besoin de root
  • apt-get -s dist-upgrade fonctionne bien aussi et a le même résultat lorsque vous le faites passer par cet awker
  • merci! cela est sorti de lenfer de la dépendance. essayait de dist-upgrade mais de ne pas perdre certains paquets nécessaires pour utiliser aptitude. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }') a fait laffaire!

Réponse

Jetez un œil au paquet « apticron »:

apticron – Simple outil pour envoyer des e-mails sur les mises à jour de packages en attente

Apticron est un script simple qui envoie des e-mails quotidiens sur les mises à jour de packages en attente telles que les mises à jour de sécurité, gérant correctement les packages en attente à la fois par dselect et aptitude.

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

Commentaires

  • Votre lien est rompu …

Réponse

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

listera les mises à jour disponibles sans réellement les installer.

La première commande met à jour les fichiers dindex du package avant la mise à niveau simulée (donc -s) Fini. « -s » fera une mise à jour simulée montrant les paquets qui seraient installés mais qui ninstalleraient rien.

Au contraire, « -u » au lieu de « -s » serait installé après confirmation.

Commentaires

  • Loption de simulation peut être déclenchée avec lun des -s, --simulate, --just-print, --dry-run, --recon, --no-act, la reconnaissance et lexécution à sec sont mes favoris personnels.

Réponse

Javais besoin dinformations sur la version complète des mises à jour possibles, jai donc utilisé une modification de jasonwryan « Réponse de »:

apt-get -V -u upgrade 

Cest une sortie simple et au format OMI raisonnablement formaté.

Réponse

Il suffit de filtrer la sortie de

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

pour navoir que les informations préférées dans votre journal.

Très probablement, vous aurez besoin de la belle partie après la ligne

Les paquets suivants seront mis à jour:

qui a peu despaces au début.

Commentaires

  • Bonjour et bienvenue sur le site. Dans létat actuel des choses, votre réponse est essentiellement une refonte de celles existantes et najoute donc rien de nouveau. Vous pouvez laméliorer, par exemple, en expliquant comment filtrer la sortie, en ajoutant une explication de ce que font les différents commutateurs, etc.

Answer

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

est le plus simple pour les e-mails cron; il ny a pas ditération utilisateur, et sil ny a pas de mises à jour, il ny a pas de sortie.

Réponse

Jetez un autre en ligne, inspiré de cette réponse :

 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;  

La sortie ressemble à ceci (en couleur):

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 vous ne voulez pas la courte description, utilisez celle-ci:

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

Résultat:

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) 

Commentaires

  • La seule doublure est fantastique, sauf quelle ne fournit ‘ la description de certains paquets.

Answer

apt-check est probablement la méthode de script la plus efficace.

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

Une toute petite modification ne vous montre que les mises à jour de sécurité.

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

Réponse

Après avoir écrit un avertissement à la réponse de @jasonwryan « , je souhaite fournir ma propre solution:

apt-get dist-upgrade --assume-no 

Malheureusement, celui-ci ne fonctionne pas avec Debian Wheezy et jai dû vérifier certains conteneurs lxc qui ne sont toujours pas mis à jour. Ce formulaire fonctionnera toujours:

apt-get dist-upgrade </dev/null 

Enfin, je voulais aussi reformater la sortie. Jai choisi de modifier à nouveau lappel (en utilisant --dry-run mais en ignorant toute sortie supplémentaire) car cela me semble plus sûr:

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

Renvoie:

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

Réponse

Jaime utiliser ceci:

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

Vous obtenez une sortie comme celle-ci:

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

sil y a des mises à jour disponibles , et aucun sil ny en a pas. De cette façon, vous pouvez simplement lassocier à une solution de surveillance.

Réponse

En tant que variante Jutilise ce qui suit:

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

Collez-le dans un script nommé apt-updates et vous pouvez alors appeler apt-updates pour obtenir une liste de toutes les mises à jour quel que soit lutilisateur.

Vous devez toujours appeler apt-get update avec un accès privilégié.

Commentaires

  • la sortie affiche uniquement le nom du package (première colonne), la deuxième colonne imprime toujours =  » et la troisième colonne est toujours vide. Je ‘ m sur la menthe.

Réponse

Là  » s loutil apt-show-versions . Pour afficher les mises à jour disponibles, exécutez:

apt-show-versions -u 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *