apt full-upgrade 与 apt-get dist-upgrade

a90*_*ser 80 command-line apt

根据手册页:

  • apt 有参数 full-upgrade
  • apt-get有参数dist-upgrade

两者是同一个命令吗?

顺便说一句:这是 Ubuntu 16.04 中官方推荐的命令?apt或者apt-get

sch*_*hod 52

apt full-upgrade执行与 相同的功能apt-get dist-upgrade

男人

full-upgrade (apt-get(8)) 执行升级功能,但如果需要将当前安装的软件包作为整体升级,则会删除当前安装的软件包。

人 apt-get

dist-upgrade 除了执行升级功能外,还智能处理新版本包的依赖变化;apt-get 有一个“智能”的冲突解决系统,它会在必要时尝试升级最重要的软件包,而牺牲不太重要的软件包。因此 dist-upgrade 命令可能会删除一些软件包。/etc/apt/sources.list 文件包含从中检索所需包文件的位置列表。另请参阅 apt_preferences(5) 以了解覆盖单个包的常规设置的机制。

  • “full-upgrade”是在必要时删除已安装的包,而“dist-upgrade”是关于“智能处理新版本包的依赖关系”,它是如何相同的功能? (12认同)
  • 为什么用一个做同样事情的新名字来混淆?你可以做`apt dist-upgrade`(我刚刚试过)或者你可以做`apt full-upgrade`,你说他们做同样的事情。 (7认同)
  • @Zboson 新名称的原因是“dist-upgrade”名称本身对许多用户来说非常令人困惑:虽然它被命名是因为它是您在发行版之间升级时需要的东西,但听起来好像太多了*仅*用于这种情况,而实际上它的适用范围要广泛得多。 (7认同)
  • https://itsfoss.com/apt-vs-apt-get-difference/ (4认同)
  • 这是相同的功能。它只是 `apt` 中 `apt-get` 命令的别名。https://sources.debian.org/src/apt/1.6.1/cmdline/apt.cc/?hl=74#L74(尽管回购中似乎缺少实际调用的宏)。 (4认同)
  • @kael 肯定还有其他东西在起作用,因为它们执行相同的代码。查看我的答案https://askubuntu.com/a/1316448/981291 (4认同)
  • **小心!!** 它们不是同一个命令。我刚刚运行了“sudo apt-get full-upgrade”,它会自动删除一些关键的软件包,以升级一些琐碎的软件包。我现在正在利用工作日的最后一个小时来收拾烂摊子。我经常运行“sudo apt-get dist-upgrade”,它会执行正确的升级。这是更好的命令。 (3认同)
  • apt-get 的手册页还提到“dist-upgrade 命令可能因此删除一些软件包。”,所以我认为这个手册页比 apt 的手册页更精确。另请参阅:http://askubuntu.com/a/605721/647789 (2认同)

ber*_*nie 13

是的,它们是相同的命令。aptcmdline/apt.cc 源文件的这一部分证明了这一点:

static std::vector<aptDispatchWithHelp> GetCommands()            /*{{{*/
{
   return {
      // [snip]
    
      // system wide stuff
      {"update", &DoUpdate, _("update list of available packages")},
      {"upgrade", &DoUpgrade, _("upgrade the system by installing/upgrading packages")},
      {"full-upgrade", &DoDistUpgrade, _("upgrade the system by removing/installing/upgrading packages")},
    
      // misc
      {"edit-sources", &EditSources, _("edit the source information file")},
      {"moo", &DoMoo, nullptr},
    
      // for compat with muscle memory
      {"dist-upgrade", &DoDistUpgrade, nullptr},
    
      // [snip]
   };
}
Run Code Online (Sandbox Code Playgroud)

为了完整性,cmdline/apt-get.cc

static std::vector<aptDispatchWithHelp> GetCommands()           /*{{{*/
{
   return {
      // [snip]
      {"dist-upgrade", &DoDistUpgrade, _("Distribution upgrade, see apt-get(8)")},
      {"full-upgrade", &DoDistUpgrade, nullptr},
      // [snip]
   };
}
Run Code Online (Sandbox Code Playgroud)

对于两者aptapt-getfull-upgrade并且dist-upgrade两者都指代相同的DoDistUpgrade功能,因此做完全相同的事情。

我首先发布此信息是为了在编辑中补充 schod 的答案,但它被拒绝了,所以我自己回答...


小智 6

使用 apt 作为首选,但如果您正在编写脚本,请使用 apt-get。apt-get 具有更稳定的输出(这意味着输出格式尽可能保持不变,以免破坏自动解析输出的脚本)。apt-get 还有一些 apt 中不可用的低级命令。

apt 和 apt-get 的手册页对 full-upgrade 和 dist-upgrade 的描述略有不同,但它们可能是相同的命令(apt 接受 dist-upgrade 作为 full-upgrade 的别名)。这是 apt-get 稳定性的一个很好的例子。在 apt 中,名称被更改为更加用户友好,而在 apt-get 中,名称保持不变,以免破坏与旧脚​​本的兼容性。