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包扩展名
案例演示:
之前的光盘挂载,使用如下命令挂载光盘并进入到对应的目录:
接下来,ls以后会有很多rpm包,这里截图显示最后的一部分:
◆ RPM包依赖性
树形依赖: a → b → c
环形依赖: a → b → c → a
模块依赖: 模块依赖查询网站:www.rpmfind.net
◇ 案例演示:
可以看出,安装这个软件包需要依赖于 libodbcinst.so.2 这个软件包,但是其实系统中是没有这个软件包的。原因是以 .so.数字 结尾的属于软件包库依赖。
需要到www.rpmfind.net 查找libodbcinst.so.2 对应的软件包。
为了解决这样的问题,于是就有了yum 在线安装。
◆ 包全名与包名
① 包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径。一般用于安装和升级。
② 包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库。一般用于查询和卸载。
◇ RPM安装
pm –ivh 包全名
选项:
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性(一般不会使用此选项)
接下来举例演示安装Apache,即httpd
安装完成 httpd-2.215-.....rpm 之后,还要安装其他的。
但是此时会看到安装这个需要依赖另外两个,所以先安装依赖的:
上面这个还算顺利,接下来安装另一个依赖的:
好吧,这个有需要另外三个依赖包,还需要进一步安装....但是,下一步又需要依赖包!真的太烦人了!所以,安装测试不再进行!!!
◇ RPM包升级
rpm -Uvh 包全名
选项: -U(upgrade) 升级
说明:把安装的-ivh 的i 改成 大写的U即可。此处不再演示案例。
◇ 卸载
rpm -e 包名
选项:
-e(erase) 卸载
--nodeps 不检查依赖性
说明:卸载不需要写包全名,也不需要在rpm包所在的目录下,任何目录下,只要包名即可。
问题:此处运行出错,但是视频上的案例OK,以下是视频截图:
【RPM包查询】
◆ 查询是否安装
[[email protected] ~]# rpm -q 包名 (查询包是否安装)
选项:-q 查询(query)
[[email protected] ~]# rpm –qa (查询所有已经安装的RPM包)
选项: -a 所有(all)
执行上面的命令,会出来一大堆,就不截图了。
当然,也可以使用 rpm -qa | grep httpd 查出所有与httpd 相关的软件包
◆ 查询软件包详细信息
[[email protected] ~]# rpm –qi 包名
选项:
-i 查询软件信息(information)
-p 查询未安装包信息(package)
软件包的信息是生产的时候就已经写好了的,所以也可以查看未安装包的信息。
如果要查看未安装包的信息,使用 rpm -qip 包全名
说明:先进入到安装包的目录,再操作。此案例是在 /mnt/cdrom/Packages (如果没有此目录,先挂载sr0,看本页最前面写的)
在此,记忆的话,只需要记住:安装和卸载 需要加包全名,其他的都是包名。当然这里的查询未安装包也是包全名,只不过不常用。
◆ 查询包中文件安装位置
[[email protected] ~]# rpm –ql 包名
选项:
-l 列表(list)
-p 查询未安装包信息(package)
说明:一个安装包的位置是在组建的时候就决定好了的,所以未安装的包也可以查看它打算安装的路径。注意使用包全名。
◆ 查询系统文件属于哪个RPM包
[[email protected] ~]# rpm –qf 系统文件名
选项:
-f 查询系统文件属于哪个软件包(file)
上面演示查看httpd 都有哪些文件时有一个 /etc/httpd/run 文件。于是我们来看这个文件对应的包是什么:
再比如,进入 /etc 下(/etc 保存的是系统常见的配置文件),看到一个yum.conf 文件,来看看这个配置文件对应的包是什么:
◆ 查询软件包的依赖性
[[email protected] ~]# rpm –qR 包名
选项:
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
首先看看 Apache 的 httpd 安装需要的依赖软件包:
当然,一般更关注的还是未安装的软件包的依赖性(注意进入/mnt/cdrom/Packages;注意 rpm -qRp;注意使用包全名):
【校验与文件提取】
◆ RPM包校验
[[email protected] ~]# rpm –V 已安装的包名
选项:
-V 校验指定RPM包中的文件(verify)
运行后没有任何信息,说明这个包安装后没有做过任何修改!
那么,下面修改一下Apache的配置文件 vi /etc/httpd/conf/httpd.conf
打开后在第402行加入一行,然后保存。接下来再来校验:
◇ 验证内容中的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命令属于哪个软件包)
[[email protected] ~]# mv /bin/ls /tmp/ (#造成ls命令误删除假象)
此时,ls 就不能用了:
[[email protected] ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls (#提取RPM包中ls命令到当前目录的/bin/ls下)
但是,如此执行后还是提示 找不到ls,其实刚才提取的在root目录下的bin目录下的ls,需要进入这个目录下,将ls 复制到 /bin/ls,然后就好了!
[[email protected] ~]# cp /root/bin/ls /bin/ (#把ls命令复制会/bin/目录,修复文件丢失)