¿Por qué usar apt-get upgrade en lugar de apt-get dist-upgrade?

302

Usualmente uso apt-get update && apt-get upgradepara ejecutar mis actualizaciones y actualizaciones en lugar de la GUI porque parece ejecutarse más rápidamente.

Sin embargo, últimamente he notado que a menudo recibo un mensaje de que una de mis actualizaciones se retrasó. Por lo general, corro dist-upgradepara ejecutarlo y funciona bien. Por lo que puedo decir después de leer esta pregunta y sus respuestas, dist-upgradehace todas las mismas cosas y algo más.

Entonces, mi pregunta es: ¿por qué usarla apt-get upgrade? ¿Por qué no usar apt-get dist-upgradetodo el tiempo? ¿Por qué apt-get upgradeexiste?

jimchristie
fuente
1
En las versiones más nuevas de Ubuntu, sudo apt full-upgradehace cosas similares.
Aaron Franke

Respuestas:

410

Normalmente actualizo mis máquinas con:

sudo apt-get update && time sudo apt-get dist-upgrade

A continuación se muestra un extracto de man apt-get. El uso de la actualización sigue la regla: bajo ninguna circunstancia se eliminan actualmente los paquetes instalados o los paquetes que aún no están instalados se recuperan e instalan. Si eso es importante para ti, úsalo apt-get upgrade. Si desea que las cosas "simplemente funcionen", probablemente quiera apt-get dist-upgradeasegurarse de que se resuelvan las dependencias.

Para ampliar por qué desea actualizar en lugar de dist-upgrade , si es administrador de sistemas, necesita previsibilidad. Es posible que esté utilizando funciones avanzadas como apuntar o extraer de una colección de PPA (tal vez tenga un PPA interno), con varias automatizaciones para inspeccionar su sistema y las actualizaciones disponibles en lugar de actualizar siempre con entusiasmo todos los paquetes disponibles. Te sentirías muy frustrado cuando apt realiza un comportamiento sin guión, especialmente si esto lleva al tiempo de inactividad de un servicio de producción.

upgrade
    upgrade is used to install the newest versions of all packages
    currently installed on the system from the sources enumerated in
    /etc/apt/sources.list. Packages currently installed with new
    versions available are retrieved and upgraded; under no
    circumstances are currently installed packages removed, or packages
    not already installed retrieved and installed. New versions of
    currently installed packages that cannot be upgraded without
    changing the install status of another package will be left at
    their current version. An update must be performed first so that
    apt-get knows that new versions of packages are available.

dist-upgrade
    dist-upgrade in addition to performing the function of upgrade,
    also intelligently handles changing dependencies with new versions
    of packages; apt-get has a "smart" conflict resolution system, and
    it will attempt to upgrade the most important packages at the
    expense of less important ones if necessary. So, dist-upgrade
    command may remove some packages. The /etc/apt/sources.list file
    contains a list of locations from which to retrieve desired package
    files. See also apt_preferences(5) for a mechanism for overriding
    the general settings for individual packages.
llanura
fuente
44
Gracias por no solo resumir las diferencias entre los dos, sino también por explicar las situaciones en las que una podría ser mejor que la otra. Esto era exactamente lo que estaba buscando.
jimchristie
10
dist-upgradees más probable que rompa cosas mal que upgrade. upgradeasegura que su sistema permanezca completo.
Braiam
55
dist-upgrade es más probable que solucione problemas con versiones de paquetes en conflicto, si se siente cómodo con el enfoque de rodillo de camino (es decir, no tiene un software de producción de misión crítica ejecutándose en la caja)
Henno
1
Una pequeña pregunta sobre 'apt-get upgrade' se refiere al hecho de que "no se eliminaron los paquetes instalados actualmente o se agregó uno nuevo": ¿los paquetes existentes también se actualizan en consecuencia? Por ejemplo, oldA depende de oldB. ¿Se actualizarán oldA y oldB? ¿Qué tal si newA depende de oldB y no newB, qué pasa con estos dos durante la actualización? ambos no actualizados o ambos actualizados, lo que puede dejar que el nuevo A no funcione porque el viejo B se perdió?
Kenny
2
¿Cuál es la razón para usar timeaquí?
ItalyPaleAle
130

