Зачем использовать apt-get upgrade вместо apt-get dist-upgrade?

302

Я обычно использую apt-get update && apt-get upgradeдля запуска своих обновлений и обновлений вместо графического интерфейса, потому что кажется, что он работает быстрее.

Однако в последнее время я заметил, что часто получаю сообщение о том, что одно из моих обновлений было отложено. Затем я обычно запускаю dist-upgradeего, и он работает нормально. Насколько я могу сказать после прочтения этого вопроса и его ответов, dist-upgradeделает все то же самое, а затем некоторые.

Итак, мой вопрос: зачем apt-get upgradeвообще использовать ? Почему бы не использовать apt-get dist-upgradeвсе время? Почему вообще apt-get upgradeсуществует?

jimchristie
источник
1
В новых версиях Ubuntu sudo apt full-upgradeделает подобные вещи.
Аарон Франке

Ответы:

410

Я обычно модернизирую свои машины с помощью:

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

Ниже приведен отрывок из man apt-get. При использовании обновления соблюдается правило: ни при каких обстоятельствах установленные в настоящее время пакеты не удаляются, а пакеты, которые еще не установлены, извлекаются и устанавливаются. Если это важно для вас, используйте apt-get upgrade. Если вы хотите, чтобы вещи «просто работали», вы, вероятно, хотите apt-get dist-upgradeубедиться, что зависимости разрешены.

Если вы системный администратор, чтобы узнать, почему вам нужно обновление вместо dist-upgrade , вам нужна предсказуемость. Возможно, вы используете расширенные функции, такие как точное закрепление или извлечение из коллекции PPA (возможно, у вас есть собственный PPA), с различными автоматизированными системами для проверки вашей системы и доступных обновлений вместо того, чтобы всегда охотно обновлять все доступные пакеты. Вы бы очень расстроились, когда apt выполняет неподписанное поведение, особенно если это приводит к простою производственного сервиса.

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.
rduplain
источник
44
Спасибо за то, что вы не только суммируете различия между ними, но и объясняете ситуации, когда один может быть лучше другого. Это было именно то, что я искал.
Jimchristie
10
dist-upgradeболее вероятно сломать вещи плохо чем upgrade. upgradeгарантирует, что ваша система остается полной.
Брайам
5
dist-upgrade с большей вероятностью решит проблемы с конфликтующими версиями пакетов, если вам удобнее использовать дорожный ролик (т. е. у вас нет критически важного производственного программного обеспечения, работающего на коробке)
Henno
1
Небольшой вопрос о 'apt-get upgrade' в связи с тем, что «ни один из установленных в настоящий момент пакетов не удален или добавлен новый»: существующие пакеты также обновляются соответствующим образом. Например, oldA зависит от oldB. Будут ли обновлены oldA и oldB? Как насчет того, что newA зависит от oldB, а не newB, что происходит с этими двумя во время обновления? оба не обновлены или оба обновлены, что может привести к тому, что newA не будет работать, потому что oldB потерян?
Кенни
2
В чем причина использования timeздесь?
ItalyPaleAle
130

Я знаю, что на этот вопрос был дан ответ, ему уже год, но я чувствую, что это нужно сказать. Ubuntu 14.04 и более поздние (и Debian Jessie и более поздние, для тех, кто узнал об этом из Google) используют APT 1.0, что позволяет использовать команду aptвместо некоторых операций apt-getи apt-cacheдля них.

  • apt-get upgrade не изменит то, что установлено (только версии),
  • apt-get dist-upgrade установит или удалит пакеты по мере необходимости, чтобы завершить обновление,
  • apt upgrade автоматически установит, но не удалит пакеты.
  • apt full-upgradeвыполняет ту же функцию, что и apt-get dist-upgrade.
