Linux笔记13-rpm命令管理

软件包分类:① 源码包(脚本安装包) ② 二进制包(RPM包、系统默认包)

【源码包】

◆ 源码包的优点是:

① 开源,如果有足够的能力,可以修改源代码

② 可以*选择所需的功能

③ 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高

④ 卸载方便

◆ 源码包的缺点是:

① 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误

②编译过程时间较长,安装比二进制安装时间长

③ 因为是编译安装,安装过程中一旦报错新手很难解决

【RPM包】

◆ 二进制包的优点:

① 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载

② 安装速度比源码包安装快的多

◆ 二进制包缺点:

① 经过编译,不再可以看到源代码

② 功能选择不如源码包灵活 ③ 依赖性

 

 

【RPM包管理】

rpm命令管理

◆ RPM包命名原则

httpd-2.2.15-15.el6.centos.1.i686.rpm

httpd 软件包名

2.2.15 软件版本

15 软件发布的次数

l6.centos 适合的Linux平台

686 适合的硬件平台

pm rpm包扩展名

案例演示:

之前的光盘挂载,使用如下命令挂载光盘并进入到对应的目录:

Linux笔记13-rpm命令管理

接下来,ls以后会有很多rpm包,这里截图显示最后的一部分:

Linux笔记13-rpm命令管理

 

 

◆ RPM包依赖性

树形依赖: a → b → c

环形依赖: a → b → c → a

模块依赖: 模块依赖查询网站:www.rpmfind.net

◇ 案例演示:

Linux笔记13-rpm命令管理

可以看出,安装这个软件包需要依赖于 libodbcinst.so.2 这个软件包,但是其实系统中是没有这个软件包的。原因是以 .so.数字 结尾的属于软件包库依赖。

需要到www.rpmfind.net 查找libodbcinst.so.2 对应的软件包。

Linux笔记13-rpm命令管理

为了解决这样的问题,于是就有了yum 在线安装。

 

 

◆ 包全名与包名

 ① 包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径。一般用于安装和升级。

 ② 包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库。一般用于查询和卸载。

 

 

◇ RPM安装

pm –ivh 包全名

选项:

-i(install) 安装

-v(verbose) 显示详细信息

-h(hash) 显示进度

--nodeps 不检测依赖性(一般不会使用此选项)

接下来举例演示安装Apache,即httpd

Linux笔记13-rpm命令管理

安装完成 httpd-2.215-.....rpm 之后,还要安装其他的。

Linux笔记13-rpm命令管理

但是此时会看到安装这个需要依赖另外两个,所以先安装依赖的:

Linux笔记13-rpm命令管理

上面这个还算顺利,接下来安装另一个依赖的:

Linux笔记13-rpm命令管理

好吧,这个有需要另外三个依赖包,还需要进一步安装....但是,下一步又需要依赖包!真的太烦人了!所以,安装测试不再进行!!!

 

 

◇ RPM包升级

rpm -Uvh 包全名

选项: -U(upgrade) 升级

说明:把安装的-ivh 的i 改成 大写的U即可。此处不再演示案例。

 

 

◇ 卸载

rpm -e 包名

选项:

-e(erase) 卸载

--nodeps 不检查依赖性

说明:卸载不需要写包全名,也不需要在rpm包所在的目录下,任何目录下,只要包名即可。

Linux笔记13-rpm命令管理

问题:此处运行出错,但是视频上的案例OK,以下是视频截图:

Linux笔记13-rpm命令管理

 

 

【RPM包查询】

◆ 查询是否安装

[[email protected] ~]# rpm -q 包名 (查询包是否安装)

选项:-q 查询(query)

Linux笔记13-rpm命令管理

[[email protected] ~]# rpm –qa (查询所有已经安装的RPM包)

选项: -a 所有(all)

Linux笔记13-rpm命令管理

执行上面的命令,会出来一大堆,就不截图了。

当然,也可以使用 rpm -qa | grep httpd 查出所有与httpd 相关的软件包

Linux笔记13-rpm命令管理

 

 

◆ 查询软件包详细信息

[[email protected] ~]# rpm –qi 包名

选项:

-i 查询软件信息(information)

-p 查询未安装包信息(package)

Linux笔记13-rpm命令管理

软件包的信息是生产的时候就已经写好了的,所以也可以查看未安装包的信息。

