Réponses:
Pour les versions modernes de, apt
il existe un commutateur spécifique pour cela:
apt list --upgradable
Pour l'ancienne apt-get
commande, le -u
commutateur affiche une liste des packages disponibles pour la mise à niveau:
# apt-get -u upgrade --assume-no
De la apt-get
page de manuel :
-u
--show-upgraded Afficher les packages mis à niveau; Imprimez une liste de tous les packages à mettre à niveau. Élément de configuration: APT :: Get :: Show-Upgraded.
--assume-no "non" automatique à toutes les invites. <== Pour l'empêcher de commencer à installer
-u
est une option par défaut deapt-get
apt-get --just-print upgrade
N’est pas lu si facilement, en dessous se trouve une doublure en Perl pour analyser la sortie d’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"}'
Cela devrait produire quelque chose comme:
PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9
J'espère que cela aidera quelqu'un d'autre,
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
Une autre option, inspirée par enzotib:
aptitude search '~U' | wc -l
Cette commande utilisera aptitude pour afficher les nouveaux packages, puis wc pour compter uniquement les lignes.
D'un côté, j'ai trouvé que la solution de enzotib 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 maintenant:
apt list --upgradable
Le plus simple est:
apt list --upgradable
Tu peux courir
aptitude -F%p --disable-columns search ~U
ou les sans papiers
/usr/lib/update-notifier/apt-check -p; echo
Une autre méthode utilisant une apt-get
simulation:
apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
dist-upgrade
ne pas perdre certains paquets qu'il fallait utiliser aptitude
. aptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')
a fait le tour!
Jetez un coup d'œil au paquet "apticron":
apticron - Un outil simple pour envoyer un mail sur les mises à jour de paquet en attente
Apticron est un script simple qui envoie des courriels quotidiens sur les mises à jour de paquets en attente, telles que les mises à jour de sécurité, et gère correctement les paquets en attente à la fois par dselect et par aptitude.
apt-get update && apt-get -s upgrade
listera les mises à jour disponibles sans installer réellement.
La première commande met à jour les fichiers d'index des packages avant la mise à niveau simulée (donc -s). "-s" fera une mise à niveau simulée montrant les paquets qui seraient installés mais n'installera en réalité rien.
Au contraire, "-u" au lieu de "-s" serait effectivement installé après confirmation.
-s, --simulate, --just-print, --dry-run, --recon, --no-act
, mes tests personnels et les essais à sec sont mes favoris.
Il suffit de filtrer la sortie de
apt-get update && apt-get -s -V -u upgrade
avoir uniquement 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 d'espaces au début.
Jet un autre on-liner, inspiré par 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 description courte 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;
Sortie:
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)
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
est le plus simple pour les emails cron; il n'y a pas d'itération utilisateur, et s'il n'y a pas de mises à jour, il n'y a pas de sortie.
Après avoir écrit un avertissement à la réponse de @ jasonwryan, je souhaite proposer ma propre solution:
apt-get dist-upgrade --assume-no
Malheureusement, celui-ci ne fonctionne pas avec debian Wheezy et j'ai dû vérifier certains conteneurs Lxc qui ne sont toujours pas mis à niveau. Ce formulaire fonctionnera toujours:
apt-get dist-upgrade </dev/null
Enfin, je voulais aussi reformater la sortie. J'ai choisi de changer à nouveau l'appel (en utilisant --dry-run
mais en ignorant toutes les sorties supplémentaires) car il se sent plus en sécurité:
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}
'
Résultats:
The following packages have been kept back:
iproute
The following packages will be upgraded:
unzip
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 très petite modification ne vous montre que les mises à jour de sécurité.
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2
En variante, j'utilise 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 pourrez ensuite appeler apt-updates
pour obtenir une liste de toutes les mises à jour, quel que soit l'utilisateur.
Vous devez toujours appeler apt-get update
avec un accès privilégié.
Il y a l' apt-show-versions
outil. Pour afficher les mises à jour disponibles, exécutez:
apt-show-versions -u
J'aime 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])
s'il y a des mises à jour disponibles et aucune s'il n'y en a pas. De cette façon, vous pouvez simplement le coupler avec une solution de surveillance.