Стивен Анжелико
источник
@muru Спасибо за редактирование и заметку о полном обновлении. В основном я использую Debian 7 (до версии 1.0 APT), и я играл только с Debian Jessie и Ubuntu 14.04.
Стивен Анжелико,
пожалуйста. Как человек, который использовал jessie14.04 регулярно, я впервые узнал об этой новой утилите из вашего ответа!
Муру
У вас есть источник для вашего описания apt upgrade? Все, что я могу придумать, предполагает, что apt upgradeэто то же самое, что и apt-get upgrade. Например, apt help upgradeна моих системных выходах:"apt upgrade" is equivalent to "sudo apt-get upgrade"
Джон Бентли
1
Соответствующие manpages aptи apt-getукажите, что я первоначально сказал.
Стивен Анжелико
1
apt safe-upgradeне является действительной операцией в моей системе. Если вы имеете в виду aptitude safe-upgrade, не совсем. apt-get upgradeникогда не будет устанавливать пакеты, тогда apt upgradeи aptitude safe-upgradeбудет устанавливать новые пакеты как зависимости требовать его. Так aptitude safe-upgradeэквивалентно apt upgrade, нет apt-get upgrade.
Стивен Анжелико
8

upgradeОпция только устанавливает новые версии пакетов, которые уже установлены в системе (и да, обновление ядра принадлежит к ним).

Однако иногда обновления изменяют зависимости: например, новая версия пакета больше не будет зависеть от установленной вами библиотеки или потребует установки дополнительных библиотек. upgradeВариант никогда не будет удалить установленные пакеты , которые вы больше не на самом деле не нужны.

Однако эта dist-upgradeопция может «интеллектуально» обрабатывать изменения в системе зависимостей. Это включает в себя удаление пакетов, которые больше не нужны, или разрешение конфликтов между пакетами, которые возникли из-за изменений в зависимостях.

январь
источник
5
Хотя это точно, я не думаю, что это отвечает на вопрос. Если у нас есть «интеллектуальная» опция, которая может обрабатывать изменения зависимостей и устранять помехи, почему бы не использовать их всегда?
rndrük
1
upgradeтакже никогда не будет добавлять новые пакеты, которые становятся необходимыми в качестве зависимостей. От man apt-get: «ни при каких обстоятельствах установленные в настоящее время пакеты не удаляются, или пакеты, еще не установленные, извлекаются и устанавливаются» @ ændrük То, что что-то является «интеллектуальным», не означает, что оно всегда будет делать то, что хочет пользователь (или даже что-то разумное) , Каждый раз, когда обновление системы удаляет пакет, перед тем, как нажать Y, полезно посмотреть, что он делает.
Элия ​​Каган,
2

Пользователи могли полагаться на пакеты, которые были установлены неявно из-за зависимости других (явно установленных) пакетов от них. Таким образом, система упаковки не может знать о желании пользователя / администратора сохранить определенные функциональные возможности, которые в противном случае могли бы быть удалены посредством dist-upgrade.

user244474
источник
-4

Не должно быть проблемой для пользователей Win-Home всегда "dist-upgrade", но если вы используете сложные системы, вам лучше "никогда (действительно) не менять работающую систему" ... Даже если "не должно быть" проблем не возникает Там "могут" быть пробники - что тебя отрежет! ВЫ должны быть тем, кто имеет право 2 решать ;-)

Торбен Кауфманн
источник
3
Should not be a problem for Win-Home Users to always "dist-upgrade"..почему это ?
Heemayl
1
Хорошо, скажем, вы настроили Ubuntu-сервер, рабочую станцию ​​для продуктивной среды: когда вы всегда и автоматически выполняете dist-upgrade, вы, вероятно, не можете контролировать, когда возникают проблемы - даже если у вас нет времени, чтобы решить прямо в В этот момент выполняется автоматическое обновление dist. Некоторым конфигам может понадобиться «человеческое» прикосновение к порту. Это то, что я испытал несколько раз. Когда вы просто работаете на «Домашних» платформах, таких как Win-Home, по умолчанию пользователь не может контролировать обновления. Так что вы, что может вас не беспокоить.
Торбен Кауфманн