Appearance
软件安装
Linux 上部署软件的方式主要有三种:通过系统包管理器安装、从源码编译、直接解压二进制包。选择哪种取决于对版本控制、依赖管理和回滚能力的需求。
一、包格式和包管理器
两大发行版系列的包格式和工具:
| 系列 | 包格式 | 底层工具 | 高层工具 |
|---|---|---|---|
| RHEL 系 | rpm | rpm | yum(RHEL 7) / dnf(RHEL 8+) |
| Debian 系 | deb | dpkg | apt |
高层工具(yum/dnf/apt)在底层工具(rpm/dpkg)之上增加了自动处理依赖、连接远程仓库的能力。日常装软件优先用 yum/dnf/apt,它们会自动解决依赖关系。
查看已安装的包:
bash
rpm -qa | grep nginx # RHEL 系
dpkg -l | grep nginx # Debian 系查看某个文件属于哪个包:
bash
rpm -qf /usr/sbin/nginx # RHEL 系
dpkg -S /usr/sbin/nginx # Debian 系在服务器上看到一个陌生命令或配置文件,查它属于哪个包比靠路径猜可靠得多。
二、yum 和 dnf
RHEL 8+ 用 dnf 替代了 yum,命令基本兼容。
bash
yum install nginx -y
yum remove nginx -y
yum update nginx -y
yum list installed
yum info nginx查看和更新仓库信息:
bash
yum repolist # 列出已启用的仓库
yum makecache # 更新仓库元数据缓存只下载包但不安装(适合离线环境):
bash
yum install --downloadonly --downloaddir=/tmp/pkgs nginx内网环境无法直连外网仓库时,--downloadonly 比手动到处找 rpm 链接省事很多。
三、apt
bash
apt update # 更新包列表(类似 yum makecache)
apt install nginx -y
apt remove nginx -y # 卸载包但保留配置
apt purge nginx -y # 卸载包同时删除配置
apt list --installed
apt show nginxremove 和 purge 的区别:remove 删程序不删配置,下次安装时之前的配置能继续用;purge 把配置也清掉。
只下载包:
bash
apt download nginx四、rpm 和 dpkg
在需要安装本地包或无法连接仓库时用到:
bash
rpm -ivh package.rpm # 安装本地 rpm(不自动解决依赖)
rpm -Uvh package.rpm # 升级
rpm -ql nginx # 列出包安装的所有文件
rpm -qi nginx # 查看包的详细信息bash
dpkg -i package.deb # 安装本地 deb(可能提示依赖缺失)
apt -f install # 修复依赖问题(dpkg -i 之后经常需要)五、仓库配置
RHEL 系的仓库配置目录:
bash
ls /etc/yum.repos.d/Debian/Ubuntu:
bash
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/修改仓库配置前备份原文件:
bash
cp /etc/yum.repos.d/CentOS-Base.repo{,.bak}
cp /etc/apt/sources.list{,.bak}多个第三方仓库同时启用时,可能出现同一个包有多个版本来源的情况。排查版本冲突时先确认包实际来自哪个 repo:
bash
yum info package-name # RHEL 系
apt-cache policy package-name # Debian 系六、源码编译
某些场景下需要特定编译选项,或者仓库中根本没有对应版本的包,这时才用源码编译。
典型流程:
bash
tar xf app.tar.gz
cd app
./configure --prefix=/usr/local/app # 检查依赖,生成 Makefile
make # 编译
make install # 安装到 --prefix 指定的目录编译前需要安装开发工具链:
bash
yum groupinstall "Development Tools" -y # RHEL 系
apt install build-essential -y # Debian 系源码编译的主要缺点:包管理器不知道它的存在,卸载和升级需要自己管理、依赖版本冲突时无法被自动检测。安装路径集中放在 /usr/local/软件名-版本 并用软链接管理版本,日后维护会方便一些。
七、二进制包部署
很多现代服务(Go、Rust 写的工具、各种云原生组件)以预编译的二进制压缩包形式发布。部署方式是直接解压:
bash
tar xf app-1.2.3-linux-amd64.tar.gz -C /opt/
ln -sfn /opt/app-1.2.3 /opt/app这种部署方式之下,目录规划通常遵循一定惯例:
| 路径 | 内容 |
|---|---|
/opt/app-版本 | 各版本的程序文件 |
/opt/app | 软链接指向当前使用的版本 |
/etc/app | 配置文件(从 /opt/app/conf 软链接过来或直接放这) |
/var/log/app | 日志文件 |
/var/lib/app | 持久化数据 |
回滚只需要把软链接指回旧版本目录,效率很高。缺点是 systemd unit、日志轮转、用户创建、升级流程都需要自己写,不像包管理器那样集成好。
八、安装后确认
安装完成不等于服务可用。至少确认几点:
bash
which nginx # 确认命令在 PATH 中
nginx -v # 确认版本
systemctl status nginx # 确认服务状态机器上如果装过多个版本(比如同时有包管理器装的 nginx 和二进制部署的 nginx),which 查出来的路径可能和预期不同。