Sé que esta pregunta ha sido respondida y tiene un año, pero creo que hay que decirla. Ubuntu 14.04 y posterior (y Debian Jessie y posterior, para quienes encuentren esto en Google) usa APT 1.0, que permite el comando en aptlugar de apt-gety apt-cachepara algunas operaciones.

  • apt-get upgrade no cambiará lo que está instalado (solo versiones),
  • apt-get dist-upgrade instalará o eliminará los paquetes según sea necesario para completar la actualización,
  • apt upgrade se instalará automáticamente pero no eliminará los paquetes.
  • apt full-upgraderealiza la misma función que apt-get dist-upgrade.
Stephen Angelico
fuente
@muru Gracias por la edición y la nota sobre la actualización completa. Principalmente uso Debian 7 (que es anterior a APT 1.0), y solo he jugado con Debian Jessie y Ubuntu 14.04.
Stephen Angelico
De nada. Como alguien que usaba jessiey usaba 14.04 regularmente, ¡me enteré de esta nueva utilidad por su respuesta!
muru
¿Tiene una fuente para su descripción apt upgrade? Todo lo que se me ocurre sugiere que apt upgradees lo mismo que apt-get upgrade. Por ejemplo, apt help upgradeen las salidas de mi sistema:"apt upgrade" is equivalent to "sudo apt-get upgrade"
Jon Bentley
1
Las respectivas páginas de manual para apty apt-getespecifican lo que dije originalmente.
Stephen Angelico
1
apt safe-upgradeNo es una operación válida en mi sistema. Si quieres decir aptitude safe-upgrade, no del todo. apt-get upgradenunca instalará paquetes, mientras que apt upgradee aptitude safe-upgradeinstalará nuevos paquetes a medida que las dependencias lo exijan. Entonces aptitude safe-upgradees equivalente a apt upgrade, no apt-get upgrade.
Stephen Angelico
8

La upgradeopción solo instala una nueva versión de los paquetes que ya están instalados en el sistema (y sí, las actualizaciones del kernel les pertenecen).

Sin embargo, a veces las actualizaciones cambian las dependencias: por ejemplo, una nueva versión de un paquete ya no dependerá de una biblioteca que haya instalado o requerirá la instalación de bibliotecas adicionales. La upgradeopción nunca eliminará los paquetes instalados que ya no necesita.

Sin embargo, la dist-upgradeopción puede manejar "inteligentemente" los cambios en el sistema de dependencias. Esto incluye eliminar paquetes que ya no son necesarios o resolver conflictos entre paquetes que surgieron debido a cambios en las dependencias.

enero
fuente
55
Si bien esto es exacto, no creo que responda la pregunta. Si tenemos una opción "inteligente" que puede manejar los cambios de dependencia y eliminar el desorden, ¿por qué no usarla siempre?
ændrük
1
upgradeTampoco agregará nuevos paquetes que sean necesarios como dependencias. De man apt-get: "bajo ninguna circunstancia se eliminan actualmente los paquetes instalados, o los paquetes que aún no están instalados se recuperan e instalan" @ ændrük El hecho de que algo sea "inteligente" no significa que siempre hará lo que el usuario quiere (o incluso algo razonable) . Cada vez que una actualización del sistema elimina un paquete, es bueno revisar lo que está haciendo antes de presionar Y.
Eliah Kagan
2

Los usuarios podrían haber llegado a confiar en paquetes que se instalaron implícitamente debido a la dependencia de otros paquetes (instalados explícitamente) en ellos. Por lo tanto, el sistema de empaque no puede ser consciente de que un usuario / administrador desea conservar ciertas funcionalidades que de otro modo podrían eliminarse mediante dist-upgrade.

usuario244474
fuente
-4

No debería ser un problema para los usuarios de Win-Home siempre "dist-upgrade", pero si está ejecutando sistemas complejos, es mejor que "nunca (realmente) cambie un sistema en ejecución" ... Incluso si "no" debería ser un problema , "podría" haber problemas: ¡qué te cortará! USTED debe ser el que tiene la decisión correcta 2 ;-)

Thorben Kaufmann
fuente
3
Should not be a problem for Win-Home Users to always "dist-upgrade"..porqué es eso ?
heemayl
1
Bueno, supongamos que configuró un servidor ubuntu, una estación de trabajo para un entorno productivo: cuando siempre y de forma automática realiza la actualización de dist, probablemente no pueda controlar, cuando tenga problemas, incluso si no tiene el tiempo para resolverlo de inmediato en ese momento se realiza una actualización automática dist. Algunas configuraciones pueden necesitar un toque "humano" al puerto. Eso es lo que expire varias veces. Cuando simplemente trabaja en plataformas "Home" como Win-Home, por defecto el usuario no está habilitado para controlar las actualizaciones. Entonces, eso puede que no te moleste.
Thorben Kaufmann