Linux下软件的安装与管理(四) 原

Linux 下安装软件有自己的一套方式,用户可以根据自己的需要和获得的软件包的不同,选择自己喜欢的安装方式,

    最常见的四种安装方式:

  • 源码安装方式
  • RPM安装方式
  • 二进制软件安装方式
  • yum安装方式

一、源码安装方式

        由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache、tomcat、php等软件。开源软件基本都提供源码下载,源码安装的方式;源码安装的好处是用户可以自己定制软件功能,安装需要的模块,不需要的功能可以不用安装,此外,用户还可以自己选择安装路径,方便管理,卸载软件也很方便,只需删除对应的安装目录即可。没有windows所谓的注册表之说。 源码安装软件一般有以下几个步骤组成:下载解压源码、分析安装平台环境(ifconfigure)、编译安装软件(make,make install)。下面分别介绍。

1.1 下载解压源码

         linux下软件的源码一般都是C或者C++语言编写的,并且都会在软件的官方网站上提供源码包下载,例如apache开源项目的官方网站为http://www.apache.org,此外在网上的很多开源社区一般也提供一些常用软件的源码下载,源码都打包成压缩文件,常见的源码打包压缩格式有“.tar.gz”、“.tar.baz2”等。我们可以从网站上首先下载源码文件,然后在传到所在的linux系统下,如果你的linux系统处于联网状态下,也可以直接在系统内通过wget之类的下载命令将源码包直接下载到linux系统下。         下载完成,把相应的软件解包即可,针对下载软件包的不同,使用不同的方法进行解压,解压完毕后进入解压生成的目录中,在这个目录下,一般都存在一个REDAME文件,这个文本文件非常重要,它详细的介绍了这个软件所能完成的功能、授权许可、安装需求、安装注意事项、安装方式等等,由于linux各个版本的差异,以及安装环境的不同,软件的安装方式也不尽相同,所以在安装软件前,一定要事先阅读这个README文件,确保安装的正确性。

1.2 分析安装平台环境

         在软件包解压完毕之后,我们进入源码目录,一般都会存在configure和README这么两个文件,README就是上面我们讲到的,是对软件的介绍和安装说明;linux下软件的安装受到操作系统安装环境的影响,比如某些软件在安装或者运行过程中需要调用操作系统本身的库文件,或者需要运行系统的某个工具等等,但是系统中不存在这个库文件或者这个工具没有安装,那么安装或者运行软件就会失败。         为了避免这个问题的出现,在安装软件的时候就需要分析操作系统环境,检测当前系统是否拥有安装软件所需的所有文件和工具,如果系统缺少某个文件,就给出提示,直到满足软件的所有需求为止。这个就是configure文件的功能,configure文件一般是个可执行文件,可以在当前目录下直接输入“./configure”进行软件安装的环境测试,如果提示缺少某些安装包,就需要进行安装,直到测试通过。通常的,源码安装都需要GCC或者CC编译器,这些编译器一般在安装系统时定制安装包中的开发工具选项下,其实这也是我们在第二章安装linux系统中要求选择开发工具包的原因所在。       此外,在执行configure分析软件需求时,还可以在“./configure”后面加上软件的安装路径以及安装所需的模块等等一些选项,来定制用户需要的软件功能。

1.3 编译安装软件

      在验证软件安装环境后,正式进入软件的编译步骤,在进行编译前,首先了解下关于编译的一些基础知识。       在linux系统下,make是我们经常用到的编译命令,无论是安装软件还是项目开发,都会经常用到编译、安装命令,也就是make和make install,对于一个包含很多源文件的应用程序,使用make和makefile工具可以简单快速的解决各个源文件之间复杂的依赖关系,同时,make工具还可以自动完成所有源码文件的编译工作,并且可以只对上次编译后修改过的文件进行增量编译,因此,熟练掌握了make和makefile工具之后,源码安装软件就变的像windows下安装软件一样简单。

 1> Makefile文件

      make工具最主要的功能就是通过makefile文件来实现的,makefile文件是按照某种语法来进行编写的,文件中定义了各个源文件之间的依赖关系,并说明了如何编译源文件并生成可执行文件,它通过描述各个源程序之间的关系让make工具自动完成编译工作。       在linux系统下,习惯用Makefile替代makefile文件,我们在执行configure通过后,就会在当前目录下生成这个文件,一般情况下在命令行输入make时,make命令会默认去寻找当前目录下的Makefile文件,如果我们用其它文件作为makefile,就要在make命令选项后指定makefile文件,例如我们设定编译规则文件为make_file,就需要使用以下命令指定: [root@WEBServer ~]#make -f make_file 

下面我们通过举例了解下Makefile的编写原则和内容。       例如有一个test程序,有三个源文件file1.c、file2.c、file3.c以及库文件LS编译生成,这三个源文件还分别包含了自己的头文件1.h、2.h、3.h。通常,C编译器将会输出三个目标文件file1.o、file2.o、file3.o。假定file1.c和file3.c都要声明用到一个apcs的文件,但是file2.c不用,也就是在file1.c和file3.c文件中都有类似“#include “apcs””的声明。 下面这段代码就是对test程序的描述:

  1:#It is a example for describing makefile
  2:test: file1.o file2.o file3.o
  3:cc file1.o file2.o file3.o -LS -o test
  4:file1.o: file1.c 1.h apcs
  5:gcc -c file1.c
  6:file3.o: file3.c 3.h apcs
  7:gcc -c file3.c
  8:file2.o: file2.c c.h
  9:gcc -c file2.c

