Answers:
简而言之,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分钟内不会提示您,因此只会提示您输入一次密码(或根本不提示您)。
apt-get update
需要一段时间,这里的互联网仍然很原始。
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作为结果之一。
&&
他们之间的sudo apt-get update&&sudo apt-get install foo bar baz
&&
表示第二条命令仅在第一个命令成功的情况下运行。如果您不关心第一个命令的成功,请;
改用。
它会更新您计算机上的可用软件列表。
您的计算机有一个列表(如目录),其中包含Ubuntu服务器可用的所有可用软件。但是可用的软件和版本可能会更改,因此“更新”将命中服务器并查看可用的软件以更新其本地列表(或目录)。
请注意,这与update
有所不同upgrade
。如上所述,更新将获取可用软件并更新列表,同时upgrade
将在计算机上安装新版本的软件(实际软件更新)。
要实际升级软件(而不是“更新”列表),请执行以下命令
sudo apt-get upgrade
通常在“更新”之后执行。
sudo apt-get install
为了什么?安装特定的软件包而不是常规升级?
当您使用sudo apt-get install ...
(或sudo aptitude install ...
)从命令行安装软件包时,或者使用(upgrade
或dist-upgrade
代替install
)从命令行升级软件包时,以下信息是从本地系统的配置而不是从Internet获得的:
有哪些软件包可用
有哪些版本可用
应从中检索可用软件包的位置
运行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
每个软件包。仅当信息有一段时间没有更新时,您才应确保运行它。
正如上面的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代理?并且您是否能够使它再次发生,或者只是一次发生?如果是孤立的异常,我想知道问题是否可能是由于服务器临时配置错误引起的。您使用什么镜子?有了更多信息,也许我可以改善答案。(顺便说一句,这是要作为一个单独的答案,还是应该将其转换为评论?)
让我们考虑在Ubuntu 上安装VLC媒体播放器的示例:
sudo apt-get update
它将检查存储库中是否有可用的更新。
鉴于
sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc
将从我们搜索的存储库中安装VLC媒体播放器。
如果您以root用户(管理员)身份登录,则不必使用sudo
,因为您已经具有超级用户特权。
sudo apt-get update
安装软件包时,是否总是需要运行命令吗?如果不这样做,有什么不利条件?