包管理之rpm篇

来源:互联网 发布:红叶知弦邪恶本子 编辑:程序博客网 时间:2024/06/16 02:36

  • 软件包的编译过程
  • 查看文件依赖的操作系统 file
  • 查看二进制程序所依赖的库文件
  • 查看装载的库文件
  • 添加库
  • 包管理器
  • 获取程序包的途径
    • 系统发版的光盘或官方的服务器
    • 项目官方站
    • 第三方组织
    • 搜索引擎
  • rpm 命令
    • 常用命令
      • rpm -q pkgname 查看指定包的包全名
      • rpm -qa 查询系统安装的所有包系统安装时从安装光盘中安装的包
      • 安装包rpm -ivh pkgname force
      • 列出包内文件 rpm -qlp q-query l-list p-package
      • 列出包内文件包括脚本 rpm -qlp script
      • 列出未安装的包内的文件
      • 解压未安装的包
    •  安装
      • rpm -ivh PACKAGE_FILE
      • install-options
    • 升级
      • rpm -Uupgrade install-options PACKAGE_FILE 存在则升级不存在则安装
      • rpm -Ffreshen install-options PACKAGE_FILE 存在则升级不存在不做处理
    • 包查询
      • 常用查询用法
  • 包卸载
  • 包校验 rpm -Vverify select-options verify-options
    • Demo
    • 完整性验正SHA256rpm -Kchecksig
    • 来源合法性验正RSA
  • 启动项配置 bootgrubgrubconf
  • 救援模式
    • centOS7
    • centOS6

软件包的编译过程

源代码(.c|.py….)->预处理(.i)->编译(.a 汇编代码)->汇编(.o 二进制)->链接(.out)

查看文件依赖的操作系统 file

查看二进制程序所依赖的库文件:

ldd binary-path

查看装载的库文件

ldconfig -l

添加库

在/etc/ld.so.config.d/下面新建.config文件,添加库文件路径,即可装载库文件(使用ldconfig newconfig使新加的配置文件生效)

包管理器:

rp-pppoe - 3.1            - 5        .i386   .rpm套件名称 套件的版本信息 释出的次数 适合的硬件平台 附文件名
  1. 包文件组成 ( 每个包独有)
  2. RPM 包内的文件
  3. RPM 的元数据,如名称,版本,依赖性,描述等
  4. 安装 或卸载时运行的脚本
  5. 数据库( 公共) :/var/lib/rpm
    1. 程序包 名称及版本
    2. 依赖关系
    3. 功能说明
    4. 包安装后生成的各文件路径及校验码信息

获取程序包的途径

1. 系统发版的光盘或官方的服务器;

-CentOS 镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com

2. 项目官方站

3. 第三方组织

  • Fedora-EPEL:Extra Packages for Enterprise Linux
  • Rpmforge:RHEL 推荐,包很全

4. 搜索引擎 :

  • http://pkgs.org
  • http://rpmfind.net
  • http://rpm.pbone.net
  • https://sourceforge.net/
    ==第三方包建议要检查其合法性
    来源 合法性, 程序包的完整性==

rpm 命令:

常用命令

rpm -q pkgname 查看指定包的包全名

rpm -q kernelkernel-2.6.32-696.el6.x86_64

rpm -qa 查询系统安装的所有包(系统安装时从安装光盘中安装的包)

安装包rpm -ivh pkgname –force

列出包内文件 rpm -qlp (q->query l->list p->package)

列出包内文件包括脚本 rpm -qlp –script

rpm -qlp tree-1.5.3-3.el6.x86_64.rpm warning: tree-1.5.3-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY/usr/bin/tree/usr/share/doc/tree-1.5.3/usr/share/doc/tree-1.5.3/LICENSE/usr/share/doc/tree-1.5.3/README/usr/share/man/man1/tree.1.gz

列出未安装的包内的文件

rpm2cpio 光盘中路径 |cpio -tv

解压未安装的包

rpm2cpio 光盘中rpm路径 | cpio -id 解压后的path

 安装

