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
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 utiliseraptitude
.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
-u
est une option par défaut deapt-get