这个描述文档其实就是一个makefile文件,第一行为注释行,第二行指定test程序有file1.o、file2.o、file3.o链接生成,第三行描述了如何从test所依赖的文件建立可执行文件,接下来的第四、六、八行定义了三个目标文件和它们依赖的“.c”、“.h”和“apcs”文件。剩下的第五、七、九行定义了如何从目标依赖的文件生成可执行文件。

 2> make与 make install

在了解Makefile文件结构后,我们就可以控制编译的选项,定制自己所需的软件功能。 接下来,我们只需在命令行输入make命令,即可进入编译阶段,根据软件源程序的大小和系统的硬件配置,编译时间不定,编译完毕,会在当前目录以及子目录下生成相应的可执行文件,接下来就进入最后的安装软件阶段,在命令行输入make install命令,开始安装软件,安装进程会首先创建安装目录,如果我们没有指定安装的目录,安装程序默认会安装在系统的/usr/local目录下创建安装目录,然后将相应的文件和可执行程序从源码目录拷贝到安装目录下,这样安装就完毕了。

1.4 源码安装Apache Http server

      下面我们通过源码安装apache,实例讲解linux下源码的安装方式。

1. 下载解压apache源码

[root@WEBServer~]#mkdir /apache  #在根目录下创建一个apache目录
[root@WEBServer~]#cd /apache  #切换到apache目录
[root@WEBServer apache]#wget \  #下载apache源码
>http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.bz2
[root@WEBServer apache]#tar -jxvf httpd-2.2.9.tar.bz2 #解压apache源码
[root@WEBServer apache]#ls  #显示解压结果
httpd-2.2.9   httpd-2.2.9.tar.bz2

2. 测试安装环境(设置安装环境)

[root@WEBServer apache]#cd httpd-2.2.9 #切换到httpd-2.2.9目录下
[root@WEBServer httpd-2.2.9]#./configure  --prefix=/opt/apache2.2.9 \
>--enable-so \
>--enable-mods-shared=most \
>--enable-proxy-balancer=shared \
>--enable-proxy-http=shared \
>--enable-proxy-ajp \
>--enable-rewrite

注意:上面我们指定apache的安装目录为/opt/apache2.2.9,同时指定需要编译的apache模块。 下面分别介绍这些模块代表的含义,更详细的请参看apache文档。

  •  --enable-so选项:表示让 Apache 可以支持DSO模式,这里采用的是 Apache2.0以后的语法。如果你的Apache 是1.3版本,应改为“--enable-module=so”。
  •  --enable-mods-shared=most选项:表示动态编译大部分常用的模块,当然,也可以有选择的加载一些模块,most意思是只包含通常用的模块,并且以动态加载模式加载。如果用的是 Apache1.3, 改为“--       enable-shared=max”即可。
  •  --enable-proxy-balancer=shared选项:表示让apache支持负载均衡功能,即动态的编译apache的负载均衡模块。
  •  --enable-proxy-http=shared选项:表示动态编译apache的http代理模块。
  •  --enable-proxy-ajp选项:表示动态编译apache的proxy-ajp模块。
  •  --enable-rewrite选项:让apache支持地址重写功能,即动态编译apache的rewrite模块。

3.编译安装软件

[root@WEBServer httpd-2.2.9]#make
[root@WEBServer httpd-2.2.9]#make install

安装完毕,apache被安装到/opt/apache2.2.9下,接下来我们就可以使用apache软件了。

二、RPM包方式安装

2.1 RPM包管理工具介绍

      RPM是Red Hat Package Manager的缩写,本意就是Redhat软件包管理,是最先由Redhat公司开发出来的linux下软件包管理工具,由于这种软件管理方式非常方便,逐渐被其它linux发行商所借用,现在已经成为linux平台下通用的软件包管理方式,例如Fedora 、Redhat、suse、Mandrake等主流linux发行版本都默认采用了这种软件包管理方式。       RPM包管理类似于windows下的“添加/删除程序”但是功能却比“添加/删除程序”强大很多。在Linux的系统安装光盘中,有很多以“.rpm”结尾的软件包,这些包文件就是我们所说的RPM文件。每个RPM文件中包含了已经编译好的二进制可执行文件,其实就是将软件源码文件进行编译安装,然后进行封装,就成了RPM文件,类似与windows安装包中的“.exe”文件。此外RPM文件中还包含了运行可执行文件所需的其它文件,这点也和windows下的软件包类似,windows程序的安装包中,除了“exe”可执行文件,还有其它依赖运行的文件。       RPM包管理方式的优点是:安装简单方便,因为软件已经编译完成打包完毕,安装只是个验证环境和解压的过程。此外通过RPM方式安装的软件,RPM工具都会记录软件的安装信息,这样方便了软件日后的查询,升级和卸载。 RPM包管理方式的缺点是对操作系统环境的依赖很大,它要求RPM包的安装环境必须与RPM包封装时的环境相一致或相当。还需要满足安装时与系统某些软件包的依赖关系,例如需要安装A软件,但是A软件需要系统有B和C软件的支持,那么就必须先安装B和C软件,然后才能安装A软件。这也是我们在用RPM包方式安装软件需要特别注意的地方。