rpm {-i|–install} [install-options] PACKAGE_FILE…

options complications -v verbose -vv 数据库详情 -h 以# 显示程序包管理执行进度

rpm -ivh PACKAGE_FILE …

[install-options]

options complications –test 测试安装,但不真正 执行安装,即dry run 模式 –nodeps 忽略依赖关系 –force 强制覆盖 –oldpackage 降级 –replacepkgs 已安装强制覆盖 –replacefiles –nosignature 不检查来源合法性 –nodigest 不检查包完整性 –noscripts 不执行 程序包脚本 –nopre %pre :安装前脚本; –nopost %post :安装后脚本; –nopreun %preun :卸载前脚本

升级

rpm {-U|–upgrade} [install-options] PACKAGE_FILE …存在则升级,不存在则安装

rpm {-F|–freshen} [install-options] PACKAGE_FILE … 存在则升级不存在不做处理

rpm -Uvh PACKAGE_FILE ...rpm -Fvh PACKAGE_FILE ...--oldpackage :降级--force:  强制安装

==内核升级直接用ivh 不用Uvh,这样可多版本共存,万一出问题切换之前内核即可==

==如果原程序包的配置文件安装后曾被修改,升级时,新版本
的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而
把新版本的文件重命名(FILENAME.rpmnew)==

包查询

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

[select-options]

options complications -a 所有包 -f 查看指定的文件由哪个程序包安装生成 -p rpmfile ==针对尚未安装的程序包文件做查询操作==; –whatprovides CAPABILITY查询指定的 CAPABILITY由哪个包所提供 –whatrequires CAPABILITY查询指定的 CAPABILITY 被哪个包所依赖
#查询安装的包rpm -qa|grep xxx#查看xx包安装后的所有文件rmp -ql xxxrmp -qi xxx #查看xx包的信息(版本号,安装日期,官网等)rpm -qd #查看包的doc文档rpm -q --scripts sysstat 查看sysstat包的脚本rpm -qf file 查看file来自哪个包rpm -qf /usr/bin/treetree-1.5.3-3.el6.x86_64#查询java来自哪个包rpm -qf /usr/bin/javafile /usr/bin/java is not owned by any package#查询未安装的包包含的文件rpm -qpl 光盘中包路径#查询包配置指文件路径rpm -qc vim-common/etc/vimrc#查询包所依赖的库rpm -qR --provides treerpm -q --whatprovides kernel #查询这个包所依赖的包rpm -q --whatrequires kernel #查询哪些包依赖这个包rpm -q --changelog kernel #查询包的更新日志# 查询未安装的包的以上信息加p选项,包名使用光盘路径rpm -qp[licR --scripts --provides --whatrequires]

常用查询用法:

  • -qi PACKAGE 包信息
  • -qf FILE 文件所属包(注意不能跟软连接)
  • -qc PACKAGE 包配置文件路径
  • -ql PACKAGE 安装后文件列表
  • -qd PACKAGE 包文档
  • -qpi PACKAGE_FILE, 光盘中的的包信息
  • -qpl PACKAGE_FILE, 光盘中包安装后的文件路径
  • -qa 系统中所有已安装的包

包卸载:

rpm -e|

options complications –erase 同-e –allmatches 匹配多个包名则一同卸载不提示 –nodeps 忽略依赖关系 –noscripts 不执行脚本 –notriggers

–test PACKAGE_NAME …

rpm2cpio包文件 |cpio –itv 预览包内文件
rpm2cpio包文件 |cpio –id “*.conf” ” 释放包内文件

包校验 rpm {-V|–verify} [select-options] [verify-options]

synbolic complications 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

- -Va :列出目前系统上面所有可能被更动过的档案;
- -Vp :后面加的是文件名称,列出该套件内可能被更动过的档案;
- -Vf :列出某个档案是否被更动过~

Demo

