apt-get upgrade 是一个危险的命令吗?

apt-get upgrade 是一个危险的命令吗?

当我使用 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应用程序,同样的事情没有输出让你担心。

以下是一些文档,apt您可以了解更多信息

答案4

作为其他更完整答案的补充,这里有一个apt-get upgrade可能很危险的极端情况(我自己就陷入了这种情况):

当运行 Docker 容器时,apt-get upgrade将全部关闭它们。

这可能会导致:

  • 服务中断
  • 数据丢失(例如,如果您--rm的命令中有一些您重视的数据在容器本身中,但没有正确安装在某处)。docker run

相关内容