跳转至

Linux软件安装与管理

概述

软件安装与管理是 Linux 系统管理的核心任务。本文从源码编译、RPM、YUM/DNF 到 apt/pkg 等多种安装方式,全面介绍了 Linux 软件包管理的知识体系,并以 CentOS 为例演示了实际的安装操作。

软件为什么需要安装

Windows软件安装流程

当我们双击Windows安装程序时,背后发生了以下步骤:

  1. 安装检查:检查系统版本、硬件配置、磁盘空间是否满足要求
  2. 释放文件:将程序文件解压到目标目录(如 C:\Program Files\)
  3. 复制可执行文件:将主程序和相关组件放到对应位置
  4. DLL动态链接库/安装服务:注册系统运行所需的库文件,可能注册为Windows服务
  5. 注册表:向Windows注册表写入配置信息、文件关联、启动项等
  6. 开始菜单和快捷方式:创建用户访问入口

Linux可执行程序的位置

Linux中没有注册表的概念,可执行程序通常放在以下标准目录中:

目录 存放内容 使用用户
/bin 基本用户命令(单用户模式下也可用) 所有用户
/sbin 系统管理命令 root管理员
/usr/bin 普通应用程序 所有用户
/usr/sbin 非关键系统管理命令 root管理员

专业解读:Linux的可执行文件不需要特定扩展名(不像Windows的.exe),而是通过文件权限中的x(执行权限)来标识。判断一个文件是否可执行,用 ls -l 看权限位,或用 file 命令查看文件类型。


脚本和程序的区别

解释型 vs 编译型

类型 代表语言 执行方式 特点
解释型 JavaScript、Python、Ruby、Shell 边解释边执行,由解释器逐行翻译 开发快、跨平台、运行相对慢
编译型 C、C++、Swift、Kotlin、Go、Rust 先编译成机器码,再直接执行 运行快、效率高、需针对平台编译

专业解读:Java比较特殊,属于"半编译半解释":先编译成字节码(.class文件),再由JVM(Java虚拟机)解释执行。因此Java程序"一次编译,到处运行"(Write Once, Run Anywhere)。


Linux安装软件的几种方式

Linux主要派系与安装方式

派系 代表发行版 主要安装方式
Redhat红帽派系 Redhat、CentOS、Fedora、Rocky Linux make(源码)、rpm、yum、dnf
Debian派系 Debian、Ubuntu、Kali、Deepin deb、apt、dpkg
FreeBSD系 FreeBSD make、pkg、ports

专业解读:选择哪种安装方式,首先取决于你使用的Linux发行版。CentOS属于Redhat系,因此主要使用yum/rpm。

源码安装

特点:从软件的源代码开始,通过编译生成可执行文件。

通用步骤:

# 下载源码包
wget https://example.com/software-1.0.tar.gz

# 解压
tar -zxvf software-1.0.tar.gz
cd software-1.0

# 配置(检查依赖、生成Makefile)
./configure --prefix=/usr/local/software

# 编译
make

# 安装
make install

优点:可定制编译选项、可优化性能、可修改源码 缺点:步骤繁琐、依赖关系复杂、卸载困难

专业解读:--prefix 指定安装路径,强烈建议自定义路径(如 /usr/local/软件名),方便后续管理和卸载。源码安装的软件通常不在PATH中,需要手动创建软链接或修改环境变量。

rpm 安装

全称:RedHat Package Manager(红帽包管理器)

RPM是Redhat系发行版的基础包格式,文件扩展名为 .rpm。

操作 命令 说明
查询所有已安装包 rpm -qa q=query, a=all
查询指定包 rpm -q 包名 如 rpm -q nginx
安装 rpm -ivh 包名.rpm i=install, v=verbose, h=hash(显示进度条)
升级 rpm -Uvh 包名.rpm U=Upgrade(若未安装则安装,已安装则升级)
卸载 rpm -e 包名 e=erase,不需要带.rpm后缀
# 示例
rpm -ivh nginx-1.20.1-1.el7.ngx.x86_64.rpm
rpm -e nginx                    # 卸载nginx

专业解读:rpm最大的问题是依赖地狱(Dependency Hell):安装A包需要B包,B包又需要C包……手动解决依赖非常痛苦。因此诞生了yum/dnf等高级包管理器。

yum 安装

全称:Yellow dog Updater, Modified

yum是rpm的前端工具,自动解决依赖关系,从配置的软件源(repository)中下载并安装软件及其所有依赖。

操作 命令
列出所有可安装/已安装的包 yum list
列出指定包 yum list 包名
搜索包 yum search 包名
安装 yum install 包名
升级指定包 yum update 包名
卸载 yum remove 包名 或 yum erase 包名
更新所有软件 yum update
清除缓存 yum clean all
更新yum缓存 yum makecache

