当我使用 apt-get update 和 apt-get upgrade 时,有一些软件包应该安装最新版本,如下所示:
The following packages will be upgraded:
accountsservice apparmor apport apt apt-transport-https apt-utils binutils
cloud-init cpp-4.8 dpkg fuse g++-4.8 gcc-4.8 gcc-4.8-base gdisk gnupg gpgv
grub-common grub-legacy-ec2 grub-pc grub-pc-bin grub2-common initscripts
isc-dhcp-client isc-dhcp-common libaccountsservice0 libapparmor-perl
libapparmor1 libapt-inst1.5 libapt-pkg4.12 libasan0 libatomic1 libbsd0
libcurl3-gnutls libdrm2 libedit2 libfuse2 libgcc-4.8-dev libgd3 libgomp1
libitm1 libjson-c2 libjson0 libnuma1 libpam-systemd libpolkit-agent-1-0
libpolkit-backend-1-0 libpolkit-gobject-1-0 libquadmath0 libstdc++-4.8-dev
libstdc++6 libsystemd-daemon0 libsystemd-login0 libtsan0 libudev1 libxext6
linux-libc-dev ntpdate openssl overlayroot patch policykit-1 ppp
python-urllib3 python3-apport python3-problem-report python3-update-manager
rsyslog systemd-services sysv-rc sysvinit-utils tcpdump tzdata udev
update-manager-core
75 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
如果我不知道每一个软件包,那么在最新版本更新时会发生什么。我不应该执行这个命令(apt-get upgrade)。
例如:
这个 php 版本是我升级之前的
yzxu@ubuntu:/tmp/git-2.1.2$ php --version
PHP 5.6.6-1+deb.sury.org~precise+1 (cli)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
升级后:
yzxu@ubuntu:/tmp/git-2.1.2$ php --version
PHP 5.6.10-1+deb.sury.org~precise+1 (cli)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
php 版本已更改。如果我不知道两个版本有什么变化,我是否应该升级它?影响产品?
答案1
apt-get update
刷新存储库并获取有关可在线获取的软件包的信息。
apt-get upgrade
下载并安装所有已安装软件包的更新 - 只要它不影响依赖关系(安装新软件包、删除旧软件包或跨越 repo 源(将软件包从一个 repo 切换到另一个 repo))。
apt-get dist-upgrade
与“升级”相同,但是当依赖项或源发生更改时也会升级包(如果没有进一步测试,您希望在服务器上避免这种情况)。
总结一下 - 更新可能会破坏一些东西,但它是必要的!因此,如果您使用的是台式机,通常应该执行以下操作:
sudo apt-get update && sudo apt-get dist-upgrade
不破坏任何东西。
在服务器上大多数时候:
sudo apt-get update && sudo apt-get upgrade
应该足够了,并且安全更新应该自动安装(在服务器和桌面上)
更新至 16.04
同时,“apt”包装器是 Ubuntu 中的标准方式,因此命令现在是:
sudo apt update #to update the repo-information
sudo apt upgrade #to install all security fixes and changes that doesn't harm the system or change the behaviour
sudo apt full-upgrade #the new "dist-upgrade" that installs newer versions that can break backwards-compatibility
太长不看!
是的,您应该在此示例中更新 PHP,因为它是一个安全修复程序(这可以通过 PHP 的版本控制方案看到;它也不会被推送到 Ubuntu 的“升级”频道。)
答案2
我有3年使用Ubuntu的经验,从16.04 LTS 18.04 LTS到20.04 LTS。
我以前也做过升级,比如
sudo apt-get update && sudo apt-get upgrade
或者当系统更新程序弹出时,点击安装,这是网上大多数人的建议,我相信他们。我认为升级会使系统更稳定、更好、更安全,但实际上它带来了更多问题……这些行为导致了很多错误,所以我花了很多时间调试或重新安装我的系统。例如,损坏的 grub、损坏的 wifi 驱动程序、损坏的 nvidia 驱动程序、损坏的 DNS 解析器……等等。
最近,我终于明白了。
我的观点是永远不要升级。我总是遇到很多 bug 的原因是apt-get upgrade
升级了很多你不了解的软件包。如果其中一个软件包出了问题,就会导致一些 bug。升级的软件包越多,系统面临的风险就越大。所以我的解决方案是始终升级你想要升级的特定软件包,方法是这样做:
sudo apt-get update
sudo apt-get --only-upgrade install <packages name>
当你想这样做时sudo apt-get upgrade
,就会有风险。如果系统运行良好,那就算幸运了。如果不行,就调试或重新安装。
但是安全更新怎么样,它仍然安全吗?
在软件和更新的更新部分中,如果您选择安全更新作为“自动下载并安装”选项,/usr/bin/unattended-upgrade
则会自动处理安全更新。
您可以通过以下方式检查
less /var/log/apt/history.log
答案3
运行apt-get upgrade
它时,它会更新系统上所有已安装的软件包。它非常安全(除非在它完成之前停止运行),因为所有软件包都来自存储库(您只应安装您信任的软件包),并且在上传之前(可能)经过了充分测试。
唯一的小风险是软件包本身存在错误的风险,但这可能发生在任何升级的操作系统上的任何东西上,因为错误在任何软件中都很常见,并且会根据版本的不同而出现和消失。
你应该升级吗?嗯,这取决于你,我会说是的,如果你不喜欢upgrade
使用该application-updater
应用程序,同样的事情没有输出让你担心。
答案4
作为其他更完整答案的补充,这里有一个apt-get upgrade
可能很危险的极端情况(我自己就陷入了这种情况):
当运行 Docker 容器时,apt-get upgrade
将全部关闭它们。
这可能会导致:
- 服务中断
- 数据丢失(例如,如果您
--rm
的命令中有一些您重视的数据在容器本身中,但没有正确安装在某处)。docker run