Linux总结(十七):linux中RPM包

一、源码包和二进制(rpm包)包比较

1、使用源码包安装软件也有几点不足:

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

(2)编译时间较长,所以安装时间比二进制安装要长。

(3)因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决。

2、相比源码包,二进制包是在软件发布时已经进行过编译的软件包,所以安装速度比源码包快得多(和 Windows 下软件安装速度相当)。也正是因为已经进行通译,大家无法看到软件的源代码。

3、使用 RMP 包安装软件具有以下 2 点好处:

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

     (2)安装速度比源码包安装快得多。


4、与此同时,使用 RMP 包安装软件有如下不足:

(1)经过编译,不能在看到源代码。

(2)功能选择不如源码包灵活。

(3)需要有一定的顺序,但是有时依赖性会非常强。

二、RPM包统一命名规则

1、一般格式

包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名 

2、一般应用

例如,RPM 包的名称是httpd-2.2.15-15.el6.centos.1.i686.rpm,其中:

      (1)httped:软件包名。这里需要注意,httped 是包名,而 httpd-2.2.15-15.el6.centos.1.i686.rpm 通常称为包全名,包名和包全名是不同的,在某些 Linux 命令中,有些命令(如包的安装和升级)使用的是包全名,而有些命令(包的查询和卸载)使用的是包名,一不小心就会弄错。

     (2)2.2.15:包的版本号,版本号的格式通常为主版本号.次版本号.修正号

     (3)15:二进制包发布的次数,表示此 RPM 包是第几次编程生成的。

     (4)el*:软件发行商,el6 表示此包是由 Red Hat 公司发布,适合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用。

     (5)centos:表示此包适用于 CentOS 系统。

     (6)i686:表示此包使用的硬件平台,目前的 RPM 包支持的平台如表 所示:
 

 RPM 包适用的硬件平台
平台名称 适用平台信息
i386 386 以上的计算机都可以安装
i586 686 以上的计算机都可以安装
i686 奔腾 II 以上的计算机都可以安装,目前所有的 CPU 是奔腾 II 以上的,所以这个软件版本居多
x86_64 64 位 CPU 可以安装
noarch 没有硬件限制

       (7)rpm:RPM 包的扩展名,表明这是编译好的二进制包,可以使用 rpm 命令直接安装。此外,还有以 src.rpm 作为扩展名的 RPM 包,这表明是源代码包,需要安装生成源码,然后对其编译并生成 rpm 格式的包,最后才能使用 rpm 命令进行安装。

 三、RPM包的安装

1、自定义安装路径可以安装到/usr/local/ 中,默认安装一般安装到:

RPM 包默认安装路径
安装路径 含 义
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置

2、安装命令格式

[root@localhost ~]# rpm -ivh 包全名

注意,涉及到包全名的命令,一定要注意路径。

           此命令中各选项参数的含义为:

         (1)-i:安装(install);

         (2)-v:显示更详细的信息(verbose);

         (3)-h:打印 #,显示安装进度(hash);

3、安装实例

[root@localhost ~]# rpm -ivh \
/mnt/cdrom/Packages/httpd-2.2.15-15.el6.centos.1.i686.rpm
Preparing...
####################
[100%]
1:httpd
####################
[100%]

 4、此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:

