1. yum是什么?
yum(全称为Yellowdog Updater, Modified)是一个在Fedora、RedHat Enterprise Linux(RHEL)、CentOS等基于RPM(Red Hat Package Manager)的Linux发行版中广泛使用的包管理工具。yum的主要功能包括软件包的安装、卸载、更新和查询,能够自动处理依赖关系,极大地简化了软件包管理的复杂性。
2. yum有什么用?
yum的主要用途包括:
- 安装软件包:从远程仓库中安装所需的软件包,并自动处理依赖关系。
- 卸载软件包:卸载系统中的已安装软件包,同时自动处理相关依赖关系。
- 更新软件包:更新系统中已经安装的软件包到最新版本,确保系统的安全性和稳定性。
- 查询软件包:提供软件包的信息查询功能,包括可用软件包、已安装软件包的信息,甚至查看某个软件包的文件列表。
- 管理仓库:通过配置文件管理不同的远程仓库,指定软件包的来源。
3. yum怎么用?
yum的基本用法包括:
- 安装软件包:使用
yum install
命令,后跟要安装的软件包名称。例如,yum install httpd
用于安装Apache Web服务器。 - 更新软件包:使用
yum update
命令来更新已安装的软件包。例如,yum update
用于更新所有已安装的软件包。 - 搜索软件包:使用
yum search
命令来搜索可用的软件包。例如,yum search mysql
用于搜索名为“mysql”的软件包。 - 删除软件包:使用
yum remove
命令来删除已安装的软件包。例如,yum remove httpd
用于删除Apache Web服务器软件包。 - 清理缓存:yum会在系统中保存已安装的软件包的副本,可以使用
yum clean
命令来清理这些缓存文件。例如,yum clean all
用于清理所有yum缓存。
4.yum的工作流程
- 仓库配置:
- yum首先需要根据配置文件中定义的仓库来获取软件包。这些配置文件通常位于
/etc/yum.repos.d/
目录下,每个.repo
文件代表一个仓库的配置。 - 配置文件中包含了仓库的URL、是否启用GPG校验、是否启用该仓库等信息。
- yum首先需要根据配置文件中定义的仓库来获取软件包。这些配置文件通常位于
- 元数据下载:
- 当用户执行yum命令(如安装、更新等)时,yum会首先去配置的仓库中下载元数据。
- 元数据包含了软件包的信息,如名称、版本、依赖关系等。这些信息对于yum来说至关重要,因为它需要根据这些信息来确定如何安装、更新或删除软件包。
- 依赖解析:
- yum在下载元数据后,会解析软件包的依赖关系。
- 它会检查软件包所依赖的其他软件包是否已经安装,如果没有,则会自动下载和安装这些依赖的软件包。
- 这一步骤是yum能够自动处理依赖关系的核心所在。
- 软件包下载:
- 一旦依赖关系解析完毕,yum将根据用户的请求从仓库中下载所需的软件包。
- 如果软件包已经存在于本地缓存中(默认在
/var/cache/yum/$basearch/$releasever
),则yum会直接使用缓存中的软件包,以避免不必要的下载。
- 安装和更新:
- 下载完成后,yum将执行安装或更新操作。
- 如果软件包已经安装,yum将检查其版本并进行必要的更新。
- yum使用事务(Transaction)来管理软件包的安装和更新,以确保软件包的一致性和完整性。事务是一个操作的集合,可以包括多个软件包的安装、更新或删除。
- 事务处理:
- yum在事务中执行所有的操作,包括下载、安装、更新或删除软件包。
- 在执行事务之前,yum会向用户显示一个摘要并请求确认。一旦用户确认,yum将执行事务中的所有操作。
- 缓存管理:
- yum还提供了缓存管理功能,允许用户清理不再需要的缓存文件以节省磁盘空间。
- 常用的缓存清理命令包括
yum clean packages
(清除缓存目录下的软件包)、yum clean headers
(清除缓存目录下的headers)和yum clean all
(清除所有缓存文件)。
5. yum的配置文件及解析
yum的配置文件主要包括全局配置文件(如/etc/yum.conf
)和仓库配置文件(位于/etc/yum.repos.d/
目录下的.repo
文件)。
- 全局配置文件(yum.conf):该文件包含了yum的全局性设置,如缓存目录、日志文件位置、包的策略、发行版信息、重试次数等。例如,
cachedir
指定了yum缓存的目录,logfile
指定了yum的日志文件位置。[main] #cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever。 cachedir=/var/cache/yum/$basearch/$releasever #keepcache:是否保留缓存内容,0:表示安装后删除软件包,1表示安装后保留软件包 keepcache=1 #debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录 debuglevel=2 #logfile:存放系统更新软件的日志的目录。用户可以到/var/log/yum.log文件去查询自己在过去的日子里都做了哪些更新。 logfile=/var/log/yum.log #pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个 服务器上的软件安装。一般都是选newest。 pkgpolicy=newest #指定一个软件包,yum会根据这个包判断你的发行版本,默认是RedHat-release,也可以是安装的任何针对自己发行版的rpm包。 distroverpkg=CentOS-release #tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。 tolerant=1 #exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。 exactarch=1 #retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。 retries=20 #此选项在进行发行版跨版本升级的时候会用到。 obsoletes=1 #gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。 gpgcheck=1 #默认都会被include 进来 也就是说 /etc/yum.repos.d/xx.repo 无论配置文件有多少个 每个里面有多少个[name] 最后其实都被整合到 一个里面看就是了 重复的[name]后面的覆盖前面的 reposdir=/etc/yy.rm #默认是 /etc/yum.repos.d/ 低下的 xx.repo后缀文件 #exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。 exclude=xxx #该选项用户指定 .repo 文件的绝对路径。.repo 文件包含软件仓库的信息 (作用与 /etc/yum.conf 文件中的 [repository] 片段相同)。 reposdir=[包含 .repo 文件的目录的绝对路径]
- 仓库配置文件(.repo文件):这些文件用于指定软件包的来源,包括仓库的名称、描述、基础URL、是否启用GPG校验等。每个
.repo
文件都代表一个仓库的配置,通过[serverid]
来区分不同的仓库。例如,baseurl
指定了仓库的URL,enabled
指定了该仓库是否启用。 -
#serverid是用于区别各个不同的repository,必须有一个独一无二的名称。若重复了,是前面覆盖后面--还是反过来呢???用enabled 测试是后面覆盖前面 [serverid] #name,是对repository的描述,支持像$releasever $basearch这样的变量; name=Fedora Core $releasever - $basearch - Released Updates name=Some name for this server #baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是: #baseurl=url://server1/path/to/repository/ #url://server2/path/to/repository/ #url://server3/path/to/repository/ #其中url支持的协议有 http:// ftp:// file://三种。baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但#baseurl只能有一个,也就是说不能像如下格式: #baseurl=url://server1/path/to/repository/ #baseurl=url://server2/path/to/repository/ #baseurl=url://server3/path/to/repository/ #其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。 baseurl=url://path/to/repository/ #指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换 #成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。 #解释下几个变量 #$releasever 发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。 #$arch cpu体系,如i686,athlon等 #$basearch cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。 # #url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如: #gpgcheck=1 #exclude=gaim #其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用 #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch #failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。 failovermethod=priority #当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。 #通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库 enabled=[1 or 0]