Почему существует разделение обновления и обновления?

Я понимаю что в apt, команда updateобновляет список доступных пакетов, но не обновляет программное обеспечение, которое уже было установлено из этих пакетов.

Я тоже понимаю что upgrade обновляет любое программное обеспечение, которое я уже установил, из пакета, который я обновил update как описано выше.

По какой причине разработчики Ubuntu/Debian сделали такое разделение update а также upgrade вместо того, чтобы работать с одной командой, чтобы сделать обе задачи?

Это больше вопрос архитектурной философии разработчиков Ubuntu.

6 ответов

История разницы между update а также upgrade на самом деле довольно круто.

Давным-давно - скажем, около 2000 или около того, за годы до появления Ubuntu - пропускная способность и дисковое пространство были гораздо более ограниченными... хотя и обширными по сравнению с серединой 1990-х годов. Широкополосная связь только начиналась, и коммутируемый доступ все еще был жизненно важным способом выхода в Интернет. Большие диски были всего лишь несколько сотен МБ. Апт был блестящим и новым, радикальным и революционным, построенным поверх dpkg.

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

В то время дистрибутивы создавались по-разному - без непрерывной интеграции, без тестирования дыма (ну, совсем не много!), Сборочные фермы только начинали. Обновления приходилось отменять чаще, чем сейчас. Многие пользователи решили не обновлять определенные пакеты по разным причинам или выбирать только определенные обновления сегодня (для тестирования вручную), а другие обновления - завтра.

За последующие 15 лет инструменты не сильно изменились, поэтому у нас все еще есть отдельные update а также upgrade действия. Рабочий процесс пользователя развивался по мере повышения надежности дистрибутива, и большая часть управления источниками / обновлениями / обновлениями, которое раньше было ручным, медленно скрывалась за уровнями автоматизации (software-updater, unattended-upgrades).

Модернизация инструментов программного пакета - одна из причин, по которой недавно появились Snaps, AppImage и Flatpack, но это следующая глава.

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

apt-get upgrade хорошо работает может зависеть от apt-get update будучи запущенным не так давно, но тогда это верно для apt-get remove а также apt-get install также! Должны ли все это подразумевать apt-get update? Конечно, нет! В качестве простого вопроса эффективности использования ресурсов и чистоты конструкции, если операция является общей для множества других операций, она должна быть учтена.

И наоборот, учитывая, что apt-get remove а также apt-get install также может зависеть от apt-get update будучи недавно запущенным, чтобы успешно закончить, имеет ли смысл apt-get upgrade за каждый прогон apt-get update? Нет, опять же, поскольку то, что я намерен сделать, вполне может противоречить тому, что apt-get upgrade Сделаю.

Всякий раз, когда вы меняете источники программного обеспечения, вы должны запустить команду sudo apt update для того, чтобы обновить список доступного программного обеспечения. Затем вы можете искать доступные пакеты в новом источнике программного обеспечения, который вы только что добавили, и / или установить их.

Команда sudo apt upgrade является терминальным эквивалентом обновления списка установленных пакетов с помощью приложения Software Updater. Это отличается от обычного рабочего процесса добавления нового источника программного обеспечения, обновления списка доступного программного обеспечения для включения пакетов из нового источника программного обеспечения и установки новых пакетов из нового источника программного обеспечения, который вы только что добавили, так что это более удобно и менее запутанным, что sudo apt update а также sudo apt upgrade это отдельные команды.

Это также менее запутанно отделить sudo apt update а также sudo apt upgrade потому что когда вы бежите sudo apt update Вы успешно подтвердили наличие подключения к Интернету. Если есть проблема при запуске sudo apt upgrade впоследствии проблема, скорее всего, будет связана с управлением пакетами, а не с подключением к Интернету, а результаты sudo apt upgrade предоставит подсказки для диагностики и решения проблемы.

Они делают разные вещи по многим причинам.

Одним из примеров является вопрос, который я разместил и ответил на него сам: как можно удалить PPA с помощью графического интерфейса?, На этом экране мы хотим удалить PPA, а не обновлять программное обеспечение:

После удаления PPA автоматически запускается программное обеспечение с графическим интерфейсом sudo apt update, Если вам нужно было удалить PPA из командной строки, вам нужно запустить sudo apt update после удаления PPA из списка источников.

Без отдельного apt update Функция нет способа удалить PPA!.


Другой пример, вам нужно запустить sudo apt update из командной строки, чтобы обновить источники. Затем вы можете узнать, что можно обновить без фактического обновления:

$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 amd64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 amd64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 amd64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]

Глядя на вывод, вы можете решить, что данный пакет будет "закреплен" или "задержан" и не обновлен при следующем запуске "sudo apt upgrade". Если бы был один процесс "обновление / обновление", вы бы потеряли эту способность.,

Без отдельного apt update Вы не можете видеть, что будет обновлено!

Ни в одном дистрибутиве не существует одной команды update-upgrade, если она есть, то это всего лишь предопределенные псевдонимы, как я полагаю. Эти псевдонимы также можно легко установить в Ubuntu, отредактировав ~/.bashrc.

Обновление используется для повторной синхронизации репозиториев и устранения там любых проблем. Затем, когда вы обновляете, вы фактически обновляете установленные пакеты. Но когда вы Dist-Upgrade, вы обновляетесь полностью. В Arch Linux они делают упор на полное обновление с помощью Syu. Вы можете сделать то же самое в Ubuntu. При полном обновлении вы фактически решаете любые проблемы с зависимостями, которые могут возникнуть при частичном обновлении.

Надеюсь, поможет. Прошу прощения за необработанный текст, написанный на телефоне.

Можно спросить, зачем скачивать программу из официального репозитория Ubuntu с apt затем установить его? Какая разница, если сначала загрузить, а затем установить, а не загружать и устанавливать за одну операцию?

Хорошо прочитав комментарии и подумав об этом, я понимаю, что это связано с философией Unix, модульной философией, которая в основном гласит: "Каждая программа делает одно": сначала загрузите, а затем установите - каждое действие со своей отдельной программой,

Другие вопросы по тегам