跟上一篇一样,本文学习内容为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/ 提取