linux自定义目录必须遵循fhs规范,应归入/opt(第三方闭源软件)、/usr/local(本地编译开源软件)或/srv(站点数据)三类,并严格遵守命名、权限、系统集成与版本隔离约定。

Linux 中自定义目录结构不能随意创建,必须遵循 FHS(Filesystem Hierarchy Standard)规范,否则容易导致权限混乱、服务异常、升级失败或与包管理器冲突。核心原则是:不侵入系统标准路径,不破坏已有语义,所有自定义内容应有明确归属和生命周期。
明确用途边界:区分系统级 vs 应用级目录
系统目录(如 /usr、/etc、/var)由发行版和包管理器严格管控,普通应用不应直接写入。自定义目录应归入以下三类之一:
-
/opt:适合第三方闭源软件或独立部署的大型应用(如 TDengine 默认安装到
/usr/local/taos,但也可选/opt/taos);目录内需自包含 bin/conf/lib/share 等子结构,不依赖外部路径。 -
/usr/local:适合本地编译安装的开源软件(如自己 build 的 nginx、python 模块),结构需模仿
/usr(即/usr/local/bin、/usr/local/etc、/usr/local/var);该路径默认被 shell 的 PATH 和 pkg-config 搜索。 -
/srv:专为站点数据设计,例如 Web 内容、FTP 根、Git 仓库等。比如
/srv/www/example.com或/srv/git/myproject.git,语义清晰且便于备份策略统一。
保持一致性:命名、权限与所有权要可预测
避免使用模糊名称(如 myapp_v2_new、data_temp),全部采用小写、下划线分隔、无空格的命名风格。关键约定包括:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 配置目录统一用
etc(非config),日志目录统一用log(非logs),可变数据用var(如/opt/myapp/var/cache); - 主程序目录设为
bin,守护进程脚本放libexec或scripts,不混入可执行文件; - 目录属主按运行身份设定:服务进程以专用用户(如
myapp)运行,则/opt/myapp所有者为该用户,etc目录可设为root:myapp并加640权限,防止配置泄露; - 避免
777或递归chown -R,用最小权限满足功能即可。
适配系统管理:支持 systemd、日志轮转与备份
自定义目录若承载服务,需主动对接系统设施:
- 日志路径应指向
/var/log/myapp/(而非/opt/myapp/log),以便 journalctl 收集或 logrotate 管理; - 状态文件、PID 文件、socket 路径建议用
/run/myapp/(tmpfs,重启自动清空),不存于/tmp(可能被清理)或应用目录内; - systemd 服务单元文件中,明确指定
WorkingDirectory=、EnvironmentFile=(指向/etc/myapp/env)、StateDirectory=myapp(自动创建/var/lib/myapp并设权); - 备份脚本只需关注
/etc/myapp+/var/lib/myapp+/var/log/myapp,无需扫描整个/opt/myapp。
留出演进空间:版本隔离与软链接主路径
为支持平滑升级与回滚,不把主路径硬编码为实际版本目录:
- 安装时生成带版本号的目录(如
/opt/myapp-1.2.3),再用符号链接/opt/myapp → /opt/myapp-1.2.3; - 启动脚本或 service 文件中引用
/opt/myapp/bin/start.sh,而非具体版本路径; - 升级时先解压新版本,再原子切换软链接(
ln -sf myapp-1.3.0 /opt/myapp),旧版本目录保留数天供回退; - 配置目录
/etc/myapp和数据目录/var/lib/myapp独立于版本目录,确保升级不丢失状态。