[root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm

           如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

         (1)-nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。

         (2)-replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在"的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。

         (3)-replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。

         (4)-force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。

         (5)-test:测试安装。不会实际安装,只是检测一下依赖性。

         (6)-prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。

5、apache 服务安装完成后,可以尝试启动:

[root@localhost ~]# service 服务名 start|stop|restart|status

       各参数含义:

    (1)start:启动服务;

    (2)stop:停止服务;

    (3)restart:重启服务;

    (4)status: 查看服务状态;


例如:

[root@localhost ~]# service httpd start #启动apache服务


         服务启动后,可以查看端口号 80 是否出现。命令如下:

[root@localhost ~]# netstat -tlun | grep 80
tcp 0 0 :::80:::* LISTEN

         也可以在浏览器中输入 Linux 服务器的 IP 地址,访问这个 apache 服务器。

 四、rpm包升级

[root@localhost ~]# rpm -Uvh 包全名

-U(大写)选项的含义是:如果该软件没安装过则直接安装;若安装过则升级至最新版本。

[root@localhost ~]# rpm -Fvh 包全名

-F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。

五、RPM包的卸载 

1、RPM 软件包的卸载要考虑包之间的依赖性。例如,我们先安装的 httpd 软件包,后安装 httpd 的功能模块 mod_ssl 包,那么在卸载时,就必须先卸载 mod_ssl,然后卸载 httpd,否则会报错。如果卸载 RPM 软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:

[root@localhost ~]# rpm -e httpd
error: Failed dependencies:
httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.2-1.el6.i686
httpd-mmn = 20051115 is needed by (installed) php-5.3.3-3.el6_2.8.i686
httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.15-15.el6.
centos.1.i686
httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.4-10.el6.i686
httpd = 2.2.15-15.el6.centos.1 is needed by (installed) httpd-manual-2.2.
15-15.el6.centos.1 .noarch
httpd is needed by (installed) webalizer-2.21_02-3.3.el6.i686
httpd is needed by (installed) mod_ssl-1:2.2.15-15.el6.centos.1.i686
httpd=0:2.2.15-15.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.15-15.el6.centos.1.i686

 2、RPM 软件包的卸载很简单,使用如下命令即可:

[root@localhost ~]# rpm -e 包名

-e 选项表示卸载,也就是 erase 的首字母。

        RPM 软件包的卸载命令支持使用“-nocteps”选项,即可以不检测依赖性直接卸载,但此方式不推荐大家使用,因为此操作很可能导致其他软件也无法征程使用。

六、RPM包的查询

1、查询格式

[root@localhost ~]# rpm 选项 查询对象

2、rpm -q:查询软件包是否安装

[root@localhost ~]# rpm -q 包名
#-q 表示查询,是 query 的首字母。
#例如,查看 Linux 系统中是否安装 apache,rpm 查询命令应写成:
[root@localhost ~]# rpm -q httpd
httpd-2.2.15-15.el6.centos.1.i686
#注意这里使用的是包名,而不是包全名。因为已安装的软件包只需给出包名,
#系统就可以成功识别(使用包全名反而无法识别)。

3、rpm -qa:查询系统中所有安装的软件包

"1、使用 rpm 查询 Linux 系统中所有已安装软件包"
[root@localhost ~]# rpm -qa
libsamplerate-0.1.7-2.1.el6.i686
startup-notification-0.10-2.1.el6.i686
gnome-themes-2.28.1-6.el6.noarch
fontpackages-filesystem-1.41-1.1.el6.noarch
gdm-libs-2.30.4-33.el6_2.i686
gstreamer-0.10.29-1.el6.i686
redhat-lsb-graphics-4.0-3.el6.centos.i686
…省略部分输出…
"2、这里还可以使用管道符查找出需要的内容"
[root@localhost ~]# rpm -qa | grep httpd
httpd-devel-2.2.15-15.el6.centos.1.i686
httpd-tools-2.2.15-15.el6.centos.1.i686
httpd-manual-2.2.15-15.el6.centos.1.noarch
httpd-2.2.15-15.el6.centos.1.i686
"相比rpm -q 包名命令,采用这种方式可以找到含有包名的所有软件包。"

4、rpm -qi:查询软件包的详细信息

"通过 rpm 命令可以查询软件包的详细信息,命令格式如下:"
[root@localhost ~]rpm -qi 包名
#-i 选项表示查询软件信息,是 information 的首字母。
"想查看 apache 包的详细信息,可以使用如下命令:"
[root@localhost ~]rpm -qi httpd
#Name : httpd Relocations:(not relocatable)
#包名
#Version : 2.2.15 Vendor:CentOS
#版本和厂商
Release : 15.el6.centos.1 Build Date: 2012年02月14日星期二 06时27分1秒
#发行版本和建立时间
Install Date: 2013年01月07日星期一19时22分43秒
Build Host:
c6b18n2.bsys.dev.centos.org
#安装时间
Group : System Environment/Daemons Source RPM:
httpd-2.2.15-15.el6.centos.1.src.rpm
#组和源RPM包文件名
Size : 2896132 License: ASL 2.0
#软件包大小和许可协议
Signature :RSA/SHA1,2012年02月14日星期二 19时11分00秒,Key ID
0946fca2c105b9de
#数字签名
Packager:CentOS BuildSystem <http://bugs.centos.org>
URL : http://httpd.apache.org/
#厂商网址
Summary : Apache HTTP Server
#软件包说明
Description:
The Apache HTTP Server is a powerful, efficient, and extensible web server.
#描述
"除此之外,还可以查询未安装软件包的详细信息,命令格式为:"
[root@localhost ~]rpm -qip 包全名
#-p 选项表示查询未安装的软件包,是 package 的首字母。
#注意,这里用的是包全名,且未安装的软件包需使用“绝对路径+包全名”的方式才能确定包。

5、rpm -ql:命令查询软件包的文件列表

        (1)通过前面的学习我们知道,rpm 软件包通常采用默认路径安装,各安装文件会分门别类安放在适当的目录文件下。使用 rpm 命令可以查询到已安装软件包中包含的所有文件及各自安装路径,命令格式为:

[root@localhost ~]# rpm -ql 包名

         -l 选项表示列出软件包所有文件的安装目录。 

         (2)例如,查看 apache 软件包中所有文件以及各自的安装位置,可使用如下命令:

[root@localhost ~]rpm -ql httpd
#/etc/httpd
#/etc/httpd/conf
#/etc/httpd/conf.d
#/etc/httpd/conf.d/README
#/etc/httpd/conf.d/welcome.conf
#/etc/httpd/conf/httpd.conf
#/etc/httpd/conf/magic
#…省略部分输出…

           同时,rpm 命令还可以查询未安装软件包中包含的所有文件以及打算安装的路径,命令格式如下:

[root@localhost ~]# rpm -qlp 包全名

           -p 选项表示查询未安装的软件包信息,是 package 的首字母。

           注意,由于软件包还未安装,因此需要使用“绝对路径+包全名”的方式才能确定包。

         (3)比如,我们想查看 bing 软件包(未安装,绝对路径为:/mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm)中的所有文件及各自打算安装的位置,可以执行如下命令:

[root@localhost ~]rpm -qlp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
#/etc/NetworkManager/dispatcher.d/13-named
#/etc/logrotate.d/named
#/etc/named
#/etc/named.conf
#/etc/named.iscdlv.key
#/etc/named.rfc1912.zones
#…省略部分输出…

5、rpm -qf:命令查询系统文件属于哪个RPM包

[root@localhost ~]# rpm -qf 系统文件名

           rpm -ql 命令是通过软件包查询所含文件的安装路径,rpm 还支持反向查询,即查询某系统文件所属哪个 RPM 软件包。-f 选项的含义是查询系统文件所属哪个软件包,是 file 的首字母。注意,只有使用 RPM 包安装的文件才能使用该命令,手动方式建立的文件无法使用此命令。

           例如,查询 ls 命令所属的软件包,可以执行如下命令:

[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-19.el6.i686

 6、rpm -qR:查询软件包的依赖关系

(1)格式:

[root@localhost ~]# rpm -qR 包名

         使用 rpm 命令安装 RPM 包,需考虑与其他 RPM 包的依赖关系。rpm -qR 命令就用来查询某已安装软件包依赖的其他包,-R(大写)选项的含义是查询软件包的依赖性,是 requires 的首字母。

(2)例子:

"1、查询 apache 软件包的依赖性"
[root@localhost ~]rpm -qR httpd
#/bin/bash
#/bin/sh
#/etc/mime.types
#/usr/sbin/useradd
#apr-util-ldap
#chkconfig
#config(httpd) = 2.2.15-15.el6.centos.1
#httpd-tods = 2.2.15-15.el6.centos.1
#initscripts >= 8.36
#…省略部分输出…
"2、同样,在此命令的基础上增加 -p 选项,即可实现查找未安装软件包的依赖性。"
"例如,bind 软件包尚未安装
(绝对路径为: /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm),
查看此软件包的依赖性可执行如下命令:"
[root@localhost ~]rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
#/bin/bash
#/bin/sh
#bind-libs = 32:9.8.2-0.10.rc1.el6
#chkconfig
#chkconfig
#config(bind) = 32:9.8.2-0.10.rc1.el6
#grep
#libbind9.so.80
#libc.so.6
#libc.so.6(GLIBC_2.0)
#libc.so.6(GLIBC_2.1)
#…省略部分输出…
"这里使用的也是“绝对路径+包全名”的方式。"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章