一、软件包的概念与管理
¶1. 软件包组成
软件包是将程序、库文件、配置文件以及文档等打包在一起的文件,方便安装、升级和卸载。软件包能自动处理依赖关系,简化软件管理。一个标准的软件包通常包括以下内容:
¶二进制命令(可执行文件)
经过编译的程序源代码,生成的可执行二进制文件。例如,在 Linux 系统中,/usr/bin/ 目录下的可执行文件通常来自安装的软件包,如 vim、gcc 等。
¶配置文件(Configuration Files)
存放应用程序的默认配置,通常位于 /etc/ 目录下。例如:
1 | /etc/nginx/nginx.conf # Nginx 的配置文件 |
¶数据文件(Data Files)
应用程序所需的数据,如数据库文件、默认资源等。例如:
1 | /var/lib/mysql/ # MySQL 数据库存放目录 |
¶依赖库(Shared Libraries)
共享库是可执行文件运行时依赖的动态链接库,通常存放在 /usr/lib/ 或 /lib/ 目录下。例如:
1 | /usr/lib/libssl.so |
(5)文档(Documentation)
软件的说明文档、手册页、版权声明等,通常存放在 /usr/share/doc/ 目录。例如:
1 | /usr/share/doc/nginx/README |
¶2. Linux 软件包
¶软件包格式对比
Linux 发行版不同,软件包的格式也有所不同。主要分为以下几类:
| 发行版 | 软件包格式 | 包管理工具 |
|---|---|---|
| Debian、Ubuntu | .deb | dpkg、apt |
| Red Hat、CentOS、Fedora | .rpm | rpm、yum、dnf |
| Arch Linux | .tar.xz | pacman |
| Gentoo | 源码包 | portage |
| macOS | .pkg | brew |
¶常见操作示例
下面主要介绍 RPM 包的常见操作,RPM(Red Hat Package Manager)用于 Red Hat/CentOS 等系统。常见操作包括安装、升级、卸载和查询软件包信息,而 Yum 是基于 RPM 包管理的工具。Ubuntu 默认使用 DEB 包管理(dpkg/apt),但在某些情况下可能会遇到 RPM 包,使用工具如 alien 可将 RPM 包转换为 DEB 包进行安装。一些使用示例如下:
将 RPM 包转换为 DEB 包
1 | sudo apt install alien |
RPM 依赖冲突解决:当安装 RPM 包遇到依赖问题时,需要手动安装缺少的依赖或使用工具解决依赖冲突。转换为 DEB 包后,可借助 apt 的自动依赖解析功能。
常用 RPM 命令
1 | rpm -ivh package.rpm # 安装 RPM 包 |
光盘获取 RPM 包:如果软件包存放在光盘上,需要先挂载光盘,然后使用 RPM 命令进行安装:
1 | sudo mount /dev/cdrom /mnt |
yum 安装包
1 | # 安装软件包: |
apt 与 yum 的操作逻辑相似,但底层依赖管理和软件包格式不同。
1 | # 更新软件源: |
¶dpkg vs rpm 命令对比表
| 操作 | Debian/Ubuntu (dpkg) |
RHEL/CentOS/Fedora (rpm) |
|---|---|---|
| 安装软件包 | dpkg -i package.deb |
rpm -i package.rpm |
| 升级软件包 | dpkg -i package.deb |
rpm -U package.rpm |
| 删除软件包 | dpkg -r package |
rpm -e package |
| 强制删除(含配置) | dpkg --purge package |
rpm -e --noscripts package |
| 查询已安装软件包 | dpkg -l |
rpm -qa |
| 查询特定软件包 | `dpkg -l | grep package` |
| 查看文件所属软件包 | dpkg -S /path/to/file |
rpm -qf /path/to/file |
| 列出软件包安装的文件 | dpkg -L package |
rpm -ql package |
| 检查软件包信息 | dpkg -I package.deb |
rpm -qip package.rpm |
| 检查软件包依赖 | `dpkg -I package.deb | grep Depends` |
| 列出某软件包的依赖 | dpkg -L package |
rpm -qR package |
| 检查软件包是否已安装 | dpkg -s package |
rpm -q package |
| 验证已安装的软件包 | dpkg --verify package |
rpm -V package |
提取 .deb 或 .rpm 文件 |
dpkg -x package.deb /target/dir |
`rpm2cpio package.rpm |

¶3. 替换为阿里云源
¶📌 备份原始源
在修改软件源之前,建议先备份原来的 sources.list 以防万一:
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
这样如果有问题,你可以恢复:
1 | sudo mv /etc/apt/sources.list.bak /etc/apt/sources.list |
¶📌 替换 sources.list 为阿里云源
✅ 方法 1:手动编辑
使用 vim 或 nano 编辑 sources.list:
1 | sudo vim /etc/apt/sources.list |
删除原内容,替换为以下 阿里云镜像源(适用于 Ubuntu 22.04、20.04、18.04):
1 | # 默认官方源 |
要注意 bionic 适用于 Ubuntu 18.04,并且注意结合系统架构。
✅ 方法 2:自动替换
如果你不想手动编辑,可以直接运行:
1 | sudo sed -i 's|http://.*archive.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list |
¶📌 更新软件仓库
执行:
1 | sudo apt update && sudo apt upgrade -y |
这将使用新的 阿里云镜像源 下载最新的软件包。
¶📌 确认修改成功
你可以运行:
1 | cat /etc/apt/sources.list |
如果输出包含 mirrors.aliyun.com,说明修改成功。
然后尝试安装软件:
1 | sudo apt install vim -y |
如果安装速度明显变快,就说明 阿里云源生效 了!🚀
二、程序编译与解释
-
编译型语言
- 原理:程序在运行前经过编译器转换为机器语言,再由操作系统执行。
- 优点:执行效率高;代码优化较好;通常适合需要高性能计算的场景。
- 缺点:编译过程耗时;调试过程较复杂。
- 实例:使用 gcc 编译 C 程序:
1
2gcc -o hello hello.c
./hello
-
解释型语言
- 原理:源代码在运行时由解释器逐行解析执行。
- 优点:开发周期短,调试方便;跨平台性好。
- 缺点:运行速度较慢;需要解释器支持。
- 实例:使用 Python 执行脚本:
1
python3 hello.py
不同语言的应用范围不一样:
- 系统级开发:
- C/C++:httpd、nginx
- golang:docker
- 应用级开发:
- Java:Hadoop、Hbase
- Python:openstack
- Pert
- Ruby
- PHP
我们以 Golang 和 Python 为例,比较这两种语言在性能、开发效率和生态系统方面的差异:
-
Golang (Go)
-
特点:编译型语言,性能高、并发编程原生支持,适用于网络服务和分布式系统开发。
-
缺点:语法相对严格,生态系统虽然不断发展但相对 Python 略小。
-
示例:一个简单的 Go 程序:
1
2
3
4
5
6
7
8cat << 'EOF' > hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Golang!")
}
EOF
go run hello.go
build之后就将源码以及相关依赖打包进文件hello了,一次编译,到处运行(这也是 docker 的理念),如果不编译就一定要机器上有对应的编译器。
-
-
Python
-
特点:语法简洁、开发速度快、拥有丰富的第三方库,适用于数据分析、Web 开发和自动化脚本。
-
缺点:运行速度相对较慢,不适合极端高性能计算。
-
示例:一个简单的 Python 脚本:
1
2
3
4
5cat << 'EOF' > hello.py
#!/usr/bin/env python3
print("Hello, Python!")
EOF
python3 hello.py
-
三、源码编译与二进制配置
在 Linux 中,软件可以通过源码编译或二进制免安装方式进行部署。
- 二进制包:已经编译好的可执行文件及其依赖文件(如 Ubuntu 下的 DEB 包)。安装快速、方便,但可定制性较低。
- 源码包:包含程序的源代码,需要经过编译生成可执行文件。提供更高的定制化和优化空间,但安装过程较复杂。
¶1. 源码编译(以淘宝 Nginx 为例)
步骤:
-
下载源码:从淘宝镜像或官方源下载 Nginx 源码包,可以复制链接地址后去虚拟机
wget
-
解压源码包:
1
tar -zxvf nginx-1.xx.tar.gz
-
配置编译参数:
1
2cd nginx-1.xx
./configure --prefix=/usr/local/nginx --with-http_ssl_module逐步将需要的包都安装完后,将会返回如下结果说明成功了:

查看当前目录会发现多了个
Makefile:
只有
make install成功后,才会生成指定的nginx路径。 -
编译并安装:
1
2
3
4make
sudo make install
## 或者直接
make && make install经过一长串的编译,结果如下:

-
查看安装的路径,会发现包含这四个文件:
1
2# ls
conf html logs sbin分别对应配置文件、前端 HTML 页面、日志文件和可执行的二进制文件。
-
启动 Tengine:
在
nginx.conf文件里配置完端口号启动./sbin/nginx:
编译过程允许你自定义安装路径和模块,适用于需要特定功能或优化的场景。
¶2. 二进制免安装配置(以 Java 为例)
步骤:
-
下载 Java 二进制包(通常为压缩文件)。

-
解压文件到指定目录(或者使用SFTP进行主机和虚拟机之间传输):
1
tar -zxvf jdk-xx_linux-x64_bin.tar.gz -C /opt
-
配置环境变量:
编辑~/.bashrc添加:1
2export JAVA_HOME=/opt/jdk-xx
export PATH=$JAVA_HOME/bin:$PATH
-
使配置生效:
1
source ~/.bashrc
这种方式无需安装程序,直接解压配置,便于快速部署和版本切换。
- 本文标题:Linux 软件包管理
- 本文作者:Chen Kai
- 创建时间:2025-02-08 00:00:00
- 本文链接:https://www.chenk.top/Linux 软件包管理/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!