Stow比手动安装更优雅,因其将每个软件隔离存于独立子目录(如/usr/local/stow/nginx-1.24),再通过符号链接统一暴露到/usr/local,实现安装即隔离、卸载即清理,避免文件混杂与无记录卸载。

用 GNU Stow 管理源码编译安装的多个软件版本,核心是“分装隔离 + 符号链接统一暴露”,既避免文件混杂,又实现一键切换和干净卸载。
为什么 stow 比手动安装更优雅
从源码安装(如 ./configure --prefix=/usr/local)会把二进制、配置、文档等散落到 /usr/local/bin、/usr/local/etc、/usr/local/share 等目录,卸载时无记录、难追溯。Stow 把每个软件单独存放在独立子目录(如 /usr/local/stow/nginx-1.24),再通过符号链接将其内容“投影”到系统路径,真正做到了安装即隔离、卸载即清理。
安装与初始化 stow
确保已安装 stow:
- Ubuntu/Debian:
sudo apt install stow - CentOS/RHEL:
sudo yum install epel-release && sudo yum install stow
创建 stow 根目录并设为标准位置:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
sudo mkdir -p /usr/local/stow- 建议将
/usr/local/stow加入stow默认搜索路径(无需额外配置,stow 默认识别该路径)
安装多版本软件并用 stow 暴露
以 Nginx 为例,安装 1.18 和 1.24 两个版本:
- 解压并编译安装到各自 stow 子目录:
./configure --prefix=/usr/local/stow/nginx-1.18 ... && make && sudo make install./configure --prefix=/usr/local/stow/nginx-1.24 ... && make && sudo make install - 进入 stow 根目录执行启用:
cd /usr/local/stowsudo stow nginx-1.18→ 将bin/、sbin/、conf/等链接到/usr/local/对应位置sudo stow nginx-1.24→ 同理,但注意:若同名文件冲突(如都含sbin/nginx),stow 会报错,需先sudo stow -D nginx-1.18再启用新版本
切换与卸载:一条命令搞定
切换版本本质是“停用旧版 + 启用新版”:
- 停用当前版本:
sudo stow -D nginx-1.18 - 启用目标版本:
sudo stow nginx-1.24 - 验证是否生效:
nginx -v或ls -l /usr/local/sbin/nginx查看链接指向 - 彻底卸载某版本(包括其所有文件):
先sudo stow -D nginx-1.18,再sudo rm -rf /usr/local/stow/nginx-1.18
实用技巧与注意事项
让 stow 更可靠、更顺手:
- 命名清晰:用
软件名-主版本.次版本(如python-3.11.9、node-v20.17.0),避免空格和特殊字符 - 避免权限混乱:所有
stow操作建议统一用sudo,确保链接属主与目标目录一致 - 检查冲突:启用前可用
stow -n -v nginx-1.24(dry-run 模式)预览链接行为 - 不推荐嵌套 stow 目录:不要把
/usr/local/stow/nginx-1.24放在另一个 stow 包里,会破坏层级逻辑

















