一、Linux应用程序基础

1、Linux命令与应用程序的关系

    在Linux系统中,一直以来命令和应用程序并没有特别明确的区别,从长期使用习惯来看,可以通过下表的描述来对两者进行区别。

如何安装及管理Linux中的应用程序_Linux应用程序

2、Linux应用程序的组成

    安装完一个软件包后,可能会向系统中复制大量的数据文件,并进行相关设置。在Linux系统中,典型应用程序的目录结构如下表:

如何安装及管理Linux中的应用程序_Linux应用程序_02

3、软件包的封装类型

    对于各种应用程序的软件包,在封装时可以采用各种不同的类型,因此在Linux系统中的安装方法也各部相同。常见的软件包封装类型及说明如下表:

如何安装及管理Linux中的应用程序_Linux应用程序_03

二、使用RPM包管理工具

    RPM包是Linux的各发行版中应用最广泛的软件包格式之一。RPM包以其强大的功能和广泛的兼容性而得到多数Linux发行版本的支持和广大Linux使用者的拥护。

1、RPM概述

    RPM软件包管理机制最早由Red Hat公司提出,后来随着版本的升级逐渐融入了更多的优秀特性,成为众多Linux发行版中公认的软件包管理标准。在其官方站点http://www.rpm.org中,可以了解到关于RPM包管理机制的详细资料。

    PPM包管理器通过建立统一的文件数据库,对在Linux系统中安装、卸载、升级的各种rpm软件包进行详细的记录,并能够自动分析软件包之间的依赖关系,保持各种应用程序在一个协调、有序的整体环境中运行。

    使用rpm机制封装的软件包文件拥有约定俗成的命名格式,一般使用“软件名-软件版本-发布次数.硬件平台类型.rpm”的文件名形式,如“bash-3.1-16.1.i386.rpm”。其中硬件平台通常为“i386”、“i586”、“i686”或“noarch”(不区分硬件架构)等。

2、主要功能

a、查询rpm软件、包文件的相关信息

b、安装、升级、卸载rpm软件包

c、维护rpm数据库信息

3、查询RPM软件包信息

    使用rpm命令的查询功能可以检查某个软件包是否已经安装、了解软件包的用途、软件包复制到系统中的文件等各种相关信息,以便更好地管理Linux系统中的应用程序。

    rpm命令的查询功能主要通过“-q”选项实现,主要针对当前系统中已经安装的软件包;通过“-qp”选项可以针对尚未安装的rpm包文件进行查询。根据所需查询的具体项目不同,还可以为这两个选项指定相关的子选项。

【查询已安装的rpm软件包信息】:

-qa:显示当前系统中以rpm方式安装的所有软件列表。

-qi:查看指定软件包的名称、版本、许可协议、用途描述等详细信息。

-ql:显示指定的软件包在当前系统中安装的所有目录、文件列表。

-qf:查看指定的文件或目录是由哪个软件包所安装的。

-qc:显示指定软件包在当前系统中安装的配置文件列表。

-qd:显示指定软件包在当前系统中安装的文档文件列表。

【查询RPM包文件中的相关信息】

-qpi:查看指定软件包的名称、版本、许可协议、用途描述等详细信息。

-qpl:查看该软件包准备要安装的所有目标目录、文件列表。

-qpc:查看该软件包准备要安装的配置文件列表。

-qpd:查看该软件包准备要安装的文档文件列表。

4、安装、升级、卸载RPM软件

    在日常系统管理工作中,安装、升级及卸载软件包是管理应用程序最基本的工作内容。使用rpm命令实现这些操作时,基本的命令选项如下所述:

-i:在当前系统中安装一个新的RPM软件包。

-e:卸载指定名称的软件包。

-U:检查并升级系统中的某个软件包,若该软件包原来并未安装,则等同于“-i”选项。

-F:检查并更新系统中的某个软件包,若该软件包原来并未安装,则放弃安装。

还有几个相关的命令选项,可以用于辅助安装、卸载软件包的过程。

-force:强制安装某个软件包。

-nodeps:在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系。

