目录
简介
在 Linux 系统的使用中,软件的安装与管理是一项基础且重要的技能。本文将深入探讨 Linux 应用程序的安装机制,详细介绍 RPM 包管理工具的使用方法,并手把手教你如何从源代码编译安装软件,帮助你全面掌握 Linux 软件管理的核心技术。
一、Linux 应用程序基础
1.1 命令与应用程序的区别
在 Linux 中,命令和应用程序的界限并非绝对清晰,但从使用习惯上可以通过以下特征区分:
- 命令的特点:
- 执行文件通常较小,存放在
/bin
和 /sbin
目录 - 内部命令集成在 Bash 中,非独立执行文件
- 随系统安装,用于系统管理
- 遵循 "命令字 选项 参数" 的标准格式
- 仅在字符界面运行
- 应用程序的特点:
- 执行文件存放在
/usr/bin
、/usr/sbin
等目录 - 需额外安装,提供独立功能
- 执行格式由开发者定义,形式多样
- 可能包含图形界面
- 部分程序可按命令格式运行
1.2 应用程序的组成结构
一个典型的 Linux 应用程序通常由以下部分组成:
- 可执行程序:
- 普通用户程序:存于
/usr/bin
- 管理员程序:存于
/usr/sbin
- 配置文件:存于
/etc
目录,复杂时使用子目录 - 日志文件:存于
/var/log
目录 - 参考文档:存于
/usr/share/doc
目录 - 手册页:存于
/usr/share/man
目录
以 Postfix 邮件服务器为例,安装后文件分布如下:
# 安装 Postfix 软件包
[root@node01 ~]# dnf install postfix -y
# 查看 Postfix 安装的文件列表
[root@node01 ~]# rpm -ql postfix
/etc/postfix/main.cf # 主配置文件
/usr/bin/mailq.postfix # 普通用户可执行的邮件队列查看命令
/usr/sbin/postfix # 管理员专用的 Postfix 主程序
/usr/share/man/man5/postconf.5.gz # 配置文件的手册页
1.3 软件包的常见封装类型
1.3.1 RPM 软件包
- 扩展名:
.rpm
- 适用系统:RHEL、Fedora、CentOS、OpenEuler 等
- 特点:针对特定系统版本定制,依赖性较强
- 管理工具:
rpm
命令
1.3.2 DEB 软件包
- 扩展名:
.deb
- 适用系统:Debian、Ubuntu 等
- 管理工具:
dpkg
命令
1.3.3 源代码软件包
- 常见格式:
.tar.gz
、.tar.bz2
- 特点:提供原始代码,需编译安装
- 编译工具:GCC 等开发工具
1.3.4 附带安装程序的软件包
- 扩展名不固定,多为 TarBall 格式
- 包含安装脚本(如
install.sh
、setup
) - 安装方式:运行安装脚本按向导操作
二、RPM 软件包管理工具
2.1 RPM 概述
RPM(RPM Package Manager)由 Red Hat 公司开发,现已成为众多 Linux 发行版的标准软件包管理机制。其核心特性包括:
- 建立统一文件数据库,记录软件安装、卸载、升级信息
- 自动分析软件依赖关系
- 标准化的包命名格式:
软件名-版本-发布次数.系统类型.硬件架构.rpm
- 示例:
bash-5.2.15-14.oe2403sp1.x86_64.rpm
- 硬件架构说明:
x86_64
表示 64 位系统,noarch
表示不区分架构
2.2 RPM 命令核心操作
2.2.1 查询软件包信息
查询已安装的软件包
# 列出系统中所有已安装的 RPM 软件包
[root@localhost ~]# rpm -qa
# 查看指定软件包的详细信息
[root@node01 ~]# rpm -qi samba-common
# 显示软件包安装的所有文件
[root@localhost ~]# rpm -ql wget
# 查找文件所属的软件包
[root@localhost ~]# rpm -qf /usr/bin/vim
查询未安装的 RPM 包文件
# 查看包文件的详细信息
[root@node01 ~]# rpm -qpi /media/cdrom/Packages/ethtool-6.6-3.oe2403sp1.x86_64.rpm
# 查看包文件将安装的文件列表
[root@node01 ~]# rpm -qpl /media/cdrom/Packages/ethtool-6.6-3.oe2403sp1.x86_64.rpm
2.2.2 安装、升级与卸载软件包
安装软件包
# 安装单个 RPM 包(显示安装进度和详细信息)
[root@node01 ~]# rpm -ivh /media/cdrom/Packages/ethtool-6.6-3.oe2403sp1.x86_64.rpm
-i: 安装操作
-v: 显示详细信息
-h: 以 "#" 号显示进度
# 批量安装多个包(使用通配符)
[root@node01 ~]# rpm -ivh /media/cdrom/Packages/*.rpm
升级软件包
# 升级软件包(若未安装则执行安装)
[root@node01 ~]# rpm -Uvh new_package.rpm
-U: 升级操作,未安装时等效于 -i
# 仅升级已安装的包
[root@node01 ~]# rpm -Fvh new_package.rpm
-F: 仅升级已安装的包,未安装则跳过
卸载软件包
# 卸载指定软件包
[root@node01 ~]# rpm -e ethtool
-e: 卸载操作
# 强制卸载并忽略依赖关系(风险操作)
[root@node01 ~]# rpm -e --nodeps ethtool
--nodeps: 忽略依赖关系,可能导致系统问题,仅用于测试
2.2.3 RPM 数据库维护
重建 RPM 数据库
# 当数据库损坏时重建
[root@localhost ~]# rpm --rebuilddb
导入数字签名公钥
# 导入 OpenEuler 官方公钥以验证包完整性
[root@localhost ~]# rpm --import /media/cdrom/RPM-GPG-KEY-openEuler
三、从源代码编译安装软件
3.1 源代码编译的应用场景
- 获取最新功能:开源软件通常先发布源码,后有二进制包
- 定制功能需求:修改源码以满足特定业务需求
- 添加自定义功能:基于现有代码扩展新特性
3.2 编译环境准备
编译源码需要安装开发工具:
# 安装 GCC 编译器(C/C++ 编译工具)
[root@node01 ~]# dnf install gcc -y
# 安装 make 工具(项目构建工具)
[root@node01 ~]# dnf install make -y
# 查看 GCC 版本
[root@node01 ~]# gcc --version
# 查看 make 版本
[root@node01 ~]# make --version
3.3 编译安装的基本流程
以 Apache 服务器为例,完整编译安装步骤如下:
3.3.1 解包源代码
# 检查源代码包
[root@node01 ~]# ll httpd-2.4.25.tar.gz
# 计算 MD5 校验和(确保包完整性)
[root@localhost ~]# md5sum httpd-2.4.25.tar.gz
# 解包到 /usr/src 目录
[root@localhost ~]# tar zxf httpd-2.4.25.tar.gz -C /usr/src/
-z: 用 gzip 解压
-x: 解压文件
-f: 指定文件名
-C: 解压到指定目录
3.3.2 配置编译参数
# 进入源码目录
[root@localhost ~]# cd /usr/src/httpd-2.4.25
# 查看配置选项帮助
[root@localhost httpd-2.4.25]# ./configure --help
# 配置安装参数(指定安装目录)
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/apache
--prefix: 指定软件安装的目标目录,便于统一管理和卸载
3.3.3 编译源代码
# 执行编译(根据 Makefile 配置编译源码)
[root@localhost httpd-2.4.25]# make
3.3.4 安装到系统
# 安装编译好的程序到指定目录
[root@localhost httpd-2.4.25]# make install
3.3.5 配置与启动
# 修改 Apache 配置文件
[root@localhost httpd-2.4.25]# vim /usr/local/apache/conf/httpd.conf
# 取消注释 ServerName 行,设置服务器名称
# 启动 Apache 服务
[root@localhost httpd-2.4.25]# /usr/local/apache/bin/apachectl start
# 验证服务运行
[root@node01 ~]# curl 127.0.0.1
3.4 依赖关系处理
编译过程中若缺少依赖包,会出现类似以下错误:
configure: error: pcre library not found
解决方法:
# 安装所需的依赖包
[root@localhost ~]# dnf install pcre-devel -y
四、总结
本文介绍的 Linux 软件管理的两大核心方式:
- RPM 包管理:适合快速安装、升级和卸载软件,适合大多数日常场景
- 优势:安装便捷,依赖自动管理
- 场景:系统日常维护、安装官方软件包
- 源码编译安装:适合需要定制功能或使用最新版本软件的场景
- 优势:灵活性高,可定制功能
- 场景:服务器软件部署、个性化功能需求
实践建议:
- 新手入门:先从 RPM 包管理开始,熟悉
rpm
和 dnf
命令 - 生产环境:优先使用发行版提供的 RPM 包,确保稳定性
- 源码编译:仅在必要时使用,提前备份系统,记录编译参数
- 依赖管理:安装前检查依赖,避免使用
--nodeps
忽略依赖 - 安全意识:下载源码包后验证 MD5 校验和,确保文件完整性
掌握这些技能后,你将能够更加灵活地管理 Linux 系统中的软件,根据不同需求选择最合适的安装方式,确保系统稳定高效运行。