Linux-rpm

 跟上一篇一样,本文学习内容为B站上 史上最牛的Linux视频教程—兄弟连 课程学习的笔记,在此感谢李明老师和沈超老师,同时感谢UP的上传.

一、rpm包的命名规则和依赖关系

1.包全名和包名
1.1 包全名:操作的包是没有安装的软件包时,使用包全名.而且要注意路径.
1.2 包名:操作的包是已经安装的软件包时,使用包名.是搜索 /var/lib/rpm 中的数据库

2.RPM 包命名规则

httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
e16.centos 适合的Linux平台
i686 适合的硬件平台
rpm rpm 包扩展名

3.RPM 依赖性
3.1 树形依赖: a->b->c
3.2 环形依赖: a->b->c->a

 

二、rpm包的安装
位置:镜像.iso/Packages
1.首先将镜像挂载,并进入安装包目录下

mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
cd /mnt/cdrom/Packages

2.rpm 安装命令

rpm -ivh (绝对路径的)包全名
选项:
-i(install) 安装 -v(verbose) 显示详细信息 -h(hash) 显示进度 --nodeps 不检测依赖性(不建议使用,否则安装了也不能使用或者功能不全)

3.尝试安装mysql 安装包

rpm -ivh mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm

如图,提示安装mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm必须要有libodbcinst.so.2()(64bit)

以so.2 这种格式为结尾的都是模块,模块所需要的rpm包通过模块依赖查询网站:www.rpmfind.net这个地址查询


通过查询,得知需要安装unixODBC-2.3.1-14.el7.x86_64.rpm 按步骤安装,即可安装成功

 

4.升级RPM 包

rpm -Uvh (绝对路径)更高版本的包全名
选项:
-U (upgrade) 升级

 

5. 卸载

rpm -e 包名

选项: 
-e(erase) 卸载(擦除)
--nodeps 不检查依赖性

 

三、rpm 查询
1. 查询xx是否安装,如果为安装,则提示没有被安装

rpm -q 包名

选项: 
-q(query) 查询

 

2.查询所有已经安装的包

rpm -qa

选项:
-a(all) 所有

配合管道符号,也能查询包,如查询所有httpd 的包

rpm -qa | grep httpd

 

3.查询软件包详细信息

rpm -qi 包名

选项:
-i(infomation) 查询软件信息
-p(package) 查询未安装包所加选项

软件包的信息在作者发出这个软件包之前就已经写到包的信息里了,加选项-i 进行查看
注意位置不能选项的位置不能颠倒,否则只能查出rpm 包安装时候的包全名

 

查询未安装包的信息一定要加上包的路径

 

4.查询包中的文件安装位置

rpm -ql 包名 (-qlp 绝对路径的包全名)

选项:
-l (list) 列表

 

5.查询系统文件属于哪个RPM 包

rpm -qf 系统文件名(必须是通过包安装时候带的文件,不能是手工创建的)

选项: 
-f(file) 查询系统文件属于哪个软件包

 

6.查询软件包的依赖性

rpm (-qR 包名) -qRp 绝对路径的未安装包

选项: 
-R(requires) 查询软件包的依赖性
-p(package) 未安装包的选项

 

四、RPM 包校验

rpm -V 已安装的包名

选项: 
-V 校验指定RPM 包中的文件(verify)

yum 如果未修改,则不会有任何提示或者返回值.

 

尝试修改yum 的配置文件

 

再次校验查询

 

验证内容的8个信息的具体内容如下:

1 S 文件的大小是否发生改变
2 M 文件的类型或者文件的权限(rwx)是否被改变
3 5 文件MD5校验和是否改变(可以看成文件内容是否改变)
4 D 设备的中,从代码是否改变
5 L 文件的路径是否改变
6 U 文件的属主(所有者) 是否改变
7 G 文件的属组(所属组) 是否改变
8 T 文件的修改时间是否改变

 

文件类型

1 c 配置文件(config file)
2 d 普通文档(documentation)
3 g ""文件(ghost file),很少见,就是该文件不应该被这个RPM包所包含
4 l 授权文件(license file)
5 r 描述文件(read me)

如果出现ghost file ,则需要谨慎对待,你所安装的文件可能非原作者所发布的文件.

五、RPM包中文件的提取
使用场景:不小心误删了系统命令(如ls,dir等),在不重装系统的情况下恢复该命令的功能

1.rpm2cpio 绝对路径的包全名 | cpio -idv .文件的绝对路径

命令说明:
1).rpm2cpio 将rpm 包转换未cpio 格式的命令
2).cpio 是一个标准工具, 它用于创建软件档案文件和从档案文件中提取文件
cpio 选项说明:
1). -i copy-in 模式,还原
2).-d 还原时自动新建目录
3).-v 显示还原过程

2.查询dir 命令属于哪个rpm 包

rpm -qf /bin/dir

3.1 移动dir文件,模拟删除dir 命令,在移动前,确认dir 命令可以正常使用

dir
mv /bin/dir /tmp
dir

3.2使用命令,提取dir 文件到当前目录,并通过ls查看一下是否提取成功 (\ 为换行符,下一行出现>,则可以继续输入命令)

rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-24.el7.x86_64.rpm | \
> cpio -idv./usr/bin/dir
ls

 

3.3 测试dir 命令是否可以使用,将/temp/usr/bin/dir 复制到 /bin/ 下 ,然后再测试dir 是否可以使用

dir
cp /temp/usr/bin/dir /bin
dir

 

 总结,最后一个提取的时候,由于原课件用的是CentOS 5.1的版本,所以提取的路径是./bin/ls,而笔者用的是CentOS 7.8 的版本,无论测试的命令是ls 还是dir,都是需要从./usr/bin/ 提取

posted @ 2021-11-09 14:19  Gnbp  阅读(99)  评论(0编辑  收藏  举报