问题描述
我想知道sudo apt-get update
是做什么的?
它更新什么?
最佳解决方法
简而言之,apt-get update
实际上并未安装新版本的软件。相反,它会更新用于需要升级的软件包升级的软件包列表以及刚刚存储到软件仓库的新软件包。
-
apt-get update
从存储库下载软件包列表,并从它们下载”updates”以获取有关软件包及其依赖项的最新版本的信息。它将为所有存储库和PPA执行此操作。来自http://linux.die.net/man/8/apt-get:用于re-synchronize来源的包索引文件。可用包的索引是从/etc/apt/sources.list
(5)中指定的位置获取的。在升级或dist-upgrade之前应始终执行更新。 -
如果APT通过
apt-get update
了解这些新版本,apt-get upgrade
将获取机器上现有的新版本软件包。来自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有一个”smart”冲突解决系统,它会尝试升级最重要的软件包,如果有必要,可以牺牲不太重要的软件包。/etc/apt/sources.list
(5)文件包含从中检索所需软件包文件的位置列表。另请参阅apt_preferences(5)了解over-riding机制的各种软件包的常规设置。
您可以按如下方式将命令与&&
组合在一起:
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分钟内不会提示您,所以系统只会提示您输入密码一次(或根本不提供)。
次佳解决方法
Google搜索可以为您提供几乎任何终端命令的定义,也可以在终端中帮助您。例如,
apt-get --help
sudo apt-get update
基本上有三个部分:
sudo
使用super-user(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作为结果之一。
第三种解决方法
运行sudo apt-get update
只需确保所有存储库和PPA的软件包列表都是最新的。如果你不运行这个命令,你可能会得到正在安装的各种软件包的旧版本,或者更糟糕的是,依赖性问题。如果您刚刚添加了PPA并且没有更新,则PPA中没有任何内容可以工作,因为您没有该PPA或存储库中的软件包列表。
简而言之:强烈建议在安装之前运行sudo apt-get update
,但如果您真的需要时间,可能会跳过它,除非自上次apt-get update
以来更改了存储库或PPA。
第四种方法
在安装新软件包之前,需要运行apt-get update
一次,因为这会更新本地存储库信息。如果您打算立即安装多个软件包,则不需要运行apt-get update
。另外,如果键入sudo apt-get install package1 package2...
,则可以一次安装多个软件包
第五种方法
它会更新计算机上的可用软件列表。
您的计算机有一个列表(如目录),其中包含Ubuntu服务器可用的所有可用软件。但可用的软件和版本可能会发生变化,因此”update”将会触及服务器,并查看可用的软件以更新其本地列表(或目录)。
请注意,update
与upgrade
不同。如上所述,更新将提取可用软件并更新列表,而upgrade
将安装计算机上安装的新版软件(实际软件更新)。
要实际升级软件(而不是”update”列表),请执行该命令
sudo apt-get upgrade
通常在”update”后执行。
第六种方法
从命令行使用sudo apt-get install ...
(或sudo aptitude install ...
)安装软件包时,或者从命令行(使用upgrade
或dist-upgrade
而不是install
)升级它们时,以下信息是从本地系统的配置中获得的,而不是从Internet获得的:
-
什么软件包可用
-
它们有哪些版本可用
-
应从中检索可用的软件包
运行sudo apt-get update
(或sudo aptitude update
)会在您的本地系统上更新它。这是从Internet资源中实际检索有关可安装哪些软件包的信息的步骤,包括可用的当前安装软件包的更新。
当您使用GUI界面(更新管理器,软件中心或新立得软件包管理器)安装软件包时,sudo apt-get update
的工作将自动完成。当你从命令行安装软件包时,它不是,你应该自己一直这样做,除非你最近这样做了。
由于通过运行sudo apt-get update
(或sudo aptitude update
)获取有关可用软件包的更新版本的信息,因此建议您在安装任何软件包之前运行该软件包,并且运行该软件以安装最新的更新(即使您尚未添加或删除任何软件资源(例如PPA)。
请注意,如果您要同时执行多个包管理操作,则不需要在每个包之前运行sudo apt-get update
。只有在信息一段时间没有更新的情况下,你才能确保运行它。
第七种方法
正如Eliah Kagan在上面提到的那样,您会希望GUI应用程序能够在apt-get install
/apt-get upgrade
之前运行apt-get update
,但是我刚刚在一台相对较新的offensive-security VM机器上发现了一个有趣的错误404,让我难以忍受一分钟。
从命令行运行apt-get update
,然后再次尝试系统工具/Software-Update命令,这次它运行时没有404错误。
所以,我想你不能总是假设apt-get update
是从GUI应用程序运行的…
第八种方法
正如很多人在我之前所说的,这会更新您的本地存储库(软件包列表)。
如果您尝试安装,可能会遇到麻烦
apt-get install foobar
而foobar或依赖项在存储库中没有最新版本。如果手动安装.deb文件或来自第三方的ppa,这可能会特别有问题。
基本上它确保您的列表与主列表匹配。
第九种方法
我们来看看在Ubuntu上安装VLC media player的例子:
sudo apt-get update
它会检查存储库中的可用更新。
而
sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc
将从我们搜索的存储库安装VLC媒体播放器。
如果您以root用户(管理员)身份登录,则不必使用sudo
,因为您已拥有超级用户权限。
参考资料