/usr/local 是 linux 中本地编译安装软件的标准路径,需通过 configure --prefix=/usr/local 正确声明,再执行 make && sudo make install,各组件依约定落位至 bin、lib、etc 等子目录,不可直接拷贝或改用 /usr。

/usr/local 是 Linux 系统中约定俗成的「本地编译安装软件」标准路径,它不是强制规定,而是 POSIX 和 GNU 项目广泛遵循的惯例。手动编译源码包时,若想让软件真正“符合标准”地装进 /usr/local,关键不在“硬拷贝”,而在于通过构建系统正确声明并尊重该路径语义。
✅ 正确指定 /usr/local 为安装根目录
几乎所有 autotools(即含 configure 脚本)的源码包,默认就以 /usr/local 为 --prefix 值。你只需:
- 不加
--prefix参数直接运行./configure,它就会默认使用/usr/local - 或显式写出来,更清晰:
./configure --prefix=/usr/local make && make install
⚠️ 注意:
/usr/local必须存在且当前用户有写权限(通常需sudo),否则make install会失败。
? /usr/local 下的标准子目录分布
--prefix=/usr/local 后,各组件按约定落位:
- 可执行文件 →
/usr/local/bin - 库文件 →
/usr/local/lib(或/usr/local/lib64,取决于架构) - 配置模板/主配置目录 →
/usr/local/etc - 共享资源(如 man 手册、文档、字符集)→
/usr/local/share - 头文件(供开发用)→
/usr/local/include
这些路径由 configure 脚本自动推导,无需额外参数——除非你想微调,比如单独指定配置文件位置:
./configure --prefix=/usr/local --sysconfdir=/etc
(这时 etc 就不放在 /usr/local/etc,而走 /etc,常见于 MySQL、Nginx 等希望系统级统一管理配置的场景)
? 权限与实际落地要点
-
/usr/local本身通常属root:root,普通用户无法直接写入
→ 编译可用普通用户,但make install需加sudo:sudo make install
安装后,二进制如
/usr/local/bin/nginx可直接在终端输入命令调用(前提是/usr/local/bin在PATH中——主流发行版默认已包含)-
若
PATH不含/usr/local/bin(如最小化安装的 Alpine 或某些容器环境),可临时补上:export PATH="/usr/local/bin:$PATH"
或永久写入
~/.bashrc//etc/environment
❌ 不推荐的做法
- 直接
cp或mv文件到/usr/local:绕过构建系统,丢失依赖信息、版本记录和卸载能力 - 用
--prefix=/usr替代/usr/local:这会混入系统包管理范畴,可能与apt/yum冲突,不建议普通用户这么做 - 忽略
make install,只运行make:此时程序仅编译完成,未部署到目标路径,无法全局调用
本质上,/usr/local 成为“标准路径”,靠的是整个开源生态对 --prefix 默认值的一致采用,以及系统 shell 和包管理器对它的默认信任。你只需尊重这个契约,用对 configure 参数,剩下的就自然合规。











