centos软件包管理之rpm的使用

centos使用的二进制软件包扩展名为 .rpm , 同时rpm也是一个命令,专门用来安装,升级,查询和卸载这些二进制软件包.

一,rpm包的命名规则
比如包全名 httpd-2.2.15-15.el6.centos.l.i686.rpm, 分解如下:
httpd------软件包名
2.2.15-----软件版本
15---------当前版本的发布次数
el6.centos-适合的linux平台
i686-------适合的硬件平台

其中特别说明一下:
包全名是httpd-2.2.15-15.el6.centos.l.i686.rpm, 但是包名是httpd,记得这个概念,下面会提到.

el6-----EL 即 Enterprise Linux,就是企业级 Linux,,由于RedHat 的EL 已经成了行业标准了,所以一般 EL 表示都是 RedHat的EL, 6 就是指所有的 RHEL 6.x 系列版本.
有的包写的是el6.noarch ,表示适用任何平台,有的没有写适合的linux平台,也表示适用任何平台

i686----i386,i486,i686....只要不是x64就是32位的系统用的.


一,rpm包的依赖性
树形依赖: a依赖于b, b依赖于c,这种情况就要反过来装,先装c,再装b,再装a
环形依赖: a->b->c->a ,环形依赖时把依赖的包全部准备好,用rpm -ivh a b c 一次性安装

这种仅仅是依赖另一个rpm包的问题好解决,直接下载对应的rpm包安装即可,
不好解决的是库依赖,即报错  xxxx.so is needed by 或者 xxxx.so.2 is needed by , 他们并不是一个rpm包, 而是某个rpm包里面的一个函数库,要想得到这个库,就得安装对应的rpm包, 可是我们根本不知道这个库属于哪个rpm包, 怎么解决?
1, 官方给出了一个可以查询的网站: www.rpmfind.net ,专门根据库名称查询rpm包名称.
2, 使用yum来安装软件,缺失的库yum会自动下载对应的软件包并且安装

二,rpm包的安装:
rpm -ivh 包全名
比如 rpm -ivh  httpd-2.2.15-15.el6.centos.l.i686.rpm
i 即install ,安装
v 即verbos, 输出安装的详细信息,log等
h 即hash,显示安装进度

三,rpm包的升级
rpm -Uvh 包全名
-U 即upgrade ,大写的U, 升级
此命令是非在线升级,意义不大, 也可作为安装命令使用,效果等同于 rpm -ivh.

四,rpm的卸载
rpm -e 包名
注意,卸载使用的是包名,不是全名,比如 rpm -e httpd
-e 即 erase
rpm的卸载同样有依赖性, a依赖于b, b依赖于c, 要卸载c的话要先卸载a和b


五,rpm包的查询(查询某软件是否安装等)
不论是通过rpm还是yum安装的, 都可以用rpm命令来查询已安装的软件包.
1,查是否安装(已知包名)
rpm -q 包名
q 即query ,查询
如 rpm -q httpd

2,如果不知道包名呢?
rpm -qa | grep 关键字
a 即 all ,表示查询所有已安装的软件包名,然后用管道过滤下

3,查询已安装包的版本,发行日期,安装日期等详细信息?
rpm -qi 包名
i 即infomation
比如 rpm -qi httpd

4,查询未安装包的详细信息呢?
rpm -qip 包全名
p 即 package
由于还未安装,所以加上-p参数后要用包全名进行查询

5,查询已安装包中各个文件被安装到了哪个目录
rpm -ql 包名
如 rpm -ql httpd
l 即 list
会列出包中每一个文件安装后的绝对路径.

6,查未安装软件包将要被安装到哪个目录.
每个rpm包的安装位置其实是在别人打包时就指定好了的,所以安装前和安装后都能查询.
rpm -qlp 包全名
如 rp -qlp  httpd-2.2.15-15.el6.centos.l.i686.rpm
p 即 package

7,反查某个文件属于哪个包
注意这个文件必须是包安装时产生的,而不是这个包运行时产生的日志文件等,比如想知道httpd这个命令属于哪个包,或者/var/www/incons/tar.png 这个图片属于哪个包(httpd-2.2.15-15.el6.centos.l.i686.rpm安装后会有这个文件)都是可以查的,但是httpd在运行时产生的日志文件,我们不能根据它产生的日志文件反查包,因为这个日志文件不属于这个包.
rpm -qf  文件绝对路径及名称
如 rpm -qf  /var/www/incons/tar.png
执行后会显示包全名httpd-2.2.15-15.el6.centos.l.i686.rpm

如 rpm -qf /etc/yum.conf
执行后会显示包全名yum3.2.29-30.el6.centos.noarch

8,查依赖性
在安装之前或安装后我们都可以查这个包的依赖性
如果安装之前查询依赖:
rpm -qRp 包全名
如 rpm -qRp httpd-2.2.15-15.el6.centos.l.i686.rpm
R 即requires ,大写的
p 即package

如果安装后查询依赖
rpm -qR 包名
如 rpm -qR httpd

六, rpm包文件校验
比如httpd安装好了后,某个文件被其他人修改或者删除了,我想知道是哪个文件被改或删了.
rpm -V 已安装的包名
-V 即verify
比如rpm -V httpd
如果执行后没有任何输出,说明该包安装后,任何文件都没有变化
如果输出有内容,说明有文件被修改或删除等, 具体的是修改还是删除呢?
可以了解下输出的第一列有8个项,代表8种含义,有值的表示此项有变化,如果是点表示此项未变化,此8项信息一次是:
S 文件大小是否变化
M 文件类型或权限变化
5 MD5校验变化,证明文件内容被修改
D 从代码是否改变
L 文件的路径变化
U 文件所有者变化
G 文件的所属组变化
T 修改时间变化

七, 从rpm包中提取文件
假设某个文件被改的面目全非想还原,某个文件误删想恢复,都可以从rpm包直接提取出这个文件
rpm2cpio  包全名 | cpio -idv .要提取的文件路径和名称
rpm2cpio-----是一个包格式转换命令,将rpm格式的包转换成cpio格式
转换成cpio格式之后传送给管道,再用cpio命令处理,cpio的参数 -idv 解释如下:
-i cppy-in 模式,还原
-d 还原时自动新建目录
-v 显示还原过程

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

注意: 提取的文件路径前面有个点,表示提取到当前目录, 假设你在 /home目录下执行从mmm.rpm包中提取/usr/local/xx.conf 的文件,命令如下:
rpm2cpio mmm.rpm | cpio -idv ./usr/local/xx.png
执行后,会产生一个/home/usr/local/xx.png的文件, 即在当前目录(/home)下自动创建新的目录/usr/local 并且还原xx.png这个文件

假设我们把ls这个命令误删除了,想要恢复这个命令,过程如下:
1,你首先得知道ls这个命令属于哪个包,所以在别的机器上反查一下包全名
rpm -qf /bin/ls
查出包全名为coreutils-8.4-19.el6.i686.rpm

2,下载这个包
3,还原,执行命令如下,假设是在/opt目录下执行的:
rpm2cpio coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
那么会产生一个 /opt/bin/ls 的文件

4,将提取的文件移动到真正的目录中
mv /opt/bin/ls /bin/ls





猜你喜欢

转载自18810098265.iteye.com/blog/2400559