一、前言上一篇《Linux软件安装管理之——源码安装详解》详细介绍了Linux平台下源码包安装的原理。虽然使用源代码的软件编译可以有自定义设置,但对于Linux发行版发行商来说,有个问题就是软件管理为时不晚。毕竟不是每个人都能编译源代码。这个问题会严重影响linux平台软件的发布和推广。为了解决上述问题,厂商首先在自己的系统上编译出我们用户需要的软件,然后将编译好的可执行软件直接发布给用户安装。不同的Linux发行版使用不同的打包系统。一般来说,大多数发行版的包管理技术分为两大阵营:Debian的“.deb”和RedHat的“.rpm”。有一些重要的例外,例如Gentoo、Slackware和Foresight,但大多数将使用这两个基本系统之一。这里我将详细介绍RedHat系列发行版的RPM和YUM的使用方法。如果您需要了解Debian系列发行版的包管理系统,请参考我的另一篇文章:《Linux软件安装管理之——dpkg与apt-*详解》。2.转速1。简介:RPM全名为“RedHatPackageManager”,缩写为RPM。这种机制最先是由RedHat公司开发的,后来确实很好用,所以很多发行版都使用这种机制作为软件安装的管理方式,包括Fedora、CentOS、SuSE等知名开发商。RPM最大的特点就是将需要安装的软件编译打包成一个RPM机制的安装包,通过里面的默认数据库记录了软件安装所需要的依赖软件。在你的Linux主机上安装时,RPM会先根据软件中的数据检查Linux主机的依赖软件是否满足,满足则安装,不满足则不安装。2.RPM优缺点优点:1)软件已经编译打包,方便传输安装,让用户免编译2)安装前,系统盘,操作系统版本等先检查,避免安装错误3)软件信息都记录在linux主机的数据库中,方便查询、升级和卸载。缺点:1)安装软件包的环境必须与打包时的环境相同或相当2)必须安装软件的依赖软件3)卸载时,底层软件无法移除首先,否则整个系统可能会变得无法使用。为了解决RPM属性依赖的问题,下面也为大家详细介绍一下YUM的使用方法。3、rpm包命名的含义RPM包命名格式:软件名-版本号-发布次数。适用于linux系统。硬件平台。rpm例如:ftp-0.17-74.fc27.i686.rpm注:完整包名:rpm运行未安装的软件包,包名使用包的全称:rpm运行已安装的软件,以及软件包使用包名。比如上面的例子,包的全称是ftp-0.17-74.fc27。i686.rpm,包名为ftp。4、RPM安装软件默认路径/etc配置文件放置目录/usr/bin一些可执行文件/usr/lib一些程序使用的动态链接库/usr/share/doc一些基础软件手册和文档/usr/share/man一些manpage文件5.RPM安装示意图3.RPM手册1.软件安装(install)如果需要安装emac编辑器,首先要从网上下载一个emacrpm包,比如emacs-25.3-1.fc28.aarch64.rpm。最简单的安装命令如下:rpm-iemacs-25.3-1.fc28.aarch64.rpm但是这样的参数并不能真正显示安装的进度,所以通常我们这样执行命令:rpm-ivhpackage-name参数说明(英文说明在最后的括号内):-i:install的含义,安装-v:查看更详细的安装信息屏幕(提供更详细的输出)-h:在安装信息栏显示安装进度rpm-ivhemacs-25.3-1.fc28.aarch64.rpm如果要安装多个rpm包,用空格隔开,然后连接到要安装的rpm包,也支持通过URL资源安装。2、软件升级参数说明(后面括号为英文说明):-U:upgrade表示更新软件,如果系统中不存在该软件则安装(升级包)-F:freshen表示更新updatethesystem某个已经安装的软件(如果已经安装则升级package(s))rpm–Uvhfoo-2.0-1.i386.rpm3,查询方式查询rpm时,查询的地方其实是/var/lib/rpm/this目录下的数据库文件。此外,RPM还可以查询未安装的RPM文件中的信息。RPM的查询语法为:rpm{-q|--query}[select-options][query-options]常用参数说明(后面括号中为英文说明):-a:all,列出本机安装的所有software(Queryallinstalledpackages.)-p:package,querytheinformationofanRPMfile(Queryan(uninstalled)package.)-f:file,从以下文件名找出该文件属于哪个文件Software(Querypackageowningfile.)-i:information,liststhedetailedinformationofthesoftware,includingdeveloper,versionanddescription等(显示包信息,包括名称、版本、描述。)-l:list,liststhefullfilenameoftheallfilesanddirectoriesofthesoftware(Listfileinpackage)-c:configuration,列出软件的所有配置文件(在/etc/下找到文件名即可)(Listonlyconfigurationfiles)-d:documentation,列出软件的所有帮助文件(Listonlydocumentationfiles)-R:required,列出与软件相关的依赖软件中包含的文件(Listcapabilitieswhichthisdepends.)注:在查询部分,所有参数必须在前面加上-q就是所谓的query。用例:1)查询你的Linux是否安装了某个软件rpm-qyum2)查询该软件提供的所有目录和文件rpm-qlyumrpm-qcyum#只列出该软件的所有配置文件rpm-qdyum#只列出软件的所有帮助文档3)列出gcc软件的相关资料说明rpm-qigcc4)找出哪个软件提供/bin/shrpm-qf/bin/sh5)假设我下载了一个RPM文件,包名为wget-1.19.1-3.fc27.aarc64.rpm,想知道这个文件的需求文件,怎么办?rpm-qpRwget-1.19.1-3.fc27.aarc64.rpm4.卸载软件使用rpm的卸载过程必须从顶层卸载到底层。以rp-pppoe为例,这个软件主要是基于ppp软件安装的,所以当你要卸载ppp的时候,必须先卸载rp-pppoe!删除的命令很简单,通过-e参数即可。然而,经常会发生软件属性依赖导致某些软件问题无法解决的情况。例子:rpm-egcc想了解更多rpm的使用方法,可以自行查阅rpm的man手册。下面介绍一些常用的操作。4.百胜1。简介:YUM可以看作是一个CS架构的软件。YUM的存在很好的解决了RPM的属性依赖问题。YUM依靠rpm包管理器实现了rpm包管理器的功能扩展,所以YUM不能脱离rpm独立运行。2、YUM的特点1)可以同时配置多个资源库(Repository)2)简单的配置文件(/etc/yum.conf)3)自动解决增删rpm包时遇到的依赖问题4)使用方便5)与RPM数据库保持一致3.YUM的原理说明服务器首先对包进行分类,存放在不同的repository容器中;然后在大量的rpm数据库文件中收集包之间的依赖关系数据,生成对应的依赖关系以及所需文件本地存放位置的描述文件(.xml格式),存放在本地的repodata目录下供使用客户端访问。客户端通过yum命令安装软件时,发现缺少一些依赖的程序包,客户端会根据本地配置文件(/etc/yum.repos.d/*.repo),从服务器端repo目录获取描述文件xxx.xml存放在本地/var/cache/yum中供以后读取,通过xxx.xml文件,找到需要的依赖程序包存放位置在服务器端安装,然后在服务器端的yum库中进入指定的repository容器,获取需要的程序包。下载完成后,转到本地安装。注意:YUM是一款在线软件管理工具,所以使用YUM进行的大部分操作都需要联网才能正常使用。五、YUM配置文件1、容器说明yum虽然可以在你联网后直接使用,但是由于你系统的站点镜像没有选择好,所以连接速度会很慢!所以,这个时候,我们就需要手动修改yum的设置文件。如果你连接到CentOS的镜像站点(http://ftp.twaren.net/Linux/C...),你会发现里面有一堆链接,那些链接就是这个yum服务器提供的容器,包括centosplus、extras、fasttrack、os、updates等容器,最好认的是os(系统默认软件)和updates(软件升级版)。在yum服务器的容器中,最重要的目录就是“repodata”,这是存放RPM软件解析后产生的软件依赖数据的地方。所以,当你找到容器所在的URL时,最重要的是URL下一定有一个名为“repodata”的目录,也就是容器的URL。下面以我的主机为例:CentOS7.4.17082,容器查询首先可以先查询目录yumserver使用了哪些容器。使用命令:yumrepolistall,查询结果如下:如上图所示,只有最右边的状态为enabled时才激活容器,在/etc/yum.conf中会有多个配置文件。repos.d/(文件名以.repo结尾),yum会从中逐一查找,所以里面的容器名称不能重复。3.配置文件修改打开配置文件:vi/etc/yum.repos.d/CenOS-Base.repo,内容如下,上面只是部分容器的截图,配置文件的说明如下如下:[base]:表示容器的名称。中括号必须存在,里面的名字可以任意,但是不能有两个相同的容器名,否则yum不知道去哪里找容器相关的软件列表文件。name:解释一下这个容器的意思即可,不重要。mirrorlist:列出本容器可以使用的镜像站点。如果你不想使用它,你可以把这一行注释掉。baseurl:这个最重要,因为后面是容器的实际URL。mirrorlist是yum程序自己找镜像站点,baseurl是指定一个固定的容器url。enable=1:启动这个容器,默认值也是1。关闭这个容器可以设置enable=0。gpgcheck=1:指定是否检查RPM文件中的数字证书。gpgkey:数字证书的公钥文件所在位置,使用默认值。注意:1)yum会自动识别/etc/yum.repos.d/目录下以.repo结尾的文件。2)当我们修改了配置文件的URL,但没有修改容器名称时,可能会导致本机的列表和yum服务器的列表不同步。这时候需要手动清除容器的数据:语法:yumclean[packages|headers|all]参数:packages:删除下载的软件文件headers:删除下载的软件文件headerall:删除所有容器数据示例:删除所有下载的容器相关数据(包括软件本身和列表)yumcleanall6.YUM用户手册1、查询查询相关命令:搜索:搜索软件名称或描述中的重要关键字;list:列出yum当前管理的所有软件名称和版本,有点类似于rpm-qainfo:同上,但有点类似于rpm-qaiprovides:从文件中搜索软件!类似rpm-qf1)查询ftp相关的软件是什么yumsearchftp2)查询gcc软件的功能yuminfogcc可以查询软件的版本号、描述信息、是否已安装等信息。3)列出yum服务器上提供的所有软件名称yumlist4)列出服务器上当前可以本地升级的软件yumlistupdates5)列出提供passwd文件的软件yum提供passwd6)查找以什么开头的软件名称pamyumlistpam*2、安装升级相关命令:install:后面是要安装的软件。update:后面跟要升级的软件。如果要升级整个系统,直接update即可。例子:安装一个emacs编辑器软件yuminstallemacs小技巧:使用参数-y,当遇到需要等待用户输入时,这个选项会提供yes的响应,比如上面的例子可以写成:yum-yinstallemacs4,uninstall相关命令:remove例子:卸载上面例子中安装的emacsyumremoveemacs5,软件组管理还记得你刚安装CentOS时,可以选择需要的软件吗?那些软件不是以GNOME/KDE/XWindow之类的名称存在吗?其实这就是软件组。软件层级的存在对于大量的系列软件安装来说是一个非常有用的功能。相关命令说明:grouplist:列出所有可用的组groupinfo:后面跟组名,可以知道该组包含的所有组名groupstall:安装整级软件groupremove:删除一个组1)查询当前容器有哪些这台机器上可用和安装的软件组?yumgrouplist2)查看某个软件组的信息yumgroupinfoGNOME3)安装桌面环境GNOMEyumgroupstallGNOME如果想了解更多yum的使用方法,也可以自己查看yum的man手册。学习了yum的操作后,是不是突然觉得linux上的软件管理变得简单多了,之前学的rpm好像可以不用了!即便如此,yum毕竟是建立在rpm之上的,所以还是需要掌握rpm的相关知识。参考资料:《鸟哥的Linux私房菜——基础学习篇》鸟哥《The Linux Command Line》WilliamE.Shotts,Jr.
