欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux 应用程序基础、RPM 概述、编译安装流程

程序员文章站 2022-03-16 08:27:07
...

一、Linux应用程序基础

1、Linux 命令与应用程序的区别

  • 命令文件一般在安装操作系统时一起安装,用于辅助操作系统本身的管理。
  • 命令行大多适用于“命令字 选项 参数”形式的一般格式。
  • 命令只在字符操作界面中运行。
  • 对于内部命令,常集成在 Bash 程序内,而不是独立地执行文件。
  • 应用程序命令的执行文件大多比较小,通常放置在/bin 和/sbin 目录中。
  • 应用程序的执行文件通常放在/usr/bin、/usr/sbin 和/usr/local/bin、/usr/local/sbin 等目录中。
  • 应用程序一般需要在操作系统之外另行安装,提供相对独立于操作系统的功能,有时候等同于“软件”的概念。
  • 应用程序一般没有固定的执行格式,运行方式由程序开发者自行定义。
  • 应用程序一般没有固定的执行格式,运行方式由程序开发者自行定义。
  • 应用程序可能会用到图形界面,形式多样应用程序可能会用到图形界面,形式多样;有些应用程序提供的执行文件,能够使用像 Linux 命令一样的运行格式,所以也经常被称为程序命令。

2、Linux 应用程序的组成

  • 普通的可执行程序文件:一般保存在/usr/bin 目录中,普通用户即可执行。
  • 服务器程序、管理程序文件:一般保存在/usr/sbin 目录中,只有管理员能执行。
  • 配置文件:一般保存在/etc 目录中,配置文件较多时会建立相应的子目录。
  • 日志文件:一般保存在/var/log 目录中。
  • 关于应用程序的参考文档等数据:一般保存在/usr/share/doc/目录中。
  • 执行文件及配置文件的 man 手册页:一般保存在/usr/share/man/目录中。

3、软件包的封装类型

  • RPM 软件包:这种软件包文件的扩展名为“.rpm”。
  • DEB 软件包:这种软件包文件的扩展名为“.deb”。
  • 源代码软件包:这种软件包是程序员开发完成的原始代码,一般被制作成“.tar.gz” 或“.tar.bz2”。
  • 附带安装程序的软件包:这种软件包的扩展名不一,但仍以 TarBall 格式的居多。
  • 开放源代码的*软件绝大多数选择以 TarBall 的形式发布,而 RPM 软件包、DEB 软件包等则使用了二进制的文件格式,代码相对比较封闭。

二、RPM概述

1、RPM概述

  • RPM软件包管理机制最早由Red Hat公司提出,后来随着版本的升级逐渐融入了更多的优秀特性,成为众多Linux发行版中公认的软件包管理标准。
  • RPM包管理器通过建立统一的文件数据库,对在Linux系统中安装,卸载,升级的各种.rpm软件包进行了详细的记录,并能够自动分析软件包之间的依赖关系,保持各个应用程序在一个协调没有虚的整体环境中运行。
  • RPM机制封装的软件包文件拥有约定俗成的命名格式,一般使用“软件名 - 软件版本 - 发布次数.操作系统类型.硬件架构类型.rpm”的文件名形式。
    Linux 应用程序基础、RPM 概述、编译安装流程

2、RPM 软件包管理命令——rpm

1)rpm 命令的格式

rpm 命令具有非常强大的功能,结合不同的命令选项及子选项主要可以实现以下三类功能。

  • 查询、验证 RPM 软件包的相关信息。
  • 安装、升级、卸载 RPM 软件包。
  • 维护 RPM 数据库信息等综合管理操作。
2)查询 RPM 软件包信息

2.1) 查询已安装的 RPM 软件包信息
常用语法格式:
rpm 选项 [软件包名]
常用选项:

  • -q :当需要查询某个软件包是否已经安装时,可以直接使用软件包名称作为查询参数。
  • -qa:显示当前系统中以 RPM 方式安装的所有软件列表。
  • -qi:查看指定软件包的名称、版本、许可协议、用途描述等详细信息。
  • -ql:显示指定的软件包在当前系统中安装的所有目录、文件列表。
  • -qf:查看指定的文件或目录是由哪个软件包所安装的。
用法实例
[aaa@qq.com ~]# rpm -q elinks lynx
未安装软件包 elinks
未安装软件包 lynx

[aaa@qq.com ~]# rpm -qa
 geocode-glib-3.14.0-2.el7.x86_64 
 libfontenc-1.1.2-3.el7.x86_64

[aaa@qq.com ~]# rpm -qi samba-client
Name	: samba-client
Epoch	0
Version	: 4.4.4

[aaa@qq.com ~]# rpm -ql wget
/etc/wgetrc
/usr/bin/wget

2.2)查询 RPM 软件包文件中的相关信息
常用语法格式:
rpm 选项 软件包位置
常用选项:

  • -qpi:查看指定软件包的名称、版本、许可协议、用途描述等详细信息。
  • -qpl:查看该软件包准备要安装的所有目标目录、文件列表。

3、安装、升级、卸载 RPM 软件包

