咱们在以前的章节中讲到了Linux的程序包管理的基础与实现,后面也讲述了RPM包的管理命令实现了管理包的功能,主要用的是rpm命令,那么rpm实现程序管理总结以下:前端
rpm命令实现程序管理: 安装:-ivh, --nodeps, --replacepkgs 卸载:-e, --nodeps, --replacepkgs 升级:-Uvh, -Fvh, --nodeps, --oldpackage 查询:-q, -qa, -qf, -qi, -qd, -qc, -q, --scripts, -q --chagelog, -q --pvevides, -q --requires 校验:-V 导入GPG密钥:--import, -K, --nodigest, --nosignature 数据库重建:--initdb, --rebuiliddb
那么在接下来的章节中,咱们继续来将Linux程序包管理。node
在上一章中咱们讲述过,使用rpm包管理程序会有一些问题,好比说安装包之间存在这依赖关系,一旦安装时,若是很复杂的话,安装时须要很长时间才能完成,由于咱们必需要想办法手动解决依赖关系,固然,咱们可使用--nodeps
来忽略安装包之间的依赖关系,其致使的结果就是,安装时没有问题,但使用时会就有些问题,因此说为了可以保证正常使用的前提下,就必需要解决依赖关系。而手动解决一般是一件很麻烦的事情,那么咱们就要采用高于.deb
或高于.rpm
包的底层管理工具,它能实现前端自动解决依赖关系,完成正常的安装,解决用户的后顾之忧,在这种场景下完成对应的CentOS
系统当中有两个前端安装工具,一种为yum
,另外一种是新版的dnf
。shell
因为CentOS
尚未官方支持的dnf
工具,该工具在Fedora22+
当中才刚开始引入,不过在CentOS 7
中使用dnf
也并不是不可能,yum是一款C/S架构的程序包管理工具,在本地客户端可达的网络服务器,首先该服务器是一个文件服务器,要提供文件存储并提供文件服务等功能,提供了很大的存储空间去放置咱们所能使用的各类rpm包,然后整个目录经过文件共享的服务功能输出到外部主机可以进行访问,然后任何一个Linux主机,自己支持rpm包的基本功能,同时在这个基础之上又能使用yum工具,而yum的工做原理是当用户安装某个程序包时,使用yum命令接收到由用户所安装到的包请求以后,该命令就会尝试根据本地的配置文件提供的服务器路径访问地址URL
,那么yum接收到所谓的安装包程序以后,尝试着经过本地的配置文件指令的URL去找远程网络服务器主机。数据库
为了不将网络远程服务器所提供的全部安装包下载到本地,远程服务器和yum它们彼此之间互相工做的模式为:这个服务器要提供一个叫作程序包的仓库(repository),对于这个仓库要有元数据信息或者要有描述性的数据信息,这个信息文件存放这文件包的名字、版本以及包与包之间的依赖关系等,都存放在该文件中,因此当这个yum客户端试图经过远程网络服务器去获取某个安装包时,yum客户端首先请求将元数据信息文件发送过来,下载至本地以后放置在本地的一个缓存区域中,yum客户端就开始分析本地元数据当中有没有用户去请求的安装包名,若是有,读取这个包,尝试着分析该包的依赖关系,而分析依赖关系也根据这个元数据文件,由于这个元数据文件定义在网络上的服务仓库全部的安装包,以及程序包之间的依赖关系,因此yum客户端在本地经过该文件分析完成以后,然后又查询本地所被依赖的安装包,分析完成以后剩余未安装的包列举出来,最后扮演文件服务器去在该网络主机中下载程序包,下载完成以后先缓存在本地,以后开始执行相似于rpm的安装操做。而安装时首先会安装被依赖的安装包,安装完成以后则返回客户端提示安装成功,以后将缓存下来的安装包删除,以节约空间。但元数据文件不会删除,等到下次安装时,可直接读取该元数据文件。vim
yum客户端每一次都会去请求网络主机上的元数据,以检测数据包等信息是否发生改变,固然频繁请求也会占用带宽,因此元数据可能不止一个,有的存放包名,有的存放版本等,除此以外,还有特殊文件,这个特殊文件记录了每个元数据文件的校验码,因此在请求时,先请求的是校验码,缓存在本地进行对比,若是校验码同样,本地缓存有效,不然请求元数据。缓存
对于应用场景来说,yum首先是客户端,也是一个自我独立的管理组件,这个组件须要请求远程网络服务主机上的仓库,从仓库中下载元数据文件,在本地可以完成yum的查询等操做,当进行安装时,yum须要请求网络服务器去下载该程序包文件进行安装,这并非传统的C/S,而是访问机制为C/S架构。服务器
为了可以进行快速访问,全球有许多的镜像站,咱们能够找一个可以快速访问而且受信任的镜像站访问就能够了。该配置文件可以指向一大推镜像服务器,咱们称之为镜像列表,从镜像列表当中挑选出符合一个,咱们就可以进行访问。网络
yum在设计上是有很大缺陷的,其缺点为:好比虽然可以解决依赖关系,但在某个安装过程当中若是半途停止时,下一次重启安装时将没法解决,所以dnf主要就是应该解决这个问题的。但使用dnf时和yum是没有什么区别。架构
所以对于咱们来说,首先对于本地Linux上要有yum客户端及工具还有yum命令,第二步yum自己须要经过配置文件去找到该网络主机或者本地主机的远程仓库,因此这个配置文件做为管理员须要指定,那么第三步就是若是互联网带宽足够大的话,可使用互联网上某个机构提供的仓库,尤为是镜像站点中的仓库,毕竟有许多较为新版的安装包。或许能够将远程服务器的镜像到本地。ide
但其实yum并非rpm命令的取代者,它只是rpm的前端管理工具,意味着yum须要依赖rpm的存在,若是仅有yum是不能够的。
若是在本地建立yum仓库的话,咱们甚至还得须要配置一台服务器主机,通常来讲yum支持的文件服务器共有两种,一种是ftp,另外一种是http,不管是哪种,都得须要经过URL来进行输出,把程序包复制在存储空间以后,还得须要建立一个元数据文件,这个元数据咱们可使用命令来建立完成,对于元数据文件并非凭空而来,而是分析每个程序包自带的rpm数据抽取出来给罗列堆积在文件中实现的。而建立元数据文件的命令为:createrepo
。
不过该命令可能建立高级仓库比较难,由于高级仓库有可能要对程序包进行分组,在安装时咱们能够对这个一个组的程序包进行安装,并且建立该组时使用.xml
格式的。意味着咱们必须精通xml的语法才可能编写,好在咱们必须选择。
其实yum是由yellow dog
所研发的,那么yum的全称为Yellow Update Modifiter
,yum要依赖于它的yum仓库,全称为yum repository
,简称为yum repo
,那么咱们将yum的特性总结以下:
CentOS: yum, dnf URL: http://mirrors.aliyun.com YUM: Yellow Dog, Yellow Update Modifter yum repository: yum repo 存储了众多rpm包,以及包相关的元数据文件(放置于特定的目录下:repodata);
须要注意一点的是:repodata所在的路径,就是仓库所指向的路径。
一个仓库在访问时有多种路径,通常都是由文件服务器来提供的,咱们在文件服务器上经过某种协议来对用户进行访问。
文件服务器: ftp:// http:// nfs:// file:///
yum自己就是一个独立程序包来能够进行安装,也有本身的配置文件,共有两段组成,其配置文件路径在:
yum客户端: 配置文件: /etc/yum.conf:为全部仓库提供公共配置; /etc/yum.repos.d/*.repo:为仓库的指向提供配置;
对于用户来讲,咱们在/etc/yum.repos.d/
目录下去配置yum源仓库配置文件,名称必须得是.repo
,那么咱们接下来看一下yum是如何使用仓库的。
yum仓库的配置格式为,每个中括号都表明着仓库的ID,且具备惟一性,以后咱们指明它的名字和URL等信息用来配置进行定义。须要注意的是,等号=
左右是不能有分隔符的,不然就会有语法错误。
仓库指向的定义: [repositoryID] name=Some name for this repository baseurl=url://path/to/directory/ enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} 默认为:roundroin,意为随机挑选; cost= 默认为1000;
具备了这些概念以后,咱们就能够开始配置yum指向,然后开始使用仓库,以及使用yum命令了。
yum有许多的子命令,其命令用法格式为:
yum [options] [command] [package ...]
yum刚才讲到过有许许多多的子命令,每个子命令都用于实现不一样的管理功能,在man手册中记录了许多的子功能,咱们总结出来并查看。
command is one of: * install package1 [package2] [...] * update [package1] [package2] [...] * update-to [package1] [package2] [...] * update-minimal [package1] [package2] [...] * check-update * upgrade [package1] [package2] [...] * upgrade [package1] [package2] [...] * upgrade-to [package1] [package2] [...] * distribution-synchronization [package1] [package2] [...] * remove | erase package1 [package2] [...] * autoremove [package1] [...] * list [...] * info [...] * provides | whatprovides feature1 [feature2] [...] * provides | whatprovides feature1 [feature2] [...] * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] * makecache [fast] * groups [...] * search string1 [string2] [...] * shell [filename] * resolvedep dep1 [dep2] [...] (maintained for legacy reasons only - use repoquery or yum provides) * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) * reinstall package1 [package2] [...] * downgrade package1 [package2] [...] * deplist package1 [package2] [...] * repolist [all|enabled|disabled] * repoinfo [all|enabled|disabled] * repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...] * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] * load-transaction [txfile] * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel] * fssnapshot [summary | list | have-space | create | delete] * fs [filters | refilter | refilter-cleanup | du] * check * help [command]
以上能够看的出来子命令不少,咱们例举一些经常使用的子命令来总结一下该命令的用法,其总结以下:
那么第一个就是显示如何显示仓库列表,该子命令为repolist,能够显示全部、启用和禁用的,默认显示启用的。
显示仓库列表: repolist [all|enabled|disabled]
第二个简述的是如何显示程序包咱们使用list子命令,不只能够显示全部,还可使用glob通配机制。
显示程序包: list # yum list [all | glob_exp1] [glob_exp2] [...] # yum list {available|installed|updates} {glob_exp1} {...}
咱们学会如何列出并显示程序包以后,能够安装程序包,当有多个版本时,能够指明版本安装,默认安装最新版,该子命令为install。
安装程序包: install package1 [package2] [...] reinstall package1 [package2] [...]
接下来讲的是升级某个程序包,该子命令为update。
升级程序包: update [package1] [package2] [...] downgrade package1 [package2] [...] (降级)
那么还有一个叫作ckeck-update,该子命令为检查有哪些升级包可用。
检查可用升级: ckeck-update
若是在系统里面卸载一个程序包时,须要注意的是,卸载时,若是依赖于该程序包的程序也会被卸载,那么卸载使用remove子命令。
卸载程序包: remove | erase package1 [package2] [...]
咱们若是想查看某一个程序包的简要信息,显示类型和rpm -qi
命令基本相同,好比大小、日期、修改时间等,咱们能够用info子命令。
查看程序包的information: info [...]
还有就是能够查看某个特性或查看某个命令是由那个安装包提供的,该子命令为provides,至关于rpm -qf
。
查看指定的特性(能够是某文件)是由那个程序包所提供: provides | whatprovides feature1 [feature2] [...]
clean子命令是清理缓存的子命令,若是不想删除元数据文件就要使用该子命令,还能够指定清理那种,或者清理全部。
clean [ packages | metdata | expire-cache | rpmdb | plugins | all ]
除了清理缓存,咱们还能够构建缓存,该子命令为makecache,此操做能够不用作,由于在安装时就会自动构建缓存。
构建缓存: makecache
根据关键字能够搜索相关的信息,能够用search子命令,后面跟上关键字便可。
搜索: search string1 string2 [...] 以指定的关键字搜索程序包及summary信息;
咱们还能够查看指定所依赖的程序包提供的功能。
查看指定包所依赖的capabilites: deplist package1 [package2] [...]
若是想查看过去安装或卸载过那种程序包,或者叫作在过去产生了某个事务,那么事务指的就是改变或者操做了某个具体的程序,好比说,在某一时刻成功安装或卸载了某个程序包。
查看yum事务历史: history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
接下来讲的是localinstall和localupdate这两个子命令,若是在yum仓库中没有某个程序包时,咱们从互联网上下载某个安装包的话,使用rpm -ivh
来进行安装,可是所带来的问题是若是该程序包所依赖于其它的程序包时,或者说那些被依赖的安装包在仓库中,这时候localinstall子命令就表示使用yum localinstall
来安装该rpm包时,将该程序包中的被依赖的程序包在仓库中提取并安装进行解决。到CentOS 6
和CentOS 7
,咱们能够直接使用install子命令来进行安装本地的rpm包,也建议这样操做。
安装及升级本地程序包: localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reason only - use install) localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reason only - use update)
包组管理的相关命令有以下:
包组管理的相关命令: groupinstall group1 [group2] [...] geoupupdate group1 [group2] [...] grouplist [hidden] [groupwildcard] [...] groupremove group1 [group2] [...] groupinfo group1 [...]
咱们若是想安装某个包组的,可以使用子命令groupinstall
跟上某个包组就能够,若是包组名有空格的话,咱们使用双引号来引发该包组名称。
每个光盘介质就是程序包的集合,不管是在CentOS 五、六、7中,都有相应的repodata文件,因此能够直接将光盘看成本地yum源来使用,使用file加上路径就能够了,介质能够不用复制到本地某个目录当中,首先将光驱打开,将光盘放置在服务器中,而后进行挂载,挂载路径在/media/cdrom
中,若是没有该目录则先建立。
# mkdir -r /media/cdrom # mount -r /dev/sr0 /media/cdrom
以后咱们进入/etc/yum.reops.d/目录下,在该目录下有个CentOS-Media.repo文件,咱们使用vim来进行编辑该文件,修改格式以下:
# cd /etc/yum.repos.d/ # vim CentOS-Media.repo [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/cdrom/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
以上修改完成以后,保存并退出,以后咱们使用yum repolist
命令查看一下,显示出软件包的数量出来则即为成功。
# yum repolist Loaded plugins: fastestmirror, langpacks c7-media | 3.6 kB 00:00:00 (1/2): c7-media/group_gz | 156 kB 00:00:00 (2/2): c7-media/primary_db | 5.7 MB 00:00:00 Loading mirror speeds from cached hostfile repo id repo name status c7-media CentOS-7 - Media 9,591 repolist: 9,591
最后咱们总结一下如何使用本地yum源。
如何使用光盘并挂载yum仓库: (1) 挂载光盘至某目录,例如:/media/cdrom # mount -r /dev/sr0 /media/cdrom (2) 建立配置文件 [CentOS 7] name= baseurl= gpgcheck= enabled=