-h:在安装或升级软件包的过程中,以“#”号显示安装进度。

-v:显示软件安装过程中的详细信息。

     使用rpm命令安装软件包时,需要指定完整的包文件名作为参数(可以有多个);而卸载软件包时,只需要指定软件名即可。需要同时安装多个rpm软件包时,可以采用通配符“*”,这种方式在安装存在相互依赖关系的多个软件包时特别有用,系统会自动检查依赖性并决定安装顺序,而无需管理员去判断应该先装哪一个包。

5、维护RPM数据库

    RPM数据库用于记录在Linux系统中安装、卸载、升级应用程序的相关信息,由RPM包管理系统自动完成维护,一般不需要用户干预。当RPM数据库发生损坏,Linux系统无法自动完成修复时,可能将导致无法正常安装、卸载RPM软件包,这时可以使用rpm命令的“--rebuilddb”或“--initdb”功能重建RPM数据库。

rpm  --rebuilddb

三、从源代码编译安装程序

    在Linux平台中搭建各种应用系统时经常会需要对软件包进行编译安装,其实最早的Linux操作系统整体上都是编译安装而成的。

1、源代码编译概述

    Linux操作系统之所以能够在十余年的时间里发展壮大以致风靡全球,其开放源代码的特性是很重要的原因之一,即Linux操作系统中包括内核在内的所有软件都可以获得源代码,并且可以经过定制修改后编译安装。

   现在的Linux发行版本通常使用包管理机制对软件进行打包安装,这样省去了软件的编译安装过程,大大简化了Linux系统的安装和使用难度。但是在有些情况下,仍然需要使用源代码编译的方式为系统安装新的应用程序,例如以下几种情况。

a、安装较新版本的应用程序时。

b、当前安装的程序无法满足应用需求时。

c、为应用程序添加新的功能时。

    编译源代码需要有相应的开发环境,对于自由软件来说,gcc编译器是最佳选择。gcc是有GNU项目所贡献的功能强大的C/C++语言编译器,在全世界的自由软件开发者中广受欢迎。gcc相关编译工具的依赖性较多,因此建议在安装Linux操作系统时一并安装。在RHEL5系统中,默认使用的gcc工具版本为4.1.1,主要由gcc-4.1.1-52.e15和gcc-c++-4.1.1-52.e15软件包提供。

2、从源代码编译安装程序的基本过程

   获得所需安装的软件源代码以后,安装的基本过程包括解包、配置、编译及安装这几个通用步骤,大多数开源软件的安装都遵循这些过程。当然,这4个步骤并不是一成不变的,具体安装时应参考软件包中提供的相关文档(如install、readme等)。

     对于从互联网下载的软件包,建议使用md5sum命令工具检查MD5校验和。例如,执行“md5sum axel-l.0.tar.gz”操作后可计算出axel-1.0a.tar.gz软件包文件的MD5校验和为“2d94c0b36b374834567f1fcec5f89119”,将其与软件官方提供的校验值进行比较,如果相同则说明该软件包在网络传输过程中没有被非法改动。对于校验和不一致的软件包,应尽量不要使用,以免带来病毒、木马等不安全因素。

源码编译安装的基本过程如下表:

如何安装及管理Linux中的应用程序_rpm包管理工具_04

     配置过程一般需要一定的时间,期间会在屏幕中显示大量的输出信息,这些信息可以帮助管理员了解程序配置的过程。配置结果将保存到源代码目录中的Makefile文件中。如果配置过程出现错误,通常是缺少相关的依赖软件包所致,一般只要根据提示安装对应的软件即可。

典型的配置选项 : --prefix=软件安装目录

     编译的过程主要是根据Makefile文件中的配置信息,将源代码文件编译、链接成二进制的模块文件、执行程序等。配置完成后,在源码目录中执行“make”命令可以完成编译工作,一般需要比配置步骤更长的时间,期间同样会显示大量的编译过程信息。

     在上述过程中,有时候为了简单起见,也可以将编译、安装的步骤写成一行命令执行,中间使用“&&”符号分隔即可。