Comment mettre à jour un seul paquet en utilisant apt-get?

827

Comment mettre à jour un seul paquet? Pour autant que man apt-getdit apt-get upgradene prend pas un paquet / liste de paquets comme paramètre:

améliorer

La mise à niveau est utilisée pour installer les dernières versions de tous les packages actuellement installés sur le système à partir des sources énumérées dans /etc/apt/sources.list. Les packages actuellement installés avec les nouvelles versions disponibles sont récupérés et mis à niveau; en aucun cas les packages actuellement installés ne sont supprimés, ou les packages non déjà installés ne sont récupérés et installés. Les nouvelles versions des packages actuellement installés qui ne peuvent pas être mises à niveau sans modifier le statut d'installation d'un autre package resteront à leur version actuelle. Une mise à jour doit d'abord être effectuée pour qu'apt-get sache que de nouvelles versions des paquets sont disponibles.

lurscher
la source

Réponses:

1029

Vous devez juste faire apt-get install --only-upgrade <packagename>. Cela ne mettra à jour que ce seul paquet, et seulement s'il est installé.

Si vous souhaitez installer le package s'il n'existe pas, ou le mettre à niveau si tel est le cas, vous pouvez le laisser --only-upgrade.

Josh
la source
88
apt-get install --only-upgrade <packagename>n'installera pas de nouveaux paquets
taneli
9
La installcommande mettra-t-elle également à niveau les dépendances de ce seul package si nécessaire?
Pino
7
@Pino Ça va, ça a du sens de le faire. Que se passe-t-il si la version vers laquelle vous effectuez la mise à niveau dépend d'une version plus récente d'un autre package? Vous êtes blessé si vous n'améliorez pas les deux. C'est pourquoi installla commande est la bonne, même si cela semble contre-intuitif.
Matt Dodge
6
Cela supprime-t-il la marque "auto"? Parfois, lorsque vous installez spécifiquement des bibliothèques, le paquet est marqué comme installé manuellement. Je n'aime pas lancer 'installer' sur des bibliothèques pour cette raison.
isaaclw
3
Je viens de tester, car toutes les informations sont assez vagues; sur Ubuntu 16.04 ( apt 1.0.1), la mise à niveau d’un paquet en utilisant apt installn’affecte pas la automarque, qu’elle --only-upgradesoit fournie ou non. Bien entendu, l’utilisation de cet --only-upgradeoutil est logique si vous ne souhaitez pas installer accidentellement quelque chose de nouveau. Il mettra également à niveau toutes les dépendances requises .
jumelé
129

Pour mettre à jour un seul package à l'aide de la CLI:

sudo apt-get install --only-upgrade <packagename>

par exemple, sudo apt-get install --only-upgrade ack

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Skipping **ack**, it is not installed and only upgrades are requested.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Ian
la source
11
Je reçois une erreur avec cette commande:E: Sense only is not understood, try true or false.
Michael, le
1
Pour ceux qui rencontrent l'erreur du commentateur précédent, voir ma réponse ci-dessous .
Golem
3
downvoted car il n'a pas ajouté de nouvelles informations à partir de réponses précédentes
gokul_uf
1
Vous devriez passer --only-upgradeà la installsous-commande, pas directement à apt-get, alors vous n'aurez pas à ajouter true.
Ruslan
55

Je peux penser à deux façons:

  1. sudo apt-get install nameofpackage

    Cela mettra à jour le paquet même s'il est déjà installé:

    ~$ sudo apt-get install emesene
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following packages will be upgraded:
      emesene
    1 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.
    Need to get 1,486 kB of archives.
    After this operation, 696 kB disk space will be freed.
    Get:1 http://il.archive.ubuntu.com/ubuntu/ natty-updates/universe emesene all 2.11.4+dfsg-0ubuntu1 [1,486 kB]
    
  2. Utiliser Synaptic Package Manager: Clic droit → Marquer pour la mise à niveau :

    entrez la description de l'image ici

    Note : Parfois, il peut demander des paquets supplémentaires ou des dépendances, c'est normal.

Vie binaire
la source
1
Oui, il devrait et sudo apt-get install whateverdevrait faire la mise à jour par lui-même.
Binarylife
4
upgradene prend pas un argument de paquet.
aphink
25

D'après mon expérience sur Ubuntu 12.04 LTS, utiliser la commande ci-dessous ne mettra pas à jour le paquet si vous utilisez un PPA séparé.

sudo apt-get --only-upgrade install <packagename>

De même, je ne voulais pas exécuter la commande upgrade, qui mettrait à jour tous les paquets sur mon serveur -

sudo apt-get dist-upgrade

Par exemple, j'ai PHP 5.3 installé et j'ai ajouté le PPA ondrej à mes apt.sources en utilisant -

sudo add-apt-repository ppa:ondrej/php5

Si je cours

sudo apt-get install php5

il ne vous reste plus qu'à réinstaller PHP 5.3.

Je dois d’abord déterminer le numéro de version à utiliser, en utilisant

sudo apt-cache policy php5

Ceci listera tous les numéros de version disponibles. Vous devriez trouver le numéro de version que vous souhaitez mettre à niveau, puis copier la chaîne entière qui y fait référence. Par exemple, la chaîne pour PHP 5.5 sur Ubuntu est "5.5.16 + dfsg-1 + deb.sury.org ~ precise + 2".

Maintenant, vous pouvez exécuter la commande apt-get install avec le numéro de version spécifique, et le tour est joué!

sudo apt-get install php5=5.5.16+dfsg-1+deb.sury.org~precise+2

J'ai seulement ajouté ceci parce que je ne pouvais pas trouver cette information ailleurs!

chopsuei3
la source
16

Sur Ubuntu 9.04 Jaunty,

apt-get --only-upgrade install <package>

rendements:

E: Sense only is not understood, try true or false.

La commande

apt-get --only-upgrade true install <package>

travaillé dans mon cas.

Golem
la source
4
Vous devriez passer --only-upgradeà la installsous-commande, pas directement à apt-get, alors vous n'aurez pas à ajouter true.
Ruslan
10

Pour une solution de ligne de commande qui n'installe pas le package s'il n'existe pas déjà:

dpkg -s <package> 2>/dev/null | grep -q Status.*installed && sudo apt-get install <package>

Cela peut facilement être transformé en script, par exemple:

upgrade-package.sh:

#!/bin/bash

[[ -z $1 ]] && { echo "Usage: $(basename $0) package"; exit 1; }

if dpkg -s "$1" 2>/dev/null | grep -q Status.*installed; then
    echo "Attempting to upgrade $1"
    sudo apt-get install "$1"
else
    echo "Package $1 is not installed"
fi
Shane
la source