¿Cómo actualizar un solo paquete usando apt-get?


827

¿Cómo actualizo un solo paquete? Hasta donde man apt-getdice apt-get upgradeno toma un paquete / lista de paquetes como parámetro:

mejorar

La actualización se utiliza para instalar las versiones más recientes de todos los paquetes actualmente instalados en el sistema desde las fuentes enumeradas en /etc/apt/sources.list. Los paquetes actualmente instalados con nuevas versiones disponibles se recuperan y actualizan; en ningún caso se eliminan los paquetes instalados actualmente, o los paquetes que aún no están instalados se recuperan e instalan. Las nuevas versiones de los paquetes instalados actualmente que no se pueden actualizar sin cambiar el estado de instalación de otro paquete se dejarán en su versión actual. Primero se debe realizar una actualización para que apt-get sepa que hay nuevas versiones de paquetes disponibles.

Respuestas:


1027

Solo necesitas hacer apt-get install --only-upgrade <packagename>. Esto actualizará solo ese paquete único, y solo si está instalado.

Si desea instalar el paquete si no existe, o actualizarlo si es así, puede omitirlo --only-upgrade.


88
apt-get install --only-upgrade <packagename>no instalará ningún paquete nuevo
taneli

99
¿El installcomando actualizará también las dependencias de ese paquete único si es necesario?
Pino

77
@Pino Lo hará, tiene sentido hacerlo. ¿Qué sucede si la versión a la que está actualizando depende de una versión más nueva de otro paquete? Estás manguera si no actualizas ambos. Es por eso que installes el comando correcto para esto, incluso si parece contrario a la intuición.
Matt Dodge

66
¿Esto elimina la marca "auto"? A veces, cuando instala bibliotecas específicamente, el paquete se marca como instalado manualmente. No me gusta ejecutar 'instalar' en las bibliotecas por este motivo.
isaaclw

3
Acabo de probar, ya que toda la información es bastante vaga; en Ubuntu 16.04 ( apt 1.0.1), actualizar un paquete usando apt installno afecta la automarca, ya --only-upgradesea que se suministre o no. Aunque, por supuesto, usar --only-upgradetiene sentido si no desea instalar accidentalmente algo nuevo. También actualizará cualquier dependencia requerida .
Dualed

129

Para actualizar un solo paquete usando la CLI:

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

p.ej, 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.

11
Me sale un error con este comando:E: Sense only is not understood, try true or false.
Michael

1
Para aquellos que encuentran el error del comentarista anterior, vea mi respuesta a continuación .
Golem

3
rechazado ya que no agregó nueva información de respuestas anteriores
gokul_uf

1
Debe pasar --only-upgradeal installsubcomando, no directamente a apt-get, luego no tendrá que agregar true.
Ruslan

55

Hay dos formas posibles en las que puedo pensar:

  1. sudo apt-get install nameofpackage

    Esto actualizará el paquete incluso si ya está instalado:

    ~$ 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. Uso Synaptic Package Manager: Haga clic derecho → Marcar para actualizar :

    ingrese la descripción de la imagen aquí

    Nota : A veces puede pedir paquetes o dependencias adicionales, es normal.


1
Sí, debería y sudo apt-get install whateverdebería actualizarse solo.
Binarylife

44
upgradeno toma un argumento de paquete.
phaphink

25

En mi experiencia en Ubuntu 12.04 LTS, usar el comando a continuación no actualizará el paquete si usa un PPA separado:

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

Del mismo modo, no quería ejecutar el comando de actualización, que actualizaría todos los paquetes en mi servidor.

sudo apt-get dist-upgrade

Por ejemplo, tengo PHP 5.3 instalado y he agregado el ondrej PPA a mis apt.sources usando -

sudo add-apt-repository ppa:ondrej/php5

Si corro

sudo apt-get install php5

solo reinstalará PHP 5.3.

Primero tengo que determinar el número de versión para actualizar, usando

sudo apt-cache policy php5

Esto enumerará todos los números de versión disponibles. Debe encontrar el número de versión al que desea actualizar y luego copiar la cadena completa que hace referencia a ella. Por ejemplo, la cadena para PHP 5.5 en Ubuntu es "5.5.16 + dfsg-1 + deb.sury.org ~ precisa + 2".

Ahora, puede ejecutar el comando apt-get install con el número de versión específico, ¡y listo!

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

¡Solo agregué esto porque no pude encontrar esta información en ningún otro lugar!


16

En Ubuntu 9.04 Jaunty,

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

rendimientos:

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

El comando

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

Trabajó en mi caso.


44
Debe pasar --only-upgradeal installsubcomando, no directamente a apt-get, luego no tendrá que agregar true.
Ruslan

10

Para una solución de línea de comando que no instala el paquete si aún no existe:

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

Esto se puede convertir fácilmente en un script, por ejemplo:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.