前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下软件的安装与管理(四) 原

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

作者头像
wuweixiang
发布2018-08-14 14:24:29
3.5K0
发布2018-08-14 14:24:29
举报
文章被收录于专栏:吴伟祥吴伟祥

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程序的描述:

代码语言:javascript
复制
  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源码
代码语言:javascript
复制
[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. 测试安装环境(设置安装环境)
代码语言:javascript
复制
[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.编译安装软件
代码语言:javascript
复制
[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,使用下面命令:

代码语言:javascript
复制
[root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm 

执行结果如下:

代码语言:javascript
复制
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包过程,在安装过程中,出现了安装包依赖问题,我们的处理过程是这样的:

代码语言:javascript
复制
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm 

执行结果如下:

代码语言:javascript
复制
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,因此,我们需要先安装这个软件包。

代码语言:javascript
复制
[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm 

执行结果如下:

代码语言:javascript
复制
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包。

代码语言:javascript
复制
[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm 

执行结果如下:

代码语言:javascript
复制
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包。

代码语言:javascript
复制
[root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm 

执行结果如下: 

代码语言:javascript
复制
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由于不检查依赖关系,即可安装成功:

代码语言:javascript
复制
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm –nodeps

执行结果如下:

代码语言:javascript
复制
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 

②执行以下命令切换目录

代码语言:javascript
复制
cd /usr/src/redhat/SPECS

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

代码语言:javascript
复制
 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. 查询软件包

命令格式:

代码语言:javascript
复制
rpm -q [辅助选项] package1……packageN

主选项说明:

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

辅助选项说明:

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

例如:

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

例如:

代码语言:javascript
复制
[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包。

例如:

代码语言:javascript
复制
[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 值、类型、所有者、以及组群。 命令格式:

代码语言:javascript
复制
rpm -V [辅助选项] package1……packageN

主选项说明:

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

辅助选项说明:

  •  -p:验证软件包文件

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

代码语言:javascript
复制
[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包中各个文件的状态,我们的操作如下:

代码语言:javascript
复制
[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)来签名,从而帮助使用者肯定下载软件包的可信任性。 命令格式:

代码语言:javascript
复制
rpm -K file1.rpm……fileN.rpm

主选项说明:

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

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

代码语言:javascript
复制
[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. 更新软件包

命令格式:

代码语言:javascript
复制
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,步骤如下:

代码语言:javascript
复制
[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. 删除软件包

命令格式:

代码语言:javascript
复制
rpm -e [辅助选项] package1……packageN

主选项说明:

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

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

辅助选项说明:

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

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

代码语言:javascript
复制
[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软件包,但是存在依赖关系,操作过程如下:

代码语言:javascript
复制
[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软件格式解压:

代码语言:javascript
复制
tar –zxvf xxxxxx.tar.gz

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

代码语言:javascript
复制
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是否已经安装:

代码语言:javascript
复制
[root@localhost ~]# rpm -qa|grep yum

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

代码语言:javascript
复制
[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资源库配置文件各项的详细含义:

代码语言:javascript
复制
[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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/09/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、源码安装方式
    • 1.1 下载解压源码
      • 1.2 分析安装平台环境
        • 1.3 编译安装软件
          •  1> Makefile文件
          •  2> make与 make install
        • 1.4 源码安装Apache Http server
          • 1. 下载解压apache源码
          • 2. 测试安装环境(设置安装环境)
          • 3.编译安装软件
      • 二、RPM包方式安装
        • 2.1 RPM包管理工具介绍
          • 2.2 RPM包种类和命令
            • 2.3 RPM工具的使用
              • 1. 安装软件包
              • 2. 查询软件包
              • 3. 验证软件包
              • 4. 更新软件包
              • 5. 删除软件包
              • 3.1 安装“*.tar.gz、*.bz2”二进制软件包
              • 3.2 提供安装程序的软件包
          • 三、二进制软件安装方式
          • 四、yum安装方式
            • 1.yum的安装与配置
              • (1)yum的安装
              • (2)yum的配置
            • 2.yum的特点与基本用法
              •         1.特点:
              •         2.基本用法
            • 3.几个不错的yum源
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档