文章目录
接上文,很多刚接触 Linux 的同学都会遇到这些困惑:
- “为什么我安装了 MySQL,目录里还是空的?”
- “项目为什么有人放在 /data?这个目录哪里来的?”
- “/usr、/etc、/var 这么多目录到底干什么?”
- “部署项目应该放在哪里才是最佳实践?”
这篇文章将从 系统目录 + 运维习惯 + 业务部署 三个角度,彻底讲清楚 Linux 的目录结构,让你不再迷茫。
1.整体视角:Linux 是一棵倒挂的树
Linux 文件系统只有一个根目录 /,所有文件都挂在这棵树下:
/
├── bin
├── sbin
├── usr
├── etc
├── var
├── home
├── opt
├── data ←(自定义目录)
├── root
├── tmp
├── dev
├── proc
├── sys
└── mnt / media
不同于 Windows 的 C/D/E 盘,
Linux 只有一个树状文件系统。
理解这棵树 = 理解 Linux。
2.系统核心目录及使用场景(开发者最常用这一部分)
2.1 /home —— 普通用户的“家”
每个用户一个目录:
/home/lcb
使用场景:
- 存放个人文件
- Git 克隆项目
- Python 虚拟环境
- 脚本、测试/demo
适合:
✔ 学习代码
✔ 临时项目
✔ 个人开发环境
2.2 /root —— root 用户的家
只属于超级管理员 root。
使用场景:
- 管理脚本
- 高权限操作文件
- 临时调试文件
⚠ 不建议用 root 干日常开发。
2.3 /etc —— 系统配置文件中心
所有服务的配置文件都在这里:
- Nginx:
/etc/nginx/ - Redis:
/etc/redis/redis.conf - MySQL:
/etc/mysql/ - SSH:
/etc/ssh/sshd_config - APT 源:
/etc/apt/sources.list
使用场景:
✔ 修改服务端口
✔ 配置数据库
✔ 修改登录方式
✔ 更改 Nginx、Redis 配置
一句话:所有“配置”都在这里,不放数据、不放代码。
2.4 /var —— 日志 & 动态数据
/var 是系统运行过程中“会变化的数据”。
常见子目录:
| 目录 | 功能 |
|---|---|
/var/log/ | 所有日志文件 |
/var/lib/ | 数据库文件 / 程序状态数据 |
/var/cache/ | 缓存文件 |
/var/spool/ | 队列(邮件等) |
使用场景:
✔ 查看 Nginx/MySQL/系统日志
✔ 备份数据库数据
✔ 清理缓存
例如:
- MySQL 数据:
/var/lib/mysql/ - Redis 持久化:
/var/lib/redis/ - Nginx 日志:
/var/log/nginx/
2.5 /usr —— 系统程序仓库(APT 安装的软件都在这里)
很多人以为软件会安装到当前目录,其实都是装到这里:
| 目录 | 功能 | 例子 |
|---|---|---|
/usr/bin/ | 普通程序 | python3, node, npm |
/usr/sbin/ | 管理类程序 | nginx, mysqld, redis-server |
/usr/lib/ | 依赖库 | python 库、mysql 库 |
用 which 就能查:
which nginx
which python3
which redis-server
你会看到:
/usr/sbin/nginx
/usr/bin/python3
/usr/bin/redis-server
所以 安装软件后你当前目录空,是完全正常的。
2.6 /usr/local —— 手工安装、编译安装的程序
特点:
- 不归 APT 管
- 用于源码编译、第三方软件
- 和系统应用区分开
比如你从源码编译一个 nginx,它会安装到:
/usr/local/nginx/
2.7 /opt —— 第三方应用、独立工具
适合放:
- 自己安装的大型应用
- 独立的服务器程序
- 你自己的本地部署软件
例如:
/opt/myapp/backend
/opt/myapp/frontend
在轻量运维中 /opt 很常见。
3.虚拟文件系统与设备相关目录
这些目录不是“真实的磁盘文件”,而是系统和内核提供的接口。
3.1 /proc —— 内核和进程信息
/proc/cpuinfo
/proc/meminfo
/proc/1234/
使用场景:
✔ 查看 CPU/内存
✔ 查看进程状态
✔ 性能调试
3.2 /sys —— 设备、内核参数接口
系统根据硬件自动生成,如:
/sys/class/net/
运维高阶使用。
3.3 /dev —— 设备文件
磁盘、U 盘、随机数设备都在这里:
/dev/sda
/dev/sdb1
/dev/tty
/dev/null
挂载磁盘时用到:
mount /dev/sdb1 /mnt
4.挂载目录:/mnt 与 /media
4.1 /mnt —— 临时挂载点
挂载硬盘、ISO 镜像时常用:
sudo mount /dev/sdb1 /mnt
4.2 /media —— 自动挂载点
U 盘、移动硬盘自动挂载到:
/media/usb
适合桌面系统。
5 /tmp —— 临时文件目录(重启可自动清理)
程序运行时的临时文件目录。
特点:
- 所有人可写
- 重启可能清空
- 不要放持久数据
使用场景:
✔ 临时上传
✔ 程序缓存
✔ 命令行中间文件
6 重点:/data —— 业务数据 & 项目部署(非系统目录)
很多人都会问:
“为什么我看到别人服务器里有 /data/mysql /data/redis?”
因为 /data 不属于系统目录,是人为创建的!
企业习惯,把:
- 项目
- 数据文件
- 日志文件
- 上传文件
- 大型服务
都放在 /data 下。
7. /data 为什么那么常见?
原因非常实际:
7.1 数据盘挂载在 /data(企业最常见)
例如:
/dev/vdb1 → /data
这样:
- 重装系统不会影响数据盘
- 独立备份更方便
- 数据量大时更安全
7.2 项目部署清晰、统一
/data/project1
/data/project2
/data/mysql
/data/redis
/data/logs
结构极其清晰。
7.3 和系统目录彻底分离
/usr:系统软件/etc:系统配置/var/lib:系统数据/data:业务专用
避免污染系统盘。
7.4 权限、备份、扩容都更容易做
业务数据集中在 /data,维护简单:
- 备份只备
/data - 扩容只扩
/data - 项目清理只动
/data - 迁移只迁
/data
8. 那 /data 到底是挂载出来的还是创建的?
两种情况都可能:
| 来源 | 特点 | 命令 |
|---|---|---|
手动 mkdir /data | 普通目录 | ls -ld /data |
| 磁盘挂载到 /data | 数据盘 | df -h /data / lsblk |
你现在的 RackNerd 服务器属于:
默认没有 /data,需要你自己 mkdir /data
9.开发者最应该如何用目录?(最佳实践)
以下是实际生产推荐结构:
/opt/myapp/ ← 项目程序(代码)放这里
/data/mysql/ ← 数据库文件
/data/redis/ ← Redis 持久化文件
/data/logs/ ← 应用日志
/etc/nginx/nginx.conf ← 配置文件
/var/log/nginx/ ← Nginx 系统日志
常见部署习惯:
| 内容 | 存放位置 |
|---|---|
| 系统服务配置 | /etc/xxx/ |
| 程序日志(系统级) | /var/log/xxx/ |
| 业务日志 | /data/logs/ |
| 数据库数据 | /data/mysql/ |
| 项目部署文件 | /opt/myapp/ 或 /data/services/ |
| 临时文件 | /tmp/ |
10.总结:牢牢记住这 10 条
/etc放配置/var/log放日志/var/lib放系统数据/usr/bin放系统程序/usr/local放自己编译的程序/home放个人项目/opt放第三方应用/data放业务数据(你自己创建的)/tmp放临时文件/dev /proc /sys都是虚拟目录(不要动)
理解这些目录后,你就能迅速定位:
- 我的软件装在哪里?
- 项目应该部署在哪?
- 为什么 /data 下有别人写好的项目?
- 为什么 apt 安装软件后 ls 是空的?
- 如何划分系统盘和数据盘?

22万+

被折叠的 条评论
为什么被折叠?



