apt 的 update 和 upgrade 命令的區別是什么?

如果想讓你的 Ubuntu 或者 Debian 系統保持更新,要用 ??sudo apt update??? 和 ??sudo apt upgrade?? 命令組合。
一些以前的教程也會提到 ??sudo apt-get update??? 和 ??sudo apt-get upgrade??。
??apt??? 和 ??apt-get?? 命令運行起來幾乎一樣,除了一些細微的差別,后面我會討論。
我們首先討論一下 ??update??? 和 ??upgrade?? 的區別。這兩個難道不是一樣的嗎?
apt 的 update 和 upgrade 的區別
盡管聽上去運行 ??apt update??? 可以給你一個包的最新版本,然而這并不正確。??update??? 命令只會獲得系統上所有包的最新信息,并不會下載或者安裝任何一個包。而是 ??apt upgrade?? 命令來把這些包下載和升級到最新版本。
還是有點困惑?讓我來接著解釋。我建議閱讀 ??包管理器的概念??。這個會幫你更好的理解這些東西。

Linux Package Manager Explanation
基本上,你的系統圍繞著一個所有可用包的數據庫(緩存)工作。注意,這個緩存(或者數據庫)并不包含這些包本身,僅僅是關于包的元數據(版本、倉庫、依賴等)。
如果你不更新這個數據庫,系統就不會知道是否有更新的版本。
當你運行 ??apt update??? 或者 ??apt-get update?? 命令,它會獲取這些包的最新元數據(包的版本等)。

apt update
這時候本地緩存就被更新了,有一些包可以升級。用 ??sudo apt upgrade?? 可以升級所有(可升級的)包。
它會顯示要升級的包,并且通過回車(默認選擇是 ??Y???)或者按下 ??Y??? 鍵進行確認。要在這個階段取消升級,可以按下 ??N??。

apt upgrade
下面這些可能會幫助你記憶:
- ?
?apt update??:更新包緩存(可以知道包的哪些版本可以被安裝或升級) - ?
?apt upgrade??:升級包到最新版本
因為有一些管理員命令,需要作為 root 運行。因此需要使用 ??sudo??? 配合其他命令。??sudo?? 使你能夠作為 root 在 Ubuntu 和 Debian 上運行命令。
既然理解了 ??update??? 和 ??upgrade??? 是如何一起運行的,我們接下來來討論一下 ??apt??? 和 ??apt-get?? 的用法。
apt 還是 apt-get?應該用哪個?
Debian 和 Ubuntu 使用的是 APT 包管理系統。不要和 ??apt?? 命令弄混了。
有許多和 APT 包管理交互的命令;??apt-get???、??apt???、??dpkg???、??aptitude?? 等。
這里面最受歡迎的就是 ??apt-get??? 命令。它是一個低層級low-level且功能豐富的命令。??apt??? 是 ??apt-get?? 命令的一個更新而更簡單的版本。
可以讀一下這篇文章來 ??了解 atp 和 apt-get 命令的不同???。下面重點討論這些命令中 ??update??? 和 ??upgrade?? 選項的區別。
apt update vs apt-get update
??apt-get update??? 和 ??apt update?? 做的是同樣的事,都是更新本地包緩存,這樣的話你的系統就知道有哪些包的版本是可用的。
從技術上講,其實并沒有區別。然而,??apt update??? 在一個方面比 ??apt-get update?? 做的好,它會告訴你可升級的包的數量。
Hit:15 https://ppa.launchpadcontent.net/slimbook/slimbook/ubuntu jammy InRelease
Fetched 213 kB in 4s (55.8 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
6 packages can be upgraded. Run 'apt list --upgradable' to see them.
??apt-get update?? 甚至不會告訴你包是否可以升級。

apt get update

apt update output
從 ??apt??? 中可以看到 ??列出可升級的包???,而 ??apt-get?? 甚至沒有這個選項。
Listing... Done
fprintd/jammy-updates 1.94.2-1ubuntu0.22.04.1 amd64 [upgradable from: 1.94.2-1]
gnome-control-center-data/jammy-updates,jammy-updates 1:41.7-0ubuntu0.22.04.4 all [upgradable from: 1:41.7-0ubuntu0.22.04.1]
gnome-control-center-faces/jammy-updates,jammy-updates 1:41.7-0ubuntu0.22.04.4 all [upgradable from: 1:41.7-0ubuntu0.22.04.1]
gnome-control-center/jammy-updates 1:41.7-0ubuntu0.22.04.4 amd64 [upgradable from: 1:41.7-0ubuntu0.22.04.1]
libpam-fprintd/jammy-updates 1.94.2-1ubuntu0.22.04.1 amd64 [upgradable from: 1.94.2-1]
vivaldi-stable/stable 5.4.2753.40-1 amd64 [upgradable from: 5.4.2753.37-1]
現在來比較一下兩個命令中 ??upgrade?? 的選項。
apt upgrade vs apt-get upgrade
??apt-get upgrade??? 和 ??apt upgrade??? 命令根據本地包緩存(通過 ??update?? 命令更新)的數據,安裝可升級包的最新版本。
然而,??apt upgrade??? 命令會做兩件與 ??apt-get upgrade?? 不同的事情。
??apt upgrade??? 命令可以升級 Linux 內核版本,??apt-get upgrade??? 不能。??apt-get??? 命令需要使用 ??apt-get dist-upgrade?? 來升級內核版本。

apt-get upgrade command cannot upgrade Linux kernel version
這是因為升級內核版本意味著安裝一個全新的包。??apt-get upgrade?? 命令不能安裝一個新的包。它只能升級現有的包。
??apt upgrade??? 比 ??apt-get?? 做的好的另一件小事是,它會在底部顯示一個進度條。

apt upgrade progress bar
總結
??update??? 和 ??upgrade??? 兩個詞很相似,這就是為什么很多新用戶會感到困惑。有時候,我覺得 ??apt update??? 命令應該和 ??apt upgrade?? 命令合并。
我意思是 ??upgrade???(所有已安裝的包)和 ??update???(本地包元數據緩存)一起完成工作。為什么要有兩個分開的命令呢?把這兩個領命合成一個 ??upgrade?? 命令吧。Fedora 就是這樣對 DNF 命令進行了改進。不過這只是我的觀點。
我希望這篇文章可以解釋一些關于 ??apt-get update???、??apt-get upgrade??? 和 ??apt update??? 以及 ??apt upgrade?? 命令的問題。





























