“ sudo apt-get更新”是做什么的?


Answers:


549

简而言之,apt-get update实际上并不安装新版本的软件。相反,它会更新软件包列表以升级需要升级的软件包,以及刚刚进入存储库的新软件包。

  • apt-get update从存储库下载软件包列表,然后“更新”它们以获取有关软件包的最新版本及其依赖项的信息。它将对所有存储库和PPA执行此操作。从http://linux.die.net/man/8/apt-get

    用于从其源重新同步程序包索引文件。可用软件包的索引是从/etc/apt/sources.list(5)中指定的位置获取的。应始终在升级或dist-upgrade之前执行更新。

  • apt-get upgrade如果APT通过的方式知道这些新版本的软件包,它将获取计算机上现有软件包的新版本apt-get update

    http://linux.die.net/man/8/apt-get

    用于从/etc/apt/sources.list(5)中枚举的源安装系统上当前安装的所有软件包的最新版本。当前安装有可用新版本的软件包将被检索和升级;在任何情况下,都不会删除当前已安装的软件包,也不会检索和安装尚未安装的软件包。如果不更改其他软件包的安装状态而无法升级的当前安装软件包的新版本将保留为当前版本。[强调我的]必须首先执行更新,以便apt-get知道有可用的新版本的软件包。

  • apt-get dist-upgrade将执行与相同的工作apt-get upgrade,另外还将智能处理依赖关系,因此它可能会删除过时的软件包或添加新的软件包。请参阅此处:什么是“ dist-upgrade”,为什么它比“ upgrade”更多升级?

    http://linux.die.net/man/8/apt-get

    除了执行升级功能外,此选项还可以智能地处理新版本软件包的依赖关系。apt-get具有一个“智能”冲突解决系统,它将在必要时尝试以不重要的软​​件包为代价来升级最重要的软件包。的/etc/apt/sources.list(5)文件包含要从中检索所需的包的文件位置的列表。另请参阅apt_preferences(5),以了解一种重写单个软件包常规设置的机制。

您可以使用&&以下命令组合命令:

sudo apt-get update && sudo apt-get install foo bar baz foo-dev foo-dbg

或根据依赖关系的版本要求获取最新版本:

sudo apt-get update && sudo apt-get dist-upgrade

您需要sudo两次,但是由于sudo默认情况下自上次sudo操作以来约5分钟内不会提示您,因此只会提示您输入一次密码(或根本不提示您)。


11
sudo apt-get update安装软件包时,是否总是需要运行命令吗?如果不这样做,有什么不利条件?
JohnnyQ 2016年

14
@JohnnyQ如果不运行该命令,则可能安装了过期的软件包。
–ζ

啊,这听起来像是一种惯例。因此,我认为这实际上没有必要,特别是如果您仅使用基本软件包且基本命令通常不会更新的话。在我的情况下,问题是apt-get update需要一段时间,这里的互联网仍然很原始。
JohnnyQ

2
@JohnnyQ,如果您的apt-get更新很慢,那么您的apt-get dist-upgrade也将很慢,因此,不首先不进行apt-get更新真的不是一个论点。顺便说一句,您可以通过查看文件夹/etc/apt/sources.d/来查看是否已添加任何自定义存储库,其中之一可能没有响应,从而加快了apt-get更新的速度,这将减慢整个更新过程。
Mladen B.

1
顺便说一句,“ apt”代表高级打包工具(wiki.debian.org/Apt “什么是APT?”)。前几天我学到了一些东西,以为我愿意分享。(“ apt”经常出现在man apt-get,man apt中,但我从未见过缩写词的扩展)。
jgreve

47

Google搜索可以为您提供几乎所有终端命令的定义,就像终端中的--help一样。例如,

apt-get --help

sudo apt-get update 本质上包含三个部分:

sudo

使用超级用户(root)功能执行以下命令。许多需要修改系统文件或安装应用程序的操作都需要额外的权限才能通过。

apt-get

是Ubuntu用来安装,删除和管理软件包的命令行工具

update

是apt-get程序使用的选项,该程序从Internet上的服务器更新软件包列表。软件包列表为apt-get实用程序提供了有关您可以使用apt-get安装的软件包的重要信息。当给出安装命令时,apt-get使用这些列表来确定要安装的软件。例如

sudo apt-get install guake

将安装Guake终端,因为该终端当前在我的计算机的本地软件列表中列出。但是,这可能不是合适的版本,或者如果该程序是新的,则可能根本不可用。因此,在使用apt-get安装软件时,通常输入

sudo apt-get update
sudo apt-get install <package>

确保apt-get知道安装软件包的最新版本。

help.ubuntu.com网站是另一个有用的信息来源。例如,如果您搜索该站点,apt-get则会找到AptGet / Howto作为结果之一。


Alex,我基本上可以像您所说的那样使用命令:“ apt-get update apt-get install <package>”基本上,只需像这样一起键入2个命令就可以执行2件事?
极乐世界(Elysium)2012年