2.2 RPM包种类和命令

      RPM包的封装格式一般有两种,分别是RPM和SRPM,SRPM包也是一种RPM,但是它包含了编译时的源码文件和一些编译指定的参数文件,因而在使用的时候需要重新进行编译,通常SRPM对应的RPM文件类似与“xxxxxxxx.src.rpm”格式。 下面我们讲述一下两种RPM包对应的文件名含义: 例如一个rpm文件:nxserver-2.1.0-22.i386.rpm,其中:

  • “nxserver”表示软件的名称,
  • “2.1.0”表示软件的版本号,
  • “22”表示软件更新发行的次数,
  • “i386”表示适合硬件的平台,
  • “.rpm”是rpm软件包的标识。

      一般的RPM封装包的命名格式都有这五个部分组成,由于SRPM包是需要编译才能使用的,因此没有上面显示项中对应的平台选项,其它与RPM包命令格式完全一样。       对于RPM包的五个组成部分,我们下面介绍一些它们更详细的含义和异同:

  • 软件名称:是对软件包的标识;
  • 软件的版本号:每个软件都有自己的版本号,版本号可以说明软件从开始到现在发行了多少了,软件是否是新的等等。
  • 软件更新发行次数:由于一个版本的软件在发行后可能出现bug或者漏洞,那么就需要修复和重新封装,每修复封装一次,软件的名称就要更新一次。
  • 适合的硬件平台:由于RPM包要在各种不同的linux硬件平台上使用,但是由于每个不同的硬件平台RPM打包封装的参数也各不相同,这样就出现了针对i386、i686、x86_64、noarch等的平台名称标识。
    • i386指这个软件包适用于intel 80386以后的x86架构的计算机。
    • i686指这个软件包适用于intel 80686以后(奔腾pro以上)的x86架构的计算机。
    • x86_64指这个软件包适用于x86架构64为处理器的计算机。
    • noarch表示这个软件包与硬件构架无关,可以通用。  noarch是no architecture的缩写,说明这个包可以在各个不同的cpu上使用。

      需要注意的是:i386软件包可以在任意x86平台下使用,无论是i686或是x86_64的机器,相反,i686的软件包不一定能在i386硬件上面使用,由于i686软件包一般都是对cpu进行了优化,所有具有向后兼容性,但是不具有先前兼容的特性。

  • RPM软件包标识:RPM软件包标识用于指明此文件是rpm格式的文件,一般有两种后缀标识,分别是以“.rpm”结尾和以“.src.rpm”结尾。

2.3 RPM工具的使用

      RPM工具的使用分为安装、查询、验证、更新、删除等操作,下面我们分别介绍。

1. 安装软件包

命令格式:rpm -i [辅助选项] file1.rpm file2.rpm…..fileN.rpm  

主选项说明:

  • -i:install的意思,就是安装软件。也可以使用“--install”。
  • 参数说明:file1.rpm file2.rpm…..filen.rpm是指定将要安装RPM包的文件名,可以多个文件一起安装。

辅助选项说明:这里的选项很多,我们只列出常用选项,详细解释如下:

  •  -v:显示附加信息。
  •  -h:安装时输出标记“#”。
  •  --test:只对安装进行测试,并不实际安装。
  •  --nodeps:不检查软件之间的依赖关系。加入此选项可能会导致软件不可用。
  •  --force:忽略软件包以及软件冲突。
  •  --replacepkgs:强制重新安装已经安装的软件包。
  •  --prefix:将软件包安装到由 指定的路径下。
  •  --percent:以百分比的形式输出安装的进度。
  •  --excludedocs:不安装软件包中的说明文件
  •  --includedocs:安装软件包,包含说明文件。

举例: (1)我们安装ipvsadm-1.24-6.i386.rpm,使用下面命令:

