RedHat系RPM包管理工具

Posted liy36

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedHat系RPM包管理工具相关的知识,希望对你有一定的参考价值。

RPM 包管理器:
安装:
rpm -ivh PACKAGE_FILE
安装选项:
-i 安装新的包
-h 显示进度条
--test 测试安装
--nodeps 忽略依赖关系
--replacepkgs 重新安装

更新:
    rpm -Uvh PACKAGE_FILE
    rpm -Fvh PACKAGE_FILE
        -U 升级或安装(若老版本没有安装则自动安装)
        -F 升级(若老版本没有安装则无法升级)
    --oldpackage 降级为老版本。
    --force 强制升级。
不要对内核做升级操作!
卸载:
    --allmatches 卸载所有匹配的指定名称程序包的各版本
    --nodeps 忽略依赖关系
        [root@node1 ~]# rpm -e --test --nodeps bash 
    --test 测试卸载
        [root@node1 ~]# rpm -e --test zsh
查询: 
    -q 
    -a 查询所有已经安装过的包;
        [root@node1 ~]# rpm -qa 
        libosinfo-1.1.0-2.el7.x86_64
        libcacard-2.5.2-2.el7.x86_64
        libtimezonemap-0.4.4-1.el7.x86_64
        ...
    -f FILE 查询指定文件由哪个包生成;
        [root@node1 ~]# rpm -qf /etc/bashrc 
        setup-2.8.71-10.el7.noarch
    --changelog 查询rpm包的修改日志;
        [root@node1 ~]# rpm -q --changelog setup |head 
        * 四 6月 21 2018 Ondrej Vasik <ovasik@redhat.com> - 2.8.71-10
        ...
    -l --list 查询程序包安装生成的文件列表;
        [root@node1 ~]# rpm -ql bash 
        /etc/skel/.bash_logout
        /etc/skel/.bash_profile
        /etc/skel/.bashrc
        /usr/bin/alias
        ...
    -i --info 查询程序包的信息;
        [root@node1 ~]# rpm -qi bash 
    -c 列出指定的程序包提供的配置文件;
        [root@node1 ~]# rpm -qc bash 
        /etc/skel/.bash_logout
        /etc/skel/.bash_profile
        /etc/skel/.bashrc
    -d 查询指定的程序包提供的帮助文档;
        [root@node1 ~]# rpm -qd bash 
        /usr/share/doc/bash-4.2.46/COPYING
        /usr/share/info/bash.info.gz
        /usr/share/man/man1/..1.gz
        /usr/share/man/man1/:.1.gz
        ...
    --provides 列出指定程序包内所有的CAPABLITY(功能);
        [root@node1 ~]# rpm -q --provides bash 
        /bin/bash
        /bin/sh
        bash = 4.2.46-31.el7
        bash(x86-64) = 4.2.46-31.el7
        config(bash) = 4.2.46-31.el7
    --whatprovides CAPABLITY 查询指定的(CAPABLITY)功能由哪个包所提供;
        [root@node1 ~]# rpm -q --whatprovides bash  
        bash-4.2.46-31.el7.x86_64
    --whatrequires CAPABLITY 查询指定的(CAPABLITY)功能被哪个包所依赖;
        [root@node1 ~]# rpm -q --whatrequires 'config(bash)'
        bash-4.2.46-31.el7.x86_64
    -p PACKAGE_FILE 如果程序包未安装;执行查询操作;
        rpm -qp* 包名
    -R 查询指定程序包的依赖关系;
        [root@node1 ~]# rpm -qR bash
        /bin/sh
        config(bash) = 4.2.46-31.el7
        libc.so.6()(64bit)
        libc.so.6(GLIBC_2.11)(64bit)
        libc.so.6(GLIBC_2.14)(64bit)
        ...
    --scripts 查看程序包自带的脚本;
        [root@node1 ~]# rpm -q --scripts bash 
        postinstall scriptlet (using <lua>):
        nl        = '
'
        sh        = '/bin/sh'..nl
        bash      = '/bin/bash'..nl
        f = io.open('/etc/shells', 'a+')
        if f then
        ...
        postuninstall scriptlet (using <lua>):
        -- Run it only if we are uninstalling
        if arg[2] == "0"
        then
          t={}
        ...  
rpm 脚本控制:
    --noscripts
        --nopre 不执行安装前脚本
        --nopost 不执行安装后脚本
        --nopreun 不执行卸载前脚本
        --nopostun 不执行卸载后脚本
效验:
    [root@node1 ~]# rpm -V setup 
        S.5....T.  c /etc/bashrc
            5      MD5校验和
            S      文件大小
            L      符号连接
            T      修改时间
            D      设备
            U      用户
            G      组
            M      模式(包括许可和文件类型)
包来源合法性和完整性检查:
    来源合法性验证:
    完整性检查:
        数字签名:
            导入秘钥:
                rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
                # 当前系统为CentOS7.6
    校验
        自动验证: 安装该组织签名的程序时会自动验证
        手动验证: rpm -K PACKAGE_FILE # 需要先导入公钥     
        
数据库重建:
    rpm数据库路径: /var/lib/rpm/
        查询操作: 通过该数据库进行;
    重建操作:
        rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
            --initdb 初始化数据库,当前无任何数据库可初始化创建,当前有数据库时则无操作;
            --rebuilddb 重新构建,通过读取当前系统上所有已安装的程序包进行重新构建;
        初始化新的数据库
            rpm --initdb --dbpath=/PATH/TO/RPM/
        重建数据库
            rpm --rebuilddb

以上是关于RedHat系RPM包管理工具的主要内容,如果未能解决你的问题,请参考以下文章

区分一下dpkg,rpm和yum以及apt-get

区分一下dpkg,rpm和yum以及apt-get

Linux基础:Linux软件安装

apt和apt-get的区别?为什么推荐使用apt?RedHat系列(rpm包包管理工具yum)和Debian系列(deb包包管理工具apt-get)区别?

Linux中yum和apt-get

rpm包管理工具