1
@Elysium是的,如果你有&&他们之间的sudo apt-get update&&sudo apt-get install foo bar baz
ζ--

7
使用&&表示第二条命令仅在第一个命令成功的情况下运行。如果您不关心第一个命令的成功,请;改用。
Flimm

4
Google搜索使我想到了这个问题/答案。仅供参考;)
teewuane

19

sudo apt-get update只需运行即可确保所有存储库和PPA中的软件包列表都是最新的。如果不运行此命令,则可能是正在安装的各种软件包的旧版本,或者更糟糕的是依赖性问题。如果您刚刚添加了PPA而未更新,则PPA中的任何内容都将无法使用,因为您没有该PPA或存储库中的软件包列表。

简而言之:强烈建议sudo apt-get update在安装之前运行,但是如果确实时间紧迫,则可能会跳过该步骤,除非您从上一个版本以来已更改存储库或PPA apt-get update


13

它会更新您计算机上的可用软件列表。

您的计算机有一个列表(如目录),其中包含Ubuntu服务器可用的所有可用软件。但是可用的软件和版本可能会更改,因此“更新”将命中服务器并查看可用的软件以更新其本地列表(或目录)。

请注意,这与update有所不同upgrade。如上所述,更新将获取可用软件并更新列表,同时upgrade将在计算机上安装新版本的软件(实际软件更新)。

要实际升级软件(而不是“更新”列表),请执行以下命令

sudo apt-get upgrade

通常在“更新”之后执行。


那是sudo apt-get install为了什么?安装特定的软件包而不是常规升级?
彼得·莫滕森

12

apt-get update安装新软件包之前,您需要运行一次,因为这会更新本地存储库信息。如果您要紧接安装多个软件包,则无需运行apt-get update。另外,如果您键入以下内容,则可以一次安装多个软件包 sudo apt-get install package1 package2...


不错的把戏!
艾默生·谢

6

当您使用sudo apt-get install ...(或sudo aptitude install ...)从命令行安装软件包时,或者使用(upgradedist-upgrade代替install)从命令行升级软件包时,以下信息是从本地系统的配置而不是从Internet获得的:

  1. 有哪些软件包可用

  2. 有哪些版本可用

  3. 应从中检索可用软件包的位置

运行sudo apt-get update(或sudo aptitude update)将在本地系统上对此进行更新。此步骤实际上从Internet来源检索有关可以安装哪些软件包的信息,包括可用的对当前已安装软件包的更新

使用GUI界面(更新管理器,软件中心或Synaptic软件包管理器)安装软件包时,将sudo apt-get update自动完成的工作。从命令行安装软件包时,不是这样,除非您最近才这样做,否则应该始终自己进行安装

由于可以通过运行sudo apt-get update(或sudo aptitude update)获得有关可用软件包的更新版本的信息,因此建议在安装任何软件包之前先运行此软件包,并且有必要运行该软件包以安装最新更新,即使您没有添加或删除任何软件也是如此。来源(例如PPA)

请注意,如果要同时执行多个软件包管理操作,则无需先运行sudo apt-get update每个软件包。仅当信息有一段时间没有更新时,您才应确保运行它。


4

正如上面的Eliah Kagan所提到的,您希望 GUI应用程序可以apt-get updateapt-get install/ 之前运行apt-get upgrade,但是我只是在相对较新的攻击性VM机器上发现了一个有趣的错误404,这让我感到困惑。

我从命令行运行apt-get update,然后再次尝试了系统工具/软件更新命令,这次它没有404错误地运行。

因此,我想您不能总是假设它apt-get update是从GUI应用程序运行的。


有趣的是...与apt-get运行软件更新程序/更新管理器进行自动检查相比,运行时服务器和服务器之间可能存在一些不寻常的联网情况,这种情况能得到更好的处理?您是否使用HTTP代理?并且您是否能够使它再次发生,或者只是一次发生?如果是孤立的异常,我想知道问题是否可能是由于服务器临时配置错误引起的。您使用什么镜子?有了更多信息,也许我可以改善答案。(顺便说一句,这是要作为一个单独的答案,还是应该将其转换为评论?)
Eliah Kagan 2015年

3

就像我之前有很多人说的那样,这会更新您的本地存储库(软件包列表)。

如果尝试安装,可能会遇到麻烦

apt-get install foobar

和foobar或依赖项在存储库中没有最新版本。如果手动安装.deb文件或由第三方安装ppa,这可能会特别成问题。

基本上,它确保您的列表列表匹配。


2

让我们考虑在Ubuntu 上安装VLC媒体播放器的示例:

sudo apt-get update

它将检查存储库中是否有可用的更新。

鉴于

sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc

将从我们搜索的存储库中安装VLC媒体播放器。

如果您以root用户(管理员)身份登录,则不必使用sudo,因为您已经具有超级用户特权。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.