常用语法格式:
rpm 选项 软件包位置
常用选项:

  • -i:在当前系统中安装(Install)一个新的 RPM 软件包。
  • -e:卸载指定名称的软件包。
  • -U:检查并升级系统中的某个软件包,若该软件包原来并未安装,则等同于“-i”选项。
  • -F:检查并更新系统中的某个软件包,若该软件包原来并未安装,则放弃安装。
  • -h:在安装或升级软件包的过程中,以“#”号显示安装进度。
    -v:显示软件安装过程中的详细信息。
  • “- -force”:强制安装某个软件包,当需要替换已安装的软件包及文件,或者安装一个比当前使用的软件版本更旧的软件时,可以使用此选项。
  • “- -nodeps”:在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系。

4、维护 RPM 数据库

1)重建 RPM 数据库
RPM 数据库用于记录在 Linux 操作系统中安装、卸载、升级应用程序的相关信息,由RPM 软件包管理系统自动完成维护,一般不需要用户干预。当 RPM 数据库发生损坏(可能由误删文件、非法关机、病毒破坏等导致),且 Linux 操作系统无法自动完成修复时,将导致无法使用 rpm 命令正常地安装、卸载及查询软件包。这时可以使用 rpm 命令的“–rebuilddb”或“–initdb”功能对 RPM 数据库进行重建。

[aaa@qq.com ~]# rpm --rebuilddb
[aaa@qq.com ~]# rpm --initdb
2)导入验证公钥
在 Linux/UNIX 应用领域,相当一部分软件厂商会对发布的软件包进行数字签名,以确保软件的完整性、合法性。对于用户来说,可以利用官方提供的公钥文件,自动对下载的软件包进行验证,若在安装软件时出现验证失败的提示,则表示该软件包可能已经被非法篡改。
CentOS 的 DVD 光盘中默认已经提供了用于数字签名验证的公钥文件,即位于光盘根目录下的 RPM-GPG-KEY-redhat-release 文件。在没有导入公钥文件之前,安装 CentOS 光盘中的一部分 RPM 软件包时,可能会出现“warning: …….x86_64.rpm: Header V3 RSA/SHA256 signature, key ID ……:NOKEY”的警告信息(一般不影响正常使用)。
向 RPM 数据库中导入公钥文件时,需要用到“–import”选项。例如,执行以下操作可以把光盘目录中的 RPM-GPG-KEY-CentOS-7 公钥文件导入 RPM 数据库中。

[aaa@qq.com ~]# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-7

三、编译安装流程

1、通常哪几种情况下需要编译安装

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

  • 安装较新版本的应用程序时
    大多数的 Linux 发行版都提供了相当丰富的应用程序, 而这些程序的版本往往滞后于该软件的最新源代码版本,因为大多数的开源软件总 是以源代码的形式最先发布,之后才会逐渐出现.rpm、.deb 等二进制封装的版本。下载应用程序的最新源代码包并编译安装,可以在程序功能、安全补丁等方面得到 及时更新。
  • 当前安装的程序无法满足应用需求时:
    对于 RPM 格式封装的应用程序,一般只包含该软件所能实现的一小部分功能,而难以由用户自行修改、定制。通过对程序的 源代码进行重新配置并编译安装后,可以定制更灵活、更丰富的功能。许多 Linux 服务器程序都采用源代码编译的方式进行安装,以获得更适于企业实际应用需求的服务。
  • 当前安装的程序无法满足应用需求时:
    对于 RPM 格式封装的应用程序,一般只包含该软件所能实现的一小部分功能,而难以由用户自行修改、定制。通过对程序的 源代码进行重新配置并编译安装后,可以定制更灵活、更丰富的功能。许多 Linux 服务器程序都采用源代码编译的方式进行安装,以获得更适于企业实际应用需求的服务。

2、编译安装流程

Linux 应用程序基础、RPM 概述、编译安装流程

1)安装依赖环境包

一个软件或服务的安装与运行需要各种各样的编译软件或库文件的支持。 若相关的依赖软件未安装,服务将无法安装。

2)解包

开源软件的源代码包一般为 TarBall 形式,扩展名为“.tar.gz”或“.tar.bz2”,都可以使用 tar 命令进行解压释放。

3)配置
  • 编译应用程序之前,需要进入源代码目录,通过目录下的脚本检查安装环境,并且对 软件的安装目录、功能选择等参数进行预先配置。
  • 环境检查与配置工作通常由源代码目录中的 configure 脚本文件来完成,可用的各种配置参数可以通过在源代码目录中执行“./configure --help”命令进行查看。
  • “–prefix”形式的参数却是大多数开源软件通用的, 该配置参数用于指定软件包安装的目标文件夹。如果没有指定任何配置参数,“configure”脚本将采用软件默认的值进行配置。
4)编译

编译的过程主要是根据 Makefile 文件内的配置信息(若上一步的配置操作失败,将无法进行编译),将源代码文件进行编译生成二进制的程序模块、动态链接库、可执行文件等。配置完成后,只要在源代码目录中执行“make”命令即可执行编译操作。

5)安装

编译完成以后,就可以执行如下的“make install”命令将软件的执行程序、配置文件、帮助文档等相关文件复制到 Linux 操作系统中了,即应用程序的最后“安装”过程。