yum常用选项:

选项 含义
-h 显示帮助信息
-y 对所有提问自动回答"yes"(非交互模式,脚本中常用)
-c 指定配置文件
-q 安静模式,减少输出
-v 详细模式
# 示例
yum install nginx              # 安装nginx(自动解决依赖)
yum install -y nginx           # 自动确认,无需手动输入y
yum remove nginx               # 卸载nginx(同时移除不再被依赖的包)
yum clean all && yum makecache # 清除并重建缓存

专业解读:yum源配置文件在 /etc/yum.repos.d/ 目录下,每个 .repo 文件定义一个软件源。建议将默认源替换为国内镜像(阿里云、清华、163),大幅提升下载速度。

DNF 与 YUM 的区别

DNF(Dandified YUM)是yum的下一代替代品,在Fedora、RHEL 8、CentOS 8及更高版本中成为默认包管理器。

区别项 DNF YUM
解析依赖 使用Libsolv库,更快更可靠 使用公开API,速度较慢
API 完整API文档,易于扩展 文档不完善,扩展困难
开发语言 C、C++、Python 纯Python
内存占用 占用内存少 占用较多内存
更新策略 包中包含不相关的依赖则不更新 可能在没有验证的情况下更新
内核保护 不提供保护,可删除内核包 不允许删除运行中的内核
使用范围 Fedora、RHEL 8+、CentOS 8+ RHEL/CentOS 6/7

专业解读:DNF的语法与YUM几乎完全兼容,CentOS 7用户熟悉yum后,迁移到DNF几乎没有学习成本。

Debian系:apt / dpkg

虽然CentOS属于Redhat系,但在实际工作中可能会遇到Debian/Ubuntu系统,了解其包管理也很重要。

操作 命令
搜索 apt search 包名
安装 apt install 包名
升级 apt update && apt upgrade
卸载 apt remove 包名

专业解读:apt 是 apt-get 的简化版,交互更友好。dpkg 是Debian系的基础包管理工具,类似于rpm,直接操作 .deb 包文件。

FreeBSD系:pkg / ports

操作 命令
搜索 pkg search 包名
安装 pkg install 包名
升级 pkg upgrade 包名
卸载 pkg delete 包名

CentOS安装软件案例

CentOS启用中文输入法

  1. 安装中文输入法框架(如ibus-libpinyin)
  2. 在系统设置中启用输入法
  3. 使用 Super(Win键)+ Space 切换输入法

CentOS yum安装MySQL

# 下载MySQL官方yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm

# 安装yum源
rpm -ivh mysql80-community-release-el7-11.noarch.rpm

# 安装MySQL服务器
yum install -y mysql-community-server

# 启动MySQL
systemctl start mysqld

# 查看初始密码
grep 'temporary password' /var/log/mysqld.log

Linux软件版本管理

在服务器上,有时需要安装多个版本的同一软件(如Java 8和Java 11),此时需要版本管理工具。

update-alternatives

CentOS提供的软件版本切换工具。

查看已注册的版本:

update-alternatives --display java

添加新版本:

update-alternatives --install /usr/bin/java java /usr/local/jdk-11.0.2/bin/java 3
参数解析: - /usr/bin/java:注册地址(软链接) - java:服务名 - /usr/local/jdk-11.0.2/bin/java:实际程序路径 - 3:优先级(数字越大优先级越高)

切换版本:

update-alternatives --config java
# 然后输入对应的数字选择要使用的版本

专业解读:update-alternatives 的原理是在 /usr/bin/ 下创建软链接,指向实际安装的版本。切换版本时,只是修改软链接的指向,不需要重新安装软件。


安全测试视角:供应链安全 软件安装过程中的供应链攻击是近年来日益严重的威胁: - 依赖混淆:攻击者上传与内部私有包同名的恶意包到公共仓库,当企业内部构建系统自动拉取时,优先拉取版本号更高的恶意包 - 仓库篡改:如果 yum/apt 源被中间人攻击或恶意篡改,安装的软件包可能包含后门 - 签名验证:使用 rpm -K 或 gpg --verify 验证软件包签名,确保软件来源可信

# 验证 RPM 包签名
rpm -K nginx-1.20.1-1.el7.ngx.x86_64.rpm

# 查看已安装包的文件变更(检查是否被篡改)
rpm -Va

安全测试视角:SUDO 与包管理器滥用 如果用户被允许以 sudo 执行包管理命令,可能被利用提权: - sudo yum install 可以被利用安装恶意 RPM 包 - sudo apt install 同样可以用于安装后门程序 - 更隐蔽的:sudo dnf remove 可以卸载关键安全组件 在配置 sudo 权限时,应避免授予普通用户无限制的包管理权限。