我想知道sudo apt-get update的功能是什么?

它会更新什么?

#1 楼

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




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


用于重新同步软件包索引文件的来源。可用软件包的索引是从/etc/apt/sources.list(5)中指定的位置获取的。应始终在升级或dist-upgrade之前执行更新。如果APT通过apt-get upgrade知道了这些新版本,则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分钟左右内提示您只会提示您输入一次密码(或完全不会提示您)。

评论


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

–JohnnyQ
16 Jun 10'在10:08



@JohnnyQ如果您不运行该命令,则可能会安装过期的软件包。

– Nanofarad
16年6月10日在10:26

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

–JohnnyQ
16年6月10日在16:53



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

–满载B.
17年11月11日在4:48



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

– jgreve
'18 Sep 1'在14:31

#2 楼

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

apt-get --help


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

sudo


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

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 ”基本上,只需像这样一起键入2条命令就可以执行2件事?

–极乐世界
2012年11月27日0:46



@Elysium是的,如果它们之间有&&作为sudo apt-get update && sudo apt-get install foo bar baz

– Nanofarad
2012年11月27日,0:48

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

– Flimm
2012年11月27日13:36

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

– teewuane
16年5月6日在18:25

任何人都知道为什么不只是在每次启动时自动执行,还是在cron中执行此操作?似乎是一个额外的管理步骤。

–丹·蔡斯(Dan Chase)
3月21日21:38

#3 楼

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

简而言之:强烈建议在安装前运行sudo apt-get update,但是如果确实时间紧迫,则可能会跳过它,除非自上次apt-get update以来已更改存储库或PPA。

#4 楼

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

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

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

实际升级软件(而非“更新”)列表),则执行命令

sudo apt-get upgrade


,该命令通常在“更新”之后执行。

评论


那么sudo apt-get install是什么?安装特定的软件包而不是一般的升级?

– Peter Mortensen
17年11月26日在17:42

#5 楼

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

评论


不错的把戏!

–艾默生·谢
2012年6月17日下午6:41

#6 楼

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


有哪些可用的软件包
有哪些可用的版本
应从其中检索可用的软件包

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

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

因为有关可用哪些更新版本的软件包的信息可以通过以下方式获得:运行sudo apt-get update(或sudo aptitude update),建议在安装任何软件包之前先运行此软件包,并且即使没有添加或删除任何软件源(例如PPA),也必须运行该软件包以安装最新更新。 >
请注意,如果要在同一时间执行多个软件包管理操作,则无需在每个软件包之前运行sudo apt-get update。只有当信息有一段时间没有更新时,您才应确保运行它。

#7 楼

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

如果尝试安装

apt-get install foobar


,并且foobar或依赖项在存储库中没有最新版本,则可能会遇到麻烦。如果手动安装.deb文件或通过第三方安装ppa,这可能会特别成问题。

基本上可以确保您的列表与主列表匹配。

#8 楼

正如Eliah Kagan前面提到的那样,您希望GUI应用程序在apt-get update / apt-get install之前运行apt-get upgrade,但是我只是在相对较新的进攻安全型VM机器上发现了一个有趣的错误404,这让我感到困惑。 />
我从命令行运行了apt-get update,然后再次尝试了系统工具/软件更新命令,这一次它没有出现404错误。

所以,我猜您不能总是假设apt-get update是从GUI应用程序运行的...

评论


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

– Eliah Kagan
2015年4月2日,下午3:05

#9 楼

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

sudo apt-get update


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

其中

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


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

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