Réponses:
Pour les versions modernes de, aptil existe un commutateur spécifique pour cela:
apt list --upgradable
Pour l'ancienne apt-getcommande, le -ucommutateur affiche une liste des packages disponibles pour la mise à niveau:
# apt-get -u upgrade --assume-no
De la apt-getpage 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
-uest 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,
columncomme 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-getsimulation:
apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'
dist-upgradene 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-runmais 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-updateset vous pourrez ensuite appeler apt-updatespour obtenir une liste de toutes les mises à jour, quel que soit l'utilisateur.
Vous devez toujours appeler apt-get updateavec un accès privilégié.
Il y a l' apt-show-versionsoutil. 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.