我们知道linux有许多服务,但这些服务都需要安装、升级或卸载、查询及效验,那就需要用到包管理工具,包管理器主要用于打包、包管理(安装、升级、卸载、查询及效验)。

打包:就是按照既定规范存放于一个单一的归档文件中。

安装:把一个包展开,对应的安放于某些位置。

卸载:安装后的每一个文件都给找到,收集删除。

升级:把新版本的应用程序替换旧版本。

查询:可以查询安装的程序一些相关的信息。

效验:效验程序是否被篡改过。

 下面我们说下linux里面最常用的两种包管理工具,RPMYUM工具。

1、  RPM包管理工具

RPMRPM Package Manager, RPM is Package ManagerRPM软件包管理器)的缩写,这一格式虽然被打上了RedHat的标志,但其原始设计理念是开放的。在没有包管理之前,都是手动进行的,一个程序包分别由二进制程序、库文件、配置文件、帮助文件四类组成。

    二进制程序一般存放于:/bin,/sbin, /usr/bin, /usr/bin

    库文件存放于:/lib64, /usr/lib64

    配置文存件放于:/etc

    帮助文件一般由多种形式存在,例如 manualinfoinstall等。

  RPM包有它自己的打包机制,一个RPM包包含很多文件,同时定义了这些文件改如何存储在指定目录下的。例如:一个程序有十种功能,可能常用的就五种,另外三种不常用或用到的人很少,还有两种根本没人用,甚至漏洞百出。制作这个RPM包的人肯能就把常用的五种打进包,如果有特殊的人要到另外三种的话,RPM有一个分包机制。大体是一个核心程序包和一个支包也称为分包。

  RPM包命名机制:

版本号:major.minor.release

         包名--->主版本号--->次版本号---->修正号

            rpm包:name-version-release.arch.rpm(有源程序的rpm包和二进制的rpm)

  Rpm包的发行号(release):跟源程序不同,用于标识rpm包本身的发行号,同时包含所适用的操作系统。

例:bash-4.3.2-5.el6.x86_64.rpm

 包名--->主版本号--->次版本号--->源程序发行号-rpm包的发行号---->主机平台---->cup架构

 

 注意:包和包之间有可能存在依赖关系的,例如一个包要实现某些功能需要另外一些包的支撑。

 

 RPM包管理应用:

 安装:

   rpm {-i|--install} [install-options]PACKAGE_FILE ...

   -i           安装

   -v           显示详细信息,可     加使用查看更加详细信息,如-vv,-vvv

   -h           显示进度,用50#来作为进度条

 

             我们一般组合使用-ivh来安装rpm

 

   --nodeps      取消依赖关系

   --replacepkgs 重新安装

   --test        测试安装,而不是真正安装

  例如我们现在安装一个RPM包,如图:


   马哥linux学习(linux上的包管理)_linux

 

 升级:

     rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...

     rpm{-F|--freshen} [install-options] PACKAGE_FILE ...    

 

     -Uvh:如果有旧版程序包,则升级之;如果没有,则安装之;

     -Fvh:如果有旧版程序包,则升级之;如果没有,则不安装;

      --oldpackage  降级安装

       --force     忽略冲突,强制执行

  我这里没有升级的程序包,只能给一个示例,如:

[root@localhost Packages]# rpm -Uvhzsh-5.0.2-7.el7.x86_64.rpm

 

 卸载:

    rpm {-e|--erase} [--allmatches]  [--nodeps] [--noscripts]  [--notrig-

      gers] [--test] PACKAGE_NAME ...

    --nodeps     忽略依赖关系

    --test       卸载测试

  如我们这里把刚才的zsh包卸载,如图:

    马哥linux学习(linux上的包管理)_管理工具_02

 

查询:

rpm {-q|--query}[select-options] [query-options]

-q:查询已安装的包

-qa:查询所有的安装包

-qf/path/to/somefile查询某文件是由哪个包安装生成

-qp: 查询未安装的程序包的相关信息

-qc: 查询指定程序包安装生成的配置文件

-qd: 查询指定的程序包安装生成的文档

-qi: 查询指定的程序包的相关信息;

-ql: 查询程序包安装生成的所有文件的列表

如我们查询一个未安装的包的相关信息,如图:

 马哥linux学习(linux上的包管理)_管理工具_03

查询已安装的程序包相关信息,如图:

 马哥linux学习(linux上的包管理)_应用程序_04