如果要查看未安装包的信息,使用 rpm -qip 包全名

Linux笔记13-rpm命令管理

说明:先进入到安装包的目录,再操作。此案例是在 /mnt/cdrom/Packages (如果没有此目录,先挂载sr0,看本页最前面写的)

在此,记忆的话,只需要记住:安装和卸载 需要加包全名,其他的都是包名。当然这里的查询未安装包也是包全名,只不过不常用。

 

 

◆ 查询包中文件安装位置

[[email protected] ~]# rpm –ql 包名

选项:

-l 列表(list)

-p 查询未安装包信息(package)

Linux笔记13-rpm命令管理

说明:一个安装包的位置是在组建的时候就决定好了的,所以未安装的包也可以查看它打算安装的路径。注意使用包全名。

Linux笔记13-rpm命令管理

 

 

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

[[email protected] ~]# rpm –qf 系统文件名

选项:

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

上面演示查看httpd 都有哪些文件时有一个 /etc/httpd/run 文件。于是我们来看这个文件对应的包是什么:

Linux笔记13-rpm命令管理

再比如,进入 /etc 下(/etc 保存的是系统常见的配置文件),看到一个yum.conf 文件,来看看这个配置文件对应的包是什么:

Linux笔记13-rpm命令管理

 

 

◆ 查询软件包的依赖性

[[email protected] ~]# rpm –qR 包名

选项:

-R 查询软件包的依赖性(requires)

-p 查询未安装包信息(package)

首先看看 Apache 的 httpd 安装需要的依赖软件包:

Linux笔记13-rpm命令管理

当然,一般更关注的还是未安装的软件包的依赖性(注意进入/mnt/cdrom/Packages;注意 rpm -qRp;注意使用包全名):

Linux笔记13-rpm命令管理

 

 

【校验与文件提取】

◆ RPM包校验

[[email protected] ~]# rpm –V 已安装的包名

选项:

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

Linux笔记13-rpm命令管理

运行后没有任何信息,说明这个包安装后没有做过任何修改!

那么,下面修改一下Apache的配置文件 vi /etc/httpd/conf/httpd.conf

Linux笔记13-rpm命令管理

打开后在第402行加入一行,然后保存。接下来再来校验:

Linux笔记13-rpm命令管理

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

S 文件大小是否改变

M 文件的类型或文件的权限(rwx)是否被改变

5 文件MD5校验和是否改变(可以看成文件内容是否改变)

D 设备的中,从代码是否改变

L 文件路径是否改变

U 文件的属主(所有者)是否改变

G 文件的属组是否改变

T 文件的修改时间是否改变

◇ 文件类型

c 配置文件(config file)

d 普通文档(documentation)

g “鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含

l 授权文件(license file)

r 描述文件(read me)

 

 

◆ RPM包中文件提取

(说明:此命令一般用于误操作导致的删除了某个重要文件,然后不用重新安装系统,只需要重新提取此文件再覆盖。)

【关于 cpio】cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

[[email protected] ~]# cpio 选项 < [文件|设备]

选项:

-i:copy-in模式,还原

-d:还原时自动新建目录

-v:显示还原过程

【关于 rpm2cpio】rpm2cpio 将rpm包转换为cpio格式的命令

[[email protected] ~]# rpm2cpio 包全名 | \ (扩展:这里的反斜杠 \ 表示 命令太长没有输完,换一行继续!)

cpio -idv .文件绝对路径

◇ 案例演示:

[[email protected] ~]# rpm -qf /bin/ls (#查询ls命令属于哪个软件包)

Linux笔记13-rpm命令管理

[[email protected] ~]# mv /bin/ls /tmp/ (#造成ls命令误删除假象)

Linux笔记13-rpm命令管理

此时,ls 就不能用了:

Linux笔记13-rpm命令管理

[[email protected] ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls (#提取RPM包中ls命令到当前目录的/bin/ls下)

Linux笔记13-rpm命令管理

但是,如此执行后还是提示 找不到ls,其实刚才提取的在root目录下的bin目录下的ls,需要进入这个目录下,将ls 复制到 /bin/ls,然后就好了!

[[email protected] ~]# cp /root/bin/ls /bin/ (#把ls命令复制会/bin/目录,修复文件丢失)

Linux笔记13-rpm命令管理