為什麼更新和升級要分開?

為什麼更新和升級要分開?

據我所知,在 中apt,該命令update會更新可用軟體包的列表,但它不會升級已從這些軟體包安裝的軟體。

我還了解,upgrade升級我已經從我更新的軟體包中安裝的任何軟體,update如上所述。

Ubuntu/Debian 開發人員進行這種分割updateupgrade使用一個命令來完成這兩項任務的原因是什麼?

這更多的是關於Ubuntu開發者的架構哲學的問題。

答案1

update和之間的差異的歷史upgrade實際上非常酷。

很久很久以前——比如說大約 2000 年左右,也就是 Ubuntu 出現之前的幾年——頻寬和磁碟空間非常有限……儘管與 20 世紀 90 年代中期相比已經很廣闊了。寬頻剛起步,撥號仍然是重要的上網方式。大磁碟仍然只有幾百MB。 Apt 是閃亮的、新穎的、激進的、革命性的,建立在 dpkg 之上。

仔細想想,apt 資料庫是一個奇蹟:它是一個精確到分鐘的資料庫全部軟體來自全部已知的存儲庫。它足夠詳細,足以讓 apt 計算依賴關係並識別可用的升級,但又足夠小,可以透過當時的撥接數據機進行傳輸並儲存在當時的小型驅動器上。透過電話更新資料庫可能需要分分鐘透過良好的連接。雖然現在已經很長一段時間了,但手動查找軟體包更新(在 apt 之前)可能會消耗小時

當時,發行版的構建方式不同 - 沒有持續集成,沒有冒煙測試(好吧,根本沒有太多測試!),構建農場才剛剛開始。升級必須比現在更頻繁地恢復。很多用戶選擇不是由於各種原因升級某些軟體包,或今天僅選擇某些升級(手動測試),明天進行其他升級。

在隨後的 15 年左右的時間裡,工具沒有太大變化,這就是為什麼我們仍然有單獨updateupgrade行動。這使用者工作流程隨著發行版可靠性的提高,許多過去手動進行的來源/更新/升級管理已慢慢隱藏在自動化層後面(software-updaterunattended-upgrades)。

現代化軟體包工具是 Snaps、AppImage 和 Flatpak 最近出現的原因之一,但那是下一章了。

答案2

升級並不是您可能需要的唯一一次apt-get update,而且我不想每次都升級,我只是想更新軟體包清單。

一口apt-get upgrade運轉良好的井可能取決於apt-get update不久前的運作情況,但事實apt-get remove也是apt-get install如此!所有這些都應該暗示apt-get update嗎?當然不是!作為資源效率和設計簡潔性的簡單問題,如果一個操作是多個其他操作所共有的,則應該將其排除在外。

相反,考慮到apt-get removeapt-get install也可能依賴最近運行才能成功完成,那麼對於每次運行apt-get update是否有意義?不,再說一遍,因為我打算做的事情很可能與將要做的事情發生衝突。apt-get upgradeapt-get updateapt-get upgrade

答案3

每當更改軟體來源時,都必須執行該命令sudo apt update才能刷新可用軟體清單。然後,您可以在剛剛新增的軟體來源中搜尋可用的軟體套件和/或安裝它們。

該命令sudo apt upgrade相當於使用軟體更新程式應用程式升級已安裝軟體包清單的終端機。這與添加新軟體來源、更新可用軟體清單以包含新軟體來源中的軟體包以及從剛剛新增的軟體來源安裝新軟體包的正常工作流程不同,因此更方便且更容易混淆的是sudo apt updatesudo apt upgrade是單獨的命令。

分離也不會那麼混亂sudo apt updatesudo apt upgrade因為當你sudo apt update成功運行時,你已經確認你有網路連線。如果之後運行時出現問題sudo apt upgrade,則該問題更有可能是套件管理問題,而不是網路連線問題,並且結果sudo apt upgrade將為診斷和解決問題提供線索。

答案4

有人可能會問為什麼要從正式的 Ubuntu 儲存庫下載程式然後apt安裝呢?如果您先下載然後安裝,而不是一次性下載和安裝,會有什麼區別?

在閱讀了評論並對此進行了更多思考之後,我明白這是由於Unix哲學, A模組化的基本理念是「每個程式只做一件事」:先下載,然後安裝-每個操作都有自己的專用程式。

相關內容