如何通过命令行安装更新?

Mar*_*lin 812 updates package-management command-line apt

当我通过 SSH 登录到我的 Web 服务器时,我看到了以下信息:

88 packages can be updated.
80 updates are security updates
Run Code Online (Sandbox Code Playgroud)

apt-get update当时尝试过,apt-get upgrade但每次登录时,我仍然会看到有关更新的消息。我该如何安装它们?

Sir*_*rlo 1031

用这个:

sudo apt update        # Fetches the list of available updates
sudo apt upgrade       # Installs some updates; does not remove packages
sudo apt full-upgrade  # Installs updates; may also remove some packages, if needed
sudo apt autoremove    # Removes any old packages that are no longer needed
Run Code Online (Sandbox Code Playgroud)

有关每个apt选项的文档可以在apt 的联机帮助页中找到。这些也可以通过man apt在终端中运行来获得。

通常不需要同时使用两者upgradefull-upgrade一起使用,但在某些情况下可能会有所帮助:请参阅有关从 Debian 9 升级的 Debian 文档

  • 之后我应该总是用`sudo reboot`重新启动吗? (35认同)
  • @hellboy 不需要每次都这样做。它通常会通知您是否需要重新启动。 (3认同)
  • 只是指出 `apt full-upgrade` 执行与 `apt-get dist-upgrade` 相同的功能,如果像我一样,你正在将这些命令与这个问题中的其他答案进行比较。 (3认同)

Ben*_*nny 154

通过键入sudo一次执行所有命令:

sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y'
Run Code Online (Sandbox Code Playgroud)

或者:

sudo -s -- <<EOF
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
apt-get autoremove -y
apt-get autoclean -y
EOF
Run Code Online (Sandbox Code Playgroud)

甚至在for循环中更短(感谢@dessert!):

sudo bash -c 'for i in update {,dist-}upgrade auto{remove,clean}; do apt-get $i -y; done'
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅使用 APT维护命令的包管理文档

  • 你可以通过 `apt-get dist-upgrade --auto-remove` 组合 `dist-upgrade` 和 `autoremove`。 (4认同)
  • 不需要同时运行 `upgrade` 和 `dist-upgrade`。 (3认同)
  • @jarno `dist-upgrade` 可以删除包。首先使用 `upgrade` 可以避免这种情况,例如当新包版本比旧版本更容易满足依赖关系时。我不知道在 Ubuntu 的稳定版本中升级软件包时这有多少帮助,但它[在其他一些上下文中推荐](https://www.debian.org/releases/buster/amd64/release-notes/ch -upgrading.en.html#minimal-upgrade)。就我个人而言,我在 Ubuntu 中很少使用 `dist-upgrade`,当我使用时,我从不通过 `-y`。但是如果要运行`dist-upgrade`并通过`-y`,我认为首先执行`upgrade`动作是合理的。 (3认同)
  • @jarno 虽然您可以将 `--autoremove` 与您选择的升级命令链接在一起,但不建议这样做,因为当其中一个包失败时,它可能会导致您处于不干净的状态。更好的是在更新过程完成后在单独的行上单独使用 `autoremove`,如果你也想清除旧的配置文件,你可以将它与 `--purge` 链接起来。 (2认同)

dav*_*id6 97

这是正常行为。

在登录时看到该消息已被附加到服务器状态“消息的最日”,这是唯一的更新每个日历天(或在服务器开机/启动)。看一下内容,使用

cat /etc/motd
Run Code Online (Sandbox Code Playgroud)

运行后仍然看到相同的可用更新

sudo apt-get update && sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

是可以预料的。如果您随后重新运行此命令,则只有在发布了更多(较新)更新时,才会提示您进行任何进一步更新。

  • 这在 16.04 上不再适用。在“apt-get dist-upgrade”并重新启动后,我看到“可以升级 0 个软件包”。 (3认同)
  • cat: /etc/motd: 没有那个文件或目录 (3认同)
  • 上面的 **'.. 或 on server reboot ..'** 语句确实涵盖了这一点。 (2认同)

Nor*_*cUs 13

登录到服务器后,运行以下命令。

sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

它应该可以解决问题。也许您只需要重新启动服务器。

  • 感谢您的回答,但我确实尝试过 sudo apt-get upgrade。重新启动服务器是不可能的,因为我有网站。 (3认同)
  • 如果您安装了直接影响内核的更新,或者是驱动程序更新,或者是关键的安全更新,则需要重新启动服务器。 (3认同)
  • 如果服务器离线了,你怎么能给出503呢? (2认同)

小智 9

就我而言,我在/etc/apt/sources.list 中有一个不正确或无法访问的URL 删除此 URL 后,我能够成功更新所有包。

命令:

sudo vi /etc/apt/sources.list
sudo apt-get update && sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)


Rma*_*ano 8

我的(真的很晚了,我喜欢死灵法师徽章:-))解决方案:

  1. 安装wajig(一次):

    sudo apt-get install wajig 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当您想要完全更新/升级您的系统时

    wajig dailyupgrade
    
    Run Code Online (Sandbox Code Playgroud)

    (如果需要,它会要求输入密码,并为您执行所有更新、升级、dist-upgrade 和自动删除步骤)。