zoukankan      html  css  js  c++  java
  • rpm命令

    rpm命令:
    rpm [OPTIONS] [PACKAGE_FILE]
    安装:-i,--install
    升级:-U,--update,-F,--freshen
    卸载:-e,--erase
    查询:-q,--query
    校验:-V,--verify
    导入密钥:--import /PATH/TO/RPM-GPG-KEY
    手动
    数据库维护:--buiddb,--initdb
    每种功能还有很多复杂子选项;

    rpm包安装:
    rpm {-i|--install} [install-options] PACKAGE_FILE ...

    常用格式:要有文件路径;
    rpm -ivh PACKAGE_FILE ...

    [install-options]安装选项:
    -h, --hash:hash marks输出进度条,一共50个#,每个#进度表示2%;
    --test:测试安装,检查并报告依赖关系及冲突消息等,dry run模式;
    --nodeps:忽略依赖关系(安装后使用可能有问题),不建议;
    --replacepkgs:重新安装;

    --noscripts:不执行rpm包自带的四类脚本;
    --nopre:不执行rpm包自带的preinstall脚本;
    --nopost:不执行rpm包自带的postinstall脚本;
    --nopreun:不执行rpm包自带的preuninstall脚本;
    --nopostun:不执行rpm包自带的postuninstall脚本;
    例如:
    ]# mount -r /dev/cdrom /media:虚拟机上的光盘连接后即可挂载;
    ]# rpm -ivh --test /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:测试安装;
    ]# rpm -ivh --replacepkgs /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm
    ]# rpm -ivh /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm

    注意:rpm包可以自带脚本;
    四类:--noscripts
    preinstall:安装过程开始之前运行的脚本,标记为%pre;--nopre
    postinstall:安装过程完成之后运行的脚本,标记为%post;--nopost
    preuninstall:卸载过程真正开始执行之前运行的脚本,标记为%preun;--nopreun
    postuninstall:卸载过程完成之后运行的脚本,标记为%postun;--nopostun

    --nosignature:不检查包签名信息,不检查来源合法性(有时,警告no key,但光盘上有key,可以手动导入);
    --nodigest:不检查包完整性信息,(不检查校验md5信息);

    rpm包升级:
    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    -U:表示升级或安装(发现旧版本则升级,没发现则直接安装);
    -F:升级(只完成升级旧版本);
    --nodeps:
    --test:
    --noscripts

    常用格式:
    rpm -Uvh PACKAGE_FILE ...
    rpm -Fvh PACKAGE_FILE ...

    --oldpackage:降级安装(新版程序包不兼容时,要回滚);
    --force:强制升级;
    例如:
    ]# rpm -Uvh /media/Packages/zsh-5.0.2-7.el7_1.2.x86_64.rpm:升级rpm包;

    注意:
    (1)不要对内核做升级操作;Linux支持多内核版本并存,因此,要直接安装新版本内核;
    (2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后生成提供;

    rpm包卸载:
    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
    --allmatches:卸载所有匹配指定名称的程序包的各版本;
    --nodeps:忽略依赖关系;
    --test:测试卸载,dry run模式;

    注意:卸载和查询时都无需程序文件路径,只需给出rpm程序包名即可;
    安装和升级rpm程序包名需要rpm程序包文件完整路径;

    rpm包查询:
    rpm {-q|--query} [select-options] [query-options]
    -q
    [select-options]:挑选查询哪些包;
    PACKAGE_NAME:查询指定程序包是否安装及会显示详细版本信息;
    -a,--all:查询所有安装过的包;
    -f FILE:查询指定文件(要写绝对路径)由哪个程序包安装生成的;
    -g,--group GROUP:查询指定包组中包含的程序包;

    -p,--package package_file:对未安装的程序包查询(结合query-options选项),但要有rpm安装文件,否则无法查询;

    --whatprovides CAPABILITY:查询指定的capability由哪个程序包提供(结合query-options选项);
    --whatrequires CAPABILITY:程序指定的capability被哪个程序包依赖(结合query-options选项);
    例如:
    ]# rpm -q zsh:查询指定rpm程序包;
    ]# rpm -qa:查询所有已安装的rpm程序包,可同grep搭配使用;

    [query-options]:查询包的信息;
    --changelog:查询指定rpm包的修改日志changelog;
    -i:查询指定rpm包相关的详细信息(版本、作者、功能描述、大小、所属包组...);
    -l:查询指定rpm包安装后生成的所有文件列表;(二进制程序、配置文件、库文件、帮助文档)
    -c:查看指定rpm程序的配置文件;
    -d,--docfiles:查看指定rpm程序包提供的文档;
    --provides:查看指定rpm程序包提供所有的capability功能;
    -R,--requires:查询指定rpm包的依赖关系;
    --scripts:查看rpm程序包自带的四类脚本程序片段(preinstall、postinstall、preuninstall、postuninstall);
    例如:
    ]# rpm -q --changelog zsh:查询指定rpm包修改日志;
    ]# rpm -qi zsh:查询指定rpm包相关详细信息;
    ]# rpm -ql zsh:查询指定rpm包生成的所有文件列表;
    ]# rpm -qc zsh:查询指定rpm包所包含的配置文件;
    ]# rpm -qd zsh:查询指定rpm包提供的文档;
    ]# rpm -q --provides bash:查询指定rpm包提供的所有能力;
    ]# rpm -q --whatprovides bash:查询指定rpm包由哪个程序包提供;
    ]# rpm -q --whatprovides 'config(bash)'
    ]# rpm -q --whatrequires bash:查询指定rpm包被哪个程序包所依赖;
    ]# rpm -q -R zsh:查询指定rpm包的依赖关系;
    ]# rpm -q --scripts zsh:查询指定rpm包自带的四类脚本程序代码;

    查询未安装的rpm包的相关信息,但必须有rpmb的安装文件才能查询;
    ]# rpm -qpl /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查询未安装的rpm包安装后生成的所有文件列表;
    ]# rpm -qpi /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查询未安装的rpm包相关详细信息;
    ]# rpm -qpc /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查询未安装的rpm包配置文件;
    ]# rpm -qpd /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查询未安装的rpm包提供的文档;
    ]# rpm -qp --scripts /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查询未安装的rpm包自带的四类脚本程序片段;

    rpm包校验:
    rpm {-V|--verify} [select-options] [verify-options]
    --nodeps:不校验依赖关系;
    --nodigest:不检查包完整性;
    --nofiles:不校验文件属性是否发生改变;
    --nosignature:不检查包或头部签名;
    例如:
    ]# rpm -V --nofiles zsh

    校验结果各位置的代表意思(9位):

    例如:S.5....T.

    S file Size differs:大小改变;
    M Mode differs (includes permissions and file type):权限改变;
    5 digest (formerly MD5 sum) differs:内容改变(完整性发生改变);
    D Device major/minor number mismatch:主次设备号不匹配;
    L readLink(2) path mismatch:路径不匹配;
    U User ownership differs:属主发生改变;
    G Group ownership differs:属组发生改变;
    T mTime differs:最近一次的修改时间戳发生改变;
    P caPabilities differ:能力发生改变;

    包来源合法性验证和完整性验证:
    来源合法性验证:
    完整性验证:

    rpm包来源合法性验证和完整性验证,导入密钥:
    以ISO镜像光盘为例,将镜像文件导入虚拟机光驱,并开启连接;
    挂载后,查看文件:密钥文件
    RPM-GPG-KEY-CentOS-7
    对于CentOS发行版来说:
    获取并导入信任的包制作者的密钥(公钥):
    导入密钥文件:
    例如:
    ]# rpm --import /media/RPM-GPG-KEY-CentOS-7
    对于光盘会自带密钥,再安装rpm包程序时,不会显示no key了。

    验证:
    (1)安装此组织的签名的程序时,会自动执行验证(导入密钥文件后,再安装rpm包时会自动验证);
    (2)手动验证:rpm -K PACKAGE_FILE
    例如:
    ]# rpm -K /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm

    数字签名(单向加密):采用非对称加密,一对秘钥(公钥,私钥),用私钥加密对应数据的特征码(加密程序包的校验码),用公钥解密;从而实现来源合法性验证和完整性验证的目的;

    加密:
    第一步:程序包制作者首先用单向加密,计算出程序包的特征码(校验码)出来,是定长输出,
    第二步:然后再用自己的私钥来加密这个特征码,这叫数字签名,并且把加密后的特征码附加在程序包后面;

    解密:
    第一步:首先用程序包制作者的公钥解密特征码后,如果能解密则认为完成来源合法性验证;
    第二步:然后,用同样的单向加密算法对程序包进行单向加密计算出一个特征码,用计算得出的特征码与解密的特征码比较,相同则完整性校验成功,不同则完整性校验失败;

    注意:要确保获得安全的公钥!

    rpm包数据库维护:

    rpm包数据库位置:/var/lib/rpm
    查询操作(包括安装、升级、卸载、查询):都是通过此处的数据库进行的;

    获取重建帮助:
    CentOS6:man rpm
    CentOS7:man rpmdb
    重建:
    rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

    --initdb:初始化数据库,当前无任何数据库可实现初始化创建一个新的,当前有时不执行任何操作;如果事先不存在数据库,则新建,否则,不执行任何操作;

    --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;无论当前是否存在,直接重新创建数据库;

  • 相关阅读:
    「CF1051F」The Shortest Statement
    「CF911F」Tree Destruction
    「HNOI/AHOI2018」游戏
    「CF859E」Desk Disorder
    「CF858F」 Wizard's Tour
    「CF894E」 Ralph and Mushrooms
    「NOIP2018」赛道修建
    「POI2010」Bridges
    常见神经网络
    数字图像处理笔记2.22
  • 原文地址:https://www.cnblogs.com/tony3154/p/10125268.html
Copyright © 2011-2022 走看看