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


12

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

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

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

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


Если я собираюсь установить много приложений (и группирую их, поэтому одну команду для одной группы, следующую команду для следующей и т. Д.), Зачем мне загружать репозитории для каждой группы - разделяя repo.update и Последующие шаги установки я могу сохранить пропускную способность. Если бы я хотел, чтобы команда делала и то и другое, я мог бы написать сценарий или aliasвсе равно. Способ Unix - это одна команда, которая в любом случае выполняет только одну задачу, поэтому разделение лучше подходит для способа Unix, если «теологические / философские» аргументы тоже вам подходят.
Guiverc

аналогично, если я пойду apt dist-upgradeи нажму «n» для отмены, то передумаю, я сохраню пропускную способность, потому что она не будет «обновляться» для повторного выполнения моей apt dist-upgradeкоманды ... Даже если «dist-upgrade» выполнило обновление автоматически существуют причины для «обновления», которые не включают «установку», «обновление» или «dist-upgrade», поэтому команда «обновления» все равно будет существовать ..
guiverc

Я утверждал, что разделение не должно существовать с точки зрения пользователя, и что действие apt updateдолжно запускаться автоматически при необходимости.
Роби Басак

Ответы:


7

Обновление - не единственный раз, когда вам может понадобиться 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буду делать.


6

Всякий раз, когда вы меняете источники программного обеспечения, вы должны выполнить команду 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предоставят подсказки для диагностики и решения проблемы.


5

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

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

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

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

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

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


2

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

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

Удалить PPA.png

После удаления 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вы не можете увидеть, что будет обновлено!


Второй пункт неверен. yumи dnfавтоматически запускать эквивалент обновления при выполнении соответствующих операций. Например, эквивалент apt list --upgradableis yum check-update, который обновляет список пакетов, если он не был обновлен недавно. Это, безусловно, возможно для работы, как это видно из других менеджеров пакетов.
Муру

@muru Это основано на ответе 238 с правом голоса, в котором говорится, что вы должны запустить sudo apt updateпосле удаления хранилища.
WinEunuuchs2Unix

затем второй разделенный раздел.
Муру

Теперь, когда вы упомянули об этом, это также неверно. Как видно из примера yum/ dnfснова, операция обновления выполняется автоматически, поэтому отключенный источник автоматически удаляется из следующей операции. Опять же, то, что вполне возможно.
Муру

@muru Кроме того, в моей системе, по крайней мере, не установлены yumи dnfне установлены. Установка одного из них для замены apt updateувеличит нагрузку на систему и время обучения.
WinEunuuchs2Unix

0

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

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


0

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

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

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


2
yumи dnfавтоматически делает эквивалент для updateбольшинства операций, если кэшированные данные достаточно стары. См., Например, обсуждение по изменению этого поведения в dnf: lwn.net/Articles/750334
Muru
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.