rpm -Va 检查所有安装后的文件改动rpm -qf /etc/issue #通过文件查到包名centos-release-6-9.el6.12.3.x86_64[449][root@CentOS69: /]# rpm -V centos-releasemissing   c /etc/yum.repos.d/CentOS-Base.repomissing   c /etc/yum.repos.d/CentOS-Debuginfo.repomissing   c /etc/yum.repos.d/CentOS-Media.repomissing   c /etc/yum.repos.d/CentOS-Vault.repomissing   c /etc/yum.repos.d/CentOS-fasttrack.repo范例:范例一:列出你的 Linux 内的 logrotate 这个套件是否被更动过?[root@linux ~]# rpm -V logrotate# 如果没有出现任何讯息,恭喜你,该套件没有被更动过。# 如果有出现任何讯息,才是有出现状况啊!范例二:查询一下,你的 /etc/crontab 是否有被更动过?[root@linux ~]# rpm -Vf /etc/crontabS.5....T c /etc/crontab# 瞧!因为有被更动过,所以会列出被更动过的信息!好了,那么我怎么知道到底我的档案被更动过的内容是什么?呵呵!简单的说明一下吧! 例如,我们检查一下 logrotate 这个套件:[root@linux ~]# rpm -ql logrotate/etc/cron.daily/logrotate/etc/logrotate.conf/etc/logrotate.d/usr/sbin/logrotate/usr/share/doc/logrotate-3.7.1/usr/share/doc/logrotate-3.7.1/CHANGES/usr/share/man/man8/logrotate.8.gz/var/lib/logrotate.status# 呵呵!共有八个档案啊![root@linux ~]# rpm -V logrotate..5....T c /etc/logrotate.conf# 上面的信息是这样的:S :file Size differs档案的容量大小是否被改变M :Mode differs (includes permissions and file type)档案的类型或档案的属性,如是否可执行等参数已被改变5 :MD5 sum differsMD5 这一种加密防骇的属性已被改变D :Device major/minor number mis-match装置名称已被改变L :readLink(2) path mis-matchLink 属性已被改变U :User ownership differs档案的所属人已被改变G :Group ownership differs档案的所属群组已被改变T :mTime differs档案的建立时间已被改变所以,如果当一个档案所有的信息都被更动过,那么他的显示就会是:SM5DLUGT c filename至于那个 c 代表的是『 Config file 』的意思,也就是档案的类型,档案类型有底下这几类:•  c :设定档(config file)•  d :文件数据文件(documentation)•  g :鬼档案~通常是该档案不被某个套件所包含,较少发生!(ghost file)•  l :授权档案(license file)•  r :自述文件(read me)

完整性验正:(SHA256)rpm -K|checksig

rpm -K rpmfile或者checksig rpmfile 检查包的完整性和签名rpm --import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7CentOS 7 发行版光盘提供:CentOS_7_Final/RPM-GPG-KEY-CentOS-7rpm -qa “gpg-pubkey*”gpg-pubkey-c105b9de-4e0fd3a3rpm -qi gpg-pubkey-c105b9de-4e0fd3a3rpm -e gpg-pubkey-c105b9de-4e0fd3a3

来源合法性验正:RSA

启动项配置 /boot/grub/grub.conf

==shell乱码:reset==

作业
1. rm /lib64/libc.so.6 恢复.
2. 卸载rpm包
3. java来自哪个包
rpm -qa | grep java
rpm -ql java-1.7.0-openjdk|grep bin
4. 查看rpm包的所有支持的cpu架构

ls | grep -o '[^.]\+\.rpm'|cut -d. -f1|sort|uniq -cls|rev|cut -d. -f2|rev

救援模式

centOS7

  1. 挂载光盘
  2. 系统挂载在/mnt/sysimage
    切换原系统的根chroot /mnt/sysimage
    恢复文件可以把光盘文件考到/mnt/sysimage对应的目录

centOS6

  1. df 查询挂载路径
  2. mkdir /mnt/cdrom
  3. mount /dev/sr0 /mnt/cdrom 挂载光盘
    rpm -ivh /mnt/cdrom/Packages/rpm.XXX.rpm –root=/mnt/sysimage 指定参考的根目录安装rpm包
0 0