查询指定程序包安装生成的配置文件,如图:

 马哥linux学习(linux上的包管理)_配置文件_05更多选项查询我在这就不一一演示了。

 

 效验:

 常用用法:rpm -VPACKAGE_NAME

 

 文件改动后校验会有下列相关信息提示:

 

 5:文件的MD5校验值

 S:文件大小

 L:链接文件

 T:文件创建的时间

 D:设备文件

 U:文件的用户

 G:文件的用户组

 M:文件的权限

 

  包来源合法性效验:

来源合法性验正:非对称加密

       完整性验正:单向加密

 

         导入密钥:rpm --import/PATH/TO/KEY_FILE

         校验:rpm -K/PATH/TO/RPM_FILE

  包效验如图:

 马哥linux学习(linux上的包管理)_二进制_06

 

2、  YUM软件包管理器

      Yum(全称为 Yellow dog Updater, Modified)是一个在FedoraRedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

       Yum之所以可以自动处理依赖关系,它首先是对包做了抽取和定义,找到这一定义位置把这些包事先给存储下来,来判断这一程序包能否满足安装,如不满足Yum则处理这些依赖的包安装。根据我们安装的程序包,找到这个仓库,寻找我们所需安装的程序包,我们可以定义多个仓库,Yum会自动寻找我们定义的仓库里面的程序包,并且在这些我们定义的仓库里面找到一个最新的程序包,找到以后把程序包下载之本地,放在一个缓存空间中,包括一些所依赖的包,然后安装在本机中。

       Yum依赖与外在的仓库,而我们定义的仓库,每一个都是独立管理的,每一个仓库都有一个源数据文件,Yum会事先把这些仓库的源数据文件缓存下来,如安装程序包,Yum会事先看看这些仓库的源数据文件里面是否有这个包,仓库的源数据文件包括版本号、包名、依赖关系等等。

    Yum程序的配置文件:

                    /etc/yum.conf

定义全局配置:对所有的仓库多适用的配置

/etc/yum.repos.d/*.repo

     一个文件通常用于一个或一组功能相近或相关的仓库

     定义一个仓库指向:

                       [REPO_ID]:给定一个ID

                       name=:仓库名称

                       baseurl=仓库指向的链接

                       enabled={1|0}1是启用,0是关闭,默认都是启用的

                       gpgcheck={1|0}1表示效验,0表示不效验

                       gpgkey=:使用哪个密钥来效验,通常密钥是放在远程服务器上的。

  例如我们来定义一个Yum仓库,如图:

 

  使用yum repolist来查看我们定义的Yum仓库,如图:


           马哥linux学习(linux上的包管理)_应用程序_07

    Yum命令:

             yum [options][command] [package ...]

                     安装:install

                     卸载:remove

                     升级:update

                     查询:

                     Info:查询一些包相关信息

                     search KEYWORD

                     listall|installed|availiable:列出相关包程序

                     provides /PATH/TO/SOMEFILE:查询指定文件由哪个包安装生成

                     重新安装:reinstall

                     降级:downgrade

                     清理缓存:clean [ packages | metadata | expire-cache |rpmdb | plugins | all ]

                     生成缓存:makecache

 

 包组:

               Grouplist:列出所有包组

               groupinfo"GRP_NAME":查看某一包组,注意:由于包组名有空格,所有要用引号。

               groupinstall"GRP_NAME":安装某一包组

               groupremove"GRP_NAME":卸载一个包组

 

     仓库:

            repolist[all|enabled|disabled]:列出所有仓库

            repoinfo[all|enabled|disabled]:查看仓库相关信息

 例如安装一个程序包,我们使用yum install加包名,Yum会自动解决依赖包的关系

 如图:

 

              马哥linux学习(linux上的包管理)_二进制_08

  如卸载一个包程序,我们使用yum remove 加包名,如图:

    马哥linux学习(linux上的包管理)_二进制_09

  查询一个软件包程序,如图:

     马哥linux学习(linux上的包管理)_配置文件_10

这里不在一一演示。

  列出所有包组,如图:

     马哥linux学习(linux上的包管理)_linux_11

  查看某一包组,如图:

     马哥linux学习(linux上的包管理)_管理工具_12

这里的命令不在一一演示。

 

  使用光盘作为Yum仓库:

                            挂载光盘至某目录

                            定义仓库,使用file:///指明其访问路径

如图:

    马哥linux学习(linux上的包管理)_二进制_13

Yum包管理程序安装还比较简单的,不需要我们手动解决软件包的依赖性,本次就写到这里,如有不足之处欢迎指出,谢谢!