[root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm 

执行结果如下:

warning:ipvsadm-1.24-6.i386.rpm:V3 DSA signature: NOKEY, key ID 44e181
Preparing...    ############################ [100%]
   1:ipvsadm  ############################[100%]

(2)下面操作显示了安装gcc-3.4.4-2.i386.rpm包过程,在安装过程中,出现了安装包依赖问题,我们的处理过程是这样的:

[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm 

执行结果如下:

warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        glibc-devel >= 2.2.90-12 is needed by gcc-3.4.4-2.i386
    Suggested resolutions:
        glibc-devel-2.3.4-2.13.i386.rpm

这里显示在安装gcc编译器之前需要安装glibc-devel包的支持,这个包详细的版本是glibc-devel-2.3.4-2.13.i386.rpm,因此,我们需要先安装这个软件包。

[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm 

执行结果如下:

warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        glibc-headers is needed by glibc-devel-2.3.4-2.13.i386
        glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386
    Suggested resolutions:
        glibc-headers-2.3.4-2.13.i386.rpm

这里又出现依赖关系,上面的错误提示是说安装glibc-devel包需要先安装glibc-headers软件包,并且给出了安装建议版本,于是我们就先安装glibc-headers包。

[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm 

执行结果如下:

warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        kernel-headers is needed by glibc-headers-2.3.4-2.13.i386
        kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386
    Suggested resolutions:
        glibc-kernheaders-2.4-9.1.98.EL.i386.rpm

依然报错,信息与上面相同,意思是说在安装kernel-headers包之前,需要glibc-kernheaders包的支持,并且给出了建议版本,我们先安装glibc-kernheaders包。

[root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm 

执行结果如下: 

warning: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################### [100%]
   1:glibc-kernheaders ###################### [100%]
这次依赖终于解除了,按照相反的顺序开始安装,下面显示安装步骤。
[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm       
warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...  ########################### [100%]
   1:glibc-headers  ######################## [100%]
[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm 
warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################### [100%]
   1:glibc-devel  ######################## [100%]
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm 
warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...  ############################## [100%]
   1:gcc      ########################### [100%]

(3) 在上例中,如果我们在安装gcc第一步加入“--nodeps”参数,gcc由于不检查依赖关系,即可安装成功:

[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm –nodeps

执行结果如下:

warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...  ############################## [100%]
   1:gcc      ########################### [100%]

注意:这里加入了忽略依赖关系的参数,虽然可以安装成功,但是我们不建议这么做,因为这样安装的软件很有可能是不可用的,或者使用过程中出现问题, 除非我们知道忽略依赖关系对软件本身没有影响的话,才可使用此参数。

(4)安装xxxxxx.src.rpm的方法,这里我们以my-package.src.rpm名称为例,在redhat linux i386平台下进行介绍,常用的有两种方法,操作步骤如下: 方法一:  ①执行rpm -i my-package.src.rpm 

②执行以下命令切换目录

cd /usr/src/redhat/SPECS

 ③通过以下命令执行rpmbuild操作

 rpmbuild -bp my-package.specs 

        my-package.specs 一个和软件包同名的specs文件。 

        此时,在/root/rpmbuild/RPMS/x86_64这个目录下,有一个或者多个已经生成的rpm包,这个就是已经编译好的可执行的rpm文件。 ④ cd /usr/src/redhat/BUILD/my-package/ 一个软件包同名的目录  ⑤ ./configure 这一步和编译普通的源码软件一样,可以加上参数  ⑥ make ⑦ make install 方法二:  1)执行rpm -i my-package.src.rpm  2)cd /usr/src/redhat/SPECS  前两步和方法一相同  3)rpmbuild -bb my-package.specs 一个和软件包同名的specs文件。 此时,在/usr/src/redhat/RPM/i386/ (这里的路径根据具体包的不同,也可能是i686、noarch等等) 在这个目录下,有一个或者两个新的rpm包,这个是编译好的二进制文件。  4)执行rpm -i new-package.rpm,安装完成。 例如:利用xxxx.src.rpm格式的包安装rsh软件,操作方法如下: [root@localhost ~]# rpm -i rsh-0.17-25.3.src.rpm [root@localhost ~]#cd /usr/src/redhat/SPECS/ rsh.spec [root@localhost SPECS]#rpmbuild  -bb rsh.spec [root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386/ rsh-0.17-25.3.i386.rpm   rsh-debuginfo-0.17-25.3.i386.rpm   rsh-server-0.17-25.3.i386.rpm [root@localhost i386]#rpm -ivh rsh-* Preparing...  ############################ [100%]    1:rsh-server  ########################## [ 33%]    2:rsh   ############################## [ 67%]    3:rsh-debuginfo  ######################## [100%] [root@localhost i386]#

2. 查询软件包

命令格式:

rpm -q [辅助选项] package1……packageN

主选项说明:

  • -q:query的意思,也可以使用“--query”。
  • 参数说明:package1……packageN为已经安装的软件包名称。

辅助选项说明:

  •  -f:查询操作系统中某个文件属于哪个对应的rpm软件包。

例如:

[root@localhost ~]# rpm -qf /bin/bash
bash-3.0-19.2
  • -p:查询以“.rpm”为后缀的软件包安装后对应的包名称。

例如:

[root@server ~]# rpm -qp gcc-3.4.4-2.i386.rpm 
gcc-3.4.4-2

从这里的查询可以得知,“gcc-3.4.4-2.i386.rpm”安装到系统以后,对应的包名为gcc-3.4.4-2。

  •  -l:显示软件包中的所有文件列表。此选项后面跟软件包安装后对应的包名,切记不是以“.rpm”为后缀的rpm包。

例如:

[root@server ~]# rpm –ql gcc-3.4.4-2
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcov
………(以下省略)………
  •  -i:显示软件包的概要信息,例如软件名称、版本、适应平台、大小等等。此选项后面跟完整的包名,切忌不是以“.rpm”为后缀的rpm包。

例如:在得到一个软件,安装之前一般都需要看下软件包有什么内容,可以使用以下命令: [root@server ~]# rpm -qi gcc-3.4.4-2.i386 或者使用 [root@server ~]# rpm -qpi gcc-3.4.4-2.i386.rpm 这里由于用到了“-p”选项,首先显示出了安装后的软件包名,所以“-i”选项后可跟“.rpm”结尾的软件包。

  •  -g:查询系统有哪些软件包属于指定的类别,RPM工具根据软件功能的不同,将软件分了很多种类,分别如下,括弧内为注释说明:
    •        Amusements/Games (娱乐/游戏)
    •   Amusements/Graphics(娱乐/图形)
    •   Applications/Archiving (应用/档案)
    •   Applications/Communications (应用/通讯)
    •   Applications/Databases (应用/数据库)
    •   Applications/Editors (应用/编辑器)
    •   Applications/Emulators (应用/仿真器)
    •   Applications/Engineering (应用/工程)
    •   Applications/File (应用/文件)
    •   Applications/Internet (应用/因特网)
    •   Applications/Multimedia (应用/多媒体)
    •   Applications/Productivity (应用/产品)
    •   Applications/Publishing (应用/印刷)
    •   Applications/System (应用/系统)
    •   Applications/Text (应用/文本)
    •   Development/Debuggers (开发/调试器)
    •   Development/Languages (开发/语言)
    •   Development/Libraries (开发/函数库)
    •   Development/System (开发/系统)
    •   Development/Tools (开发/工具)
    •   Documentation (说明文档)
    •   System Environment/Base (系统环境/基础)
    •   System Environment/Daemons (系统环境/守护)
    •   System Environment/Kernel (系统环境/内核)
    •   System Environment/Libraries (系统环境/函数库)
    •   System Environment/Shells (系统环境/接口)
    •   User Interface/Desktops (用户界面/桌面)
    •   User Interface/X (用户界面/X窗口)
    •   User Interface/X Hardware Support (用户界面/X硬件支持)

例如:查看当前系统属于“开发/调试器”类别的包有多少,使用以下命令: [root@server ~]# rpm -qg "Development/Debuggers"      lsof-4.72-1.1 crash-4.0-2 sysreport-1.3.15-5 ltrace-0.3.36-2.EL4 strace-4.5.13-0.EL4.1 valgrind-2.2.0-5.EL4 valgrind-callgrind-0.9.9-1 gdb-6.3.0.0-1.63 pstack-1.2-6

  •  -d:显示软件包中的说明文件列表,RPM将软件包中的文件分为三类,一类是配置文件,一类是说明文件,一类是可执行文件。后面跟完整的包名,切忌不是以“.rpm”为后缀的rpm包。

例如:查看file软件包中的说明文件,使用以下命令: [root@server108 cicro]# rpm -qd  file-4.10-2 /usr/share/doc/file-4.10/LEGAL.NOTICE /usr/share/doc/file-4.10/README /usr/share/man/man1/file.1.gz /usr/share/man/man3/libmagic.3.gz /usr/share/man/man5/magic.5.gz

  •  -s:与“-l“选项类似,除了显示软件包中的所有文件列表信息,而且还显示每个文件的状态。RPM已安装的软件包中各个文件拥有四种状态,分别是normal(正常状态,表示文件没有被其它软件包修改过)、not installed(未安装状态,表示文件没有安装)、replaced(已替换状态,表明此文件已经被其它软件包修改替换过了)、net shared(网络共享状态,表示此文件处于网络共享状态)。

例如:查看ipvsadm-1.24-6包中每个文件的状态,使用以下命令: [root@localhost ~]# rpm -i --excludedocs ipvsadm-1.24-6.i386.rpm  [root@localhost ~]# rpm -qs ipvsadm-1.24-6                          normal        /etc/rc.d/init.d/ipvsadm normal        /sbin/ipvsadm normal        /sbin/ipvsadm-restore normal        /sbin/ipvsadm-save not installed /usr/share/doc/ipvsadm-1.24 not installed /usr/share/doc/ipvsadm-1.24/README not installed /usr/share/man/man8/ipvsadm-restore.8.gz not installed /usr/share/man/man8/ipvsadm-save.8.gz not installed /usr/share/man/man8/ipvsadm.8.gz       从上面可以看到,我们在安装ipvsadm-1.24-6.i386.rpm的时候指定不安装说明文档,然后通过“-s”命令查看文件状态时,软件包的说明文档状态均为“not installed”。

  •  -R (或--requires):显示软件包所需的功能,所谓功能,可以是软件包标识,也可以是共享动态库文件等等,软件包的依赖关系就是依靠功能来实现的,如果所需的功能不存在,则依赖关系一定得不到满足,软件安装就会失败。
  •  --provides:显示软件包提供的功能,这个功能可以是动态库文件,也可以是虚拟软件的包名等等。

例如:查看nxclient-2.1.0-17.i386.rpm提供的功能,使用以下命令: [root@localhost ~]# rpm -qp --provides nxclient-2.1.0-17.i386.rpm                    nxclient = 2.1.0-17 可以看到这个软件提供了nxclient的功能。

3. 验证软件包

     (1) 验证已经安装的软件包       校验软件包比较的是某软件包安装的文件和原始软件包中的同一文件的信息是否一致。它校验每个文件的大小、权限、MD5 值、类型、所有者、以及组群。 命令格式:

rpm -V [辅助选项] package1……packageN

主选项说明:

  • -V:verify的意思,也可以用“--verify”代替。此参数主要校验已经安装的软件包内的文件和最初安装时是否一致。
  • 参数说明:package1……packageN 表示需要校验的且已经安装的软件包名。

辅助选项说明:

  •  -p:验证软件包文件

例如:下面是验证rsh包的安装状态,操作过程如下:

[root@localhost ~]# rpm -V rsh-0.17-25.3 
package rsh-0.17-25.3 is not installed
[root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm
warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
missing     /usr/bin/rcp
missing     /usr/bin/rexec
missing     /usr/bin/rlogin
missing     /usr/bin/rsh
missing   d /usr/share/man/man1/rcp.1.gz
missing   d /usr/share/man/man1/rexec.1.gz
missing   d /usr/share/man/man1/rlogin.1.gz
missing   d /usr/share/man/man1/rsh.1.gz
[root@localhost ~]# rpm -ivh rsh-0.17-25.3.i386.rpm    
warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e
Preparing...   ########################### [100%]
   1:rsh     ######################## [100%]
[root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm  
warning: rsh-0.17-25.3.i386.rpm:V3 DSA signature: NOKEY, key ID db2a6e
[root@localhost ~]# rpm -V rsh-0.17-25.3

#上面操作中,我们首先验证rsh,可以知道rsh没有在系统中安装,接着我们安装了rsh软件包,再次查看rsh包状态时,没有任何输出了,表示软件包文件全部正常。

  •  -f:校验文件在所属的软件包的状态,此选项后面跟相应的文件名。

例如:检查mysqlclient包中各个文件的状态,我们的操作如下:

[root@localhost ~]# rpm -ql mysqlclient10-3.23.58-4.RHEL4.1 
/etc/ld.so.conf.d/mysqlclient10-i386.conf
/usr/lib/mysql/libmysqlclient.so.10
/usr/lib/mysql/libmysqlclient.so.10.0.0
/usr/lib/mysql/libmysqlclient_r.so.10
/usr/lib/mysql/libmysqlclient_r.so.10.0.0
[root@localhost ~]# mv \
>/usr/lib/mysql/libmysqlclient.so.10  /usr/lib/mysql/libmysqlclient.so.10.d
[root@localhost ~]# rpm –V mysqlclient10-3.23.58-4.RHEL4.1
missing     /usr/lib/mysql/libmysqlclient_r.so.10
[root@localhost ~]# rpm -Vf  /usr/lib/mysql/libmysqlclient_r.so.10
missing     /usr/lib/mysql/libmysqlclient_r.so.10 

#这里我们首先检查了mysqlclient包中包含的所有文件,然后模拟删除mysqlclient包中一个文件,然后查看这个文件的状态,可以看到显示为“missing”,如果我们通过“-Vf”选项检查某个文件,没有任何输出时,表示这个文件状态正常。

  •  -a:检验所有的软件包。
  •  -g:检验所有属于组的软件包。

        (2)验证未安装的软件包文件         发行的RPM格式的软件包是否值得信任,是否损坏,我们可以通过RPM提供的选项进行验证。RPM软件包一般使用 Gnu 隐私卫士(或称 GPG)来签名,从而帮助使用者肯定下载软件包的可信任性。 命令格式:

rpm -K file1.rpm……fileN.rpm

主选项说明:

  • -K: checksig的意思,也可以用“--checksig”代替。这个选项用来检查 RPM 软件包文件的md5校验和GPG签名。
  • 参数说明:file1.rpm……fileN.rpm表示需要校验软件包名。

例子:如果想要校验某个软件包是否被篡改或者是否损坏,可以使用如下命令检查:

[root@localhost ~]# rpm -K nxserver-2.1.0-22.i386.rpm 
nxserver-2.1.0-22.i386.rpm: md5 OK

这里的“md5 OK”表示文件在下载中没有被损坏或者没有被篡改。即这个文件是安全的。 [root@localhost ~]# rpm -K ipvsadm-1.24-6.i386.rpm  ipvsadm-1.24-6.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#443e1821)  上面的输出表示这个软件没有被授权签名,在安装未被linux发行商授权的软件包时,请务必谨慎,因为这些软件包内可能包含有害的代码。

4. 更新软件包

命令格式:

rpm -U [辅助选项] file1.rpm……fileN.rpm

主选项说明:

  • -U:upgrade的意思,可以使用“--upgrade”代替。
  • 参数说明:file1.rpm……fileN.rpm表示需要升级的rpm文件包。

辅助选项说明:

  • --oldpackage 表示允许"升级"到一个老版本,即软件版本降级

其它选项与安装RPM软件包辅助参数完全相同,这里不再讲述。 例子:我们将rsh从rsh-0.17-25.3升级到rsh-0.17-37.el5,步骤如下:

[root@localhost ~]# rpm  -q rsh
rsh-0.17-25.3
[root@localhost ~]# rpm  -Uvh rsh-0.17-37.el5.i386.rpm    
warning: rsh-0.17-37.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
Preparing... ######################### [100%]
   1:rsh    ########################### [100%]
[root@localhost ~]# rpm  -q rsh
rsh-0.17-37.el5

5. 删除软件包

命令格式:

rpm -e [辅助选项] package1……packageN

主选项说明:

  • -e:erase的意思,也可以用“--erase”代替。
  • 参数说明:package1……packageN表示已经安装的软件包名称。

erase 英[ɪˈreɪz] 美[ɪˈreɪs] vt. 抹去; 清除; 擦掉;

辅助选项说明:

  •  --test:只执行删除的测试。
  •  --nodeps:不检查依赖性。

举例: (1) 删除rsh软件包,使用以下命令:

[root@localhost ~]# rpm  -q rsh    
rsh-0.17-37.el5
[root@localhost ~]# rpm  -e rsh-0.17-37.el5
[root@localhost ~]# rpm  -q rsh
package rsh is not installed

(2)删除gcc软件包,但是存在依赖关系,操作过程如下:

[root@server ~]# rpm -e gcc                    
error: Failed dependencies:
gcc = 3.4.4-2 is needed by (installed) gcc-c++-3.4.4-2.i386
gcc = 3.4.4-2 is needed by (installed) gcc-g77-3.4.4-2.i386
gcc = 3.4.4-2 is needed by (installed) gcc-java-3.4.4-2.i386
gcc = 3.4.3 is needed by (installed) libtool-1.5.6-4.EL4.1.i386
gcc is needed by (installed) systemtap-0.4-0.EL4.i386

这里又出现了删除依赖性了,根据上面的提示可知,要删除gcc软件包,必须删除与gcc相互依赖的五个软件包,这个操作要非常慎重,除非知道删除后对系统没有影响,否则一定不要盲目执行删除操作,因为这样可能导致系统的崩溃。 其实我们也可以加入“--nodeps”参数,忽略依赖关系,但是这样可能会导致相关依赖软件的不可用。

三、二进制软件安装方式

      Linux下二进制格式的软件是指事先已经在各种平台编译安装好相关软件,然后压缩打包,在安装时只需解压或者执行安装可执行文件即可。这种软件发行格式类似与windows系统,这样做的原因是保护源代码程序不对外泄露,保护知识产权。

                二进制软件包的优点是安装简单、容易,

缺点是缺乏灵活性,相应的软件包执行在对应平台下安装,离开这个环境软件就无法运行。

二进制软件包提供了很多类型的打包方式,最常见的就是我们上节讲到的RPM格式的包,还有以“*.tar.gz、*.tgz、*.bz2“等形式的二进制软件包,

最后还有一个就是提供安装程序进行安装的二进制软件包。下面分别介绍:

3.1 安装“*.tar.gz、*.bz2”二进制软件包

      这种格式的软件包,安装其实就是简单的解压过程,根据不同的软件打包格式,我们用相应的解压命令解压即可。       对于*.tar.gz软件格式解压:

tar –zxvf xxxxxx.tar.gz

      对于*.bz2软件格式解压: 

tar  -jxvf xxxxxx.tar.gz

      这类软件的卸载,对于解压后只有单一目录的软件,可以直接删除对应软件目录即可,如果解压后文件分散在几个目录中,需要一一手动删除目录。 例如:我们常用的应用服务器容器tomcat软件就是基于这种打包压缩格式发行的。我们只需下载后解压即可完成安装,如果需要卸载,直接删除对应的tomcat目录即可。

3.2 提供安装程序的软件包

      这种软件包都提供了安装脚本或者安装向导程序,只需在下载此类软件包后解压,然后进入安装目录,找到类似的setup、install、install.sh之类的可执行文件运行即可,然后根据提示(比如安装路径,参数设置等等)进行相应的设置,接着安装就自动完成。       这类软件的卸载也提供了相应的卸载脚本或者卸载向导,根据提示即可完成软件卸载。       例如:经常使用的sun jdk就是这种安装方式,从网络下载下来的jdk是个二进制可执行文件,首先设置文件的可执行权限(例如chmod 755  jdk1.6.0_07.bin,权限操作本书后面会有详细讲述) ,然后运行软件(也即是./ jdk1.6.0_07.bin)即可完成安装。安装完成会在当前目录产生一个对应的jdk程序目录。 Linux下一些大型的软件安装,比如weblogic、oracle等软件都提供了安装向导程序,用户可以根据安装提示,顺利完成此类软件的安装。

四、yum安装方式

        yum是yellowdog updater modified 的缩写,yellow dog(黄狗)也是一个 Linux 的 发行版本,只不过Redhat公司是将这种升级技术利用到自己的发行版上就形成了现在的 yum。 yum是进行linux自动升级常用的一个工具,通过yum工具配合互联网即可实现自动升级系统。例如一台经过授权的Redhat Linux操作系统,或者一台Centos Linux系统,只要你的系统能连接互联网,输入yum install sftp 即可将sftp软件安装到系统中,输入yum update 即可实现系统的自动升级。通过yum进行系统升级实质是yum命令去下载指定的远程互联网 主机上的RPM软件包,然后自动进行安装,同时解决各个软件之间的依赖关系。

1.yum的安装与配置

(1)yum的安装

检查yum是否已经安装:

[root@localhost ~]# rpm -qa|grep yum

如果没有任何显示,表示系统中还没有安装yum工具,yum安装包在centos系统光盘中可以找到,执行如下指令进行安装:

[root@localhost ~]# rpm -ivh yum-*.noarch.rpm

安装yum需要python-elementtree、python-sqlite、urlgrabber、yumconf等软件包的支持,这些软件包在Centos Linux系统安装光盘均可找到,如果在安装yum过程中出现软件包之间的依赖性,只需按照依赖提示寻找相应软件包安装即可,直到yum包安装成功。

(2)yum的配置

yum工具安装完毕,接下来的工作是进行yum的配置,yum的配置文件有主配置文件/etc/yum.conf、资源库配置目录/etc/yum.repos.d,yum安装后,默认的一些资源库配置可能无法使用,因此需要进行修改,下面是/etc/yum.repos.d/CentOS-Base.repo资源库配置文件各项的详细含义:

[root@localhost ~]#vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-4 - Base 
#name 就是发行版的名称,其格式表示“操作系统名和释出版本”,“base”是表明此段寻找的是base包信息。

baseurl=http://mirror.centos.org/centos/4/os/$basearch/  
#baseurl”表示yum在互联网上查找升级文件的URL地址。其中“$basearch”代表了系统的硬件构架如“i386”、“x86-64等,同时,yum在资源更新时,会检查baseurl/repodata/repomd.xml文件。 “repomd.xml”是一个索引文件,它的作用是提供了更新rpm包文件的下载信息和SHA校验值。 “repomd.xml”包括了3个文件,分别为“other.xml.gz”、”filelists.xml.gz”和”primary.xml.gz”,表示的含义依次是“其它更新包列表”、“更新文件集中列表”和“主要更新包列表”。

gpgcheck=1  
#gpgcheck表示是否启用gpg检查,1表示启用,0表示不启用校验,如果启用,就是需要在配置文件里注明GPG-RPM-KEY的位置,可以看到下面gpgkey字段,指定了GPG-RPM-KEY验证文件的位置。

#released updates
[update]
#本段是updates更新模块要用到的部分配置。
name=CentOS-4 - Updates
baseurl=http://mirror.centos.org/centos/4/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
#gpgkey指定GPG密钥的地址
 
#packages used/produced in the build but not released
#本段指定的是尚未发布的软件包部分(addons)配置
[addons]
name=CentOS-4 - Addons
baseurl=http://mirror.centos.org/centos/4/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4

#additional packages that may be useful
#本段指定的是有用的额外软件包部分(extras)配置
[extras]
name=CentOS-4 - Extras
baseurl=http://mirror.centos.org/centos/4/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4

#additional packages that extend functionality of existing packages
#本段指定的是扩展的额外软件包部分(centosplus)配置
[centosplus]
name=CentOS-4 - Plus
baseurl=http://mirror.centos.org/centos/4/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4

#contrib - packages by Centos Users
#这里是contrib部分
[contrib]
name=CentOS-4 - Contrib
baseurl=http://mirror.centos.org/centos/4/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4

2.yum的特点与基本用法

        1.特点:

                1) 安装方便,自动解决增加或删除rpm包时遇到的依赖性问题。                  2)可以同时配置多个资源库(Repository)                 3) 配置文件简单明了(/etc/yum.conf、/etc/yum.repos.d/CentOS-Base.repo)                 4)保持与RPM数据库的一致性 注意:yum会自动下载所有所需的升级资源包并默认放置在/var/cache/yum目录下, 当第一次使用yum或yum资源库更新时,软件升级所需的时间可能较长。

        2.基本用法

(1)通过yum安装和删除RPM包 安装rpm包,如dhcp [root@localhost ~]#yum install dhcp 删除rpm包,包括与该包有依赖性的包 [root@localhost ~]#yum remove licq 注意:同时会提示删除licq-gnome,licq-qt,licq-text (2)通过yum工具更新软件包 检查可更新的rpm包: [root@localhost ~]#yum check-update 更新所有的rpm包: [root@localhost ~]#yum update 更新指定的rpm包,如更新kernel和kernel source: [root@localhost ~]#yum update kernel kernel-source 大规模的版本升级,与yum update不同的是,陈旧的淘汰的包也会升级: [root@localhost ~]#yum upgrade (3)通过yum查询RPM包信息 列出资源库中所有可以安装或更新的rpm包的信息: [root@localhost ~]#yum info  列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息: [root@localhost ~]#yum info vsftpd [root@localhost ~]#yum info perl* 注意:可以在rpm包名中使用匹配符, 如上面例子是列出所有以perl开头的rpm包的信息。 列出资源库中所有可以更新的rpm包的信息: [root@localhost ~]#yum info updates 列出已经安装的所有的rpm包的信息: [root@localhost ~]#yum info installed 列出已经安装的但是不包含在资源库中的rpm包的信息: [root@localhost ~]#yum info extras 注:也就是通过其它网站下载安装的rpm包的信息。 列出资源库中所有可以更新的rpm包: [root@localhost ~]#yum list updates

列出已经安装的所有rpm包: [root@localhost ~]#yum list installed 列出已经安装的但不包含在资源库中的rpm包: [root@localhost ~]#yum list extras 注:也就是通过其它网站下载安装的rpm包。 列出资源库中所有可以安装或更新的rpm包: [root@localhost ~]#yum list 列出资源库中特定的可以安装或更新以及已经安装的rpm包: [root@localhost ~]#yum list sendmail [root@localhost ~]#yum list gcc* 注意:可以在rpm包名中使用匹配符, 如上面例子是列出所有以gcc开头的rpm包。 搜索匹配特定字符的rpm包的详细信息: [root@localhost ~]#yum search wget 注意:可以通过“search”在rpm包名,包描述中进行搜索。 搜索包含特定文件名的rpm包: [root@localhost ~]#yum provides realplay (4)通过yum操作暂存信息(/var/cache/yum) 清除暂存的rpm包文件: [root@localhost ~]#yum clean packages 清除暂存的rpm头文件: [root@localhost ~]#yum clean  headers

 清除暂存中旧的rpm头文件和包文件: [root@localhost ~]#yum clean  all

3.几个不错的yum源

  • EPEL
  • RPMForge

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

修改服务的运行权限,解决SVN Post Commit问题

之前在Windows Server中安装了VirtualSVN Server,然后设置了Post Commit Hooks,在提交代码到版本库之后,将代码che...

1243
来自专栏散尽浮华

Tomcat利用MSM实现Session共享方案解说

Session共享有多种解决方法,常用的有四种: 1)客户端Cookie保存 2)服务器间Session同步 3)使用集群管理Session(如MSM) 4)...

27110
来自专栏惨绿少年

练习题四

第1章 练习题 1.1 每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包) 1.1.1 ...

2350
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3744
来自专栏性能与架构

高级的 Redis Java客户端 - Lettuce

1.8K4
来自专栏学一学大数据

一文上手zabbix安装配置【运维篇】

1893
来自专栏Python

MySQL下载安装、基本配置、问题处理

一 mysql介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管...

56810
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3695
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Apache和mod_wsgi为Django应用程序提供服务

Django是一个功能强大的Web框架,可以帮助您快速启动Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何...

1320
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Redis

Redis是一个内存中的键值存储器,以其灵活性,性能和广泛的语言支持而闻名。它通常用作数据库,缓存和消息代理,并支持各种数据结构。

4042

扫码关注云+社区

领取腾讯云代金券