cd /etc、vi /var/log/messages、rm -rf /(千万别执行!),这些目录你天天进,但 /bin 和 /usr/bin 有什么区别?/proc 里的文件为什么大小都是0?本文带你彻底搞懂 Linux 目录设计的底层逻辑。一、Linux 目录设计哲学
Linux 遵循 FHS(Filesystem Hierarchy Standard) 标准,核心思想:
二、根目录结构总览
/ # 根目录├── bin # 基础命令(单用户模式可用)├── sbin # 系统管理命令├── boot # 启动文件├── dev # 设备文件├── etc # 配置文件├── home # 用户家目录├── lib # 基础库文件├── lib64 # 64位库文件├── media # 可移动设备挂载点├── mnt # 临时挂载点├── opt # 可选第三方软件├── proc # 进程信息(虚拟文件系统)├── root # root 用户家目录├── run # 运行时变量数据├── srv # 服务数据├── sys # 系统信息(虚拟文件系统)├── tmp # 临时文件├── usr # 用户程序├── var # 可变数据└── ...
三、核心目录详解
1. /bin — 基础二进制命令
$ ls /bincat chmod cp date echo grep kill ln ls mkdir mv ps rm sh tar touch
| |
|---|
| |
| |
| 单用户模式(救援模式)下可用 |
| /bin 是系统启动必需的,/usr/bin 是普通用户命令 |
为什么分开?
历史原因:早期系统 /usr 可单独挂载,如果挂载失败,系统仍能用 /bin 里的基础命令启动和修复。
2. /sbin — 系统管理命令
$ ls /sbinfdisk fsck ifconfig init ip mkfs reboot route shutdown tune2fs
3. /usr — Unix System Resources(不是"用户"!)
$ ls /usrbin lib lib64 local sbin share src
| |
|---|
/usr/bin | |
/usr/sbin | |
/usr/lib | |
/usr/local | 手动编译安装的软件 |
/usr/share | |
/usr/src | |
关键区分:
4. /etc — 配置文件
$ ls /etcpasswd shadow fstab hosts nginx/ ssh/ systemd/ yum.repos.d/
| |
|---|
| et cetera(等等)或 editable text configuration |
| |
| passwd、fstab、hosts、ssh/sshd_config |
配置管理原则:
5. /var — 可变数据(Variable)
$ ls /varlog spool mail cache lib tmp www
| |
|---|
/var/log | 系统日志 |
/var/spool | |
/var/mail | |
/var/cache | |
/var/lib | |
/var/tmp | |
为什么和 /usr 分开?
/usr 通常是只读挂载(系统更新时),/var 是可写的动态数据,分离后系统升级更安全。
6. /tmp 和 /var/tmp — 临时文件
| |
|---|
/tmp | 任何用户可写,重启后清空(tmpfs 挂载到内存) |
/var/tmp | |
安全注意:
# /tmp 通常有 sticky 位(1777),防止用户删除他人文件ls -ld /tmpdrwxrwxrwt 10 root root 4096 Jul 6 10:00 /tmp# ↑ t = sticky bit
7. /dev — 设备文件
$ ls /devsda sda1 sdb null zero random tty pts/ stdin stdout stderr
特点:这些不是真实磁盘文件,是内核提供的接口。
8. /proc — 进程信息(虚拟文件系统)
$ ls /proc1/ # PID 1 的进程目录(init/systemd)cpuinfomeminfoloadavgsys/net/...
| |
|---|
/proc/PID/ | |
/proc/cpuinfo | |
/proc/meminfo | |
/proc/loadavg | |
/proc/sys/ | |
特点:
# 临时开启 IP 转发echo 1 > /proc/sys/net/ipv4/ip_forward# 永久生效需写入 /etc/sysctl.conf
9. /sys — 系统信息(sysfs)
$ ls /sysclass/ dev/ devices/ firmware/ fs/ kernel/ module/ power/
与 /proc 的区别:
/proc:进程和系统运行时信息
/sys:设备和内核对象信息
10. /opt — 可选第三方软件
$ ls /optgoogle/ containerd/ some-commercial-app/
| |
|---|
| |
| |
| Oracle、Google Chrome、容器运行时 |
11. /home — 用户家目录
$ ls /homealice/ bob/ charlie/
root 的家目录是独立的 /root,不在 /home 下(安全考虑)。
12. /boot — 启动文件
$ ls /bootvmlinuz-5.14.0 # 内核镜像initramfs-5.14.0.img # 初始内存盘grub2/ # 引导加载器配置config-5.14.0 # 内核编译配置
13. /run — 运行时数据
$ ls /runcrond.pid nginx.pid sshd.pid systemd/ user/ lock/
四、关键目录对比表
| | | |
|---|
| /bin | /usr/bin | |
| /sbin | /usr/sbin | |
| /usr/local | /opt | |
| /tmp | /var/tmp | |
| /proc | /sys | |
| /etc | ~/.config | |
五、生产环境最佳实践
1. 分区规划建议
# 推荐独立分区的目录/boot # 500MB,防止根目录满导致无法启动/var # 日志增长快,单独分区避免撑爆根目录/var/log # 更大,日志审计合规要求/tmp # 限制大小,防止临时文件攻击/home # 用户数据独立,系统重装不丢失
2. 权限基线
# 关键目录权限检查ls -ld /tmp /var/tmp /etc /homedrwxrwxrwt 10 root root 4096 /tmp # 1777,stickydrwxrwxrwt 7 root root 4096 /var/tmp # 同上drwxr-xr-x 80 root root 4096 /etc # 755,系统可读drwxr-xr-x 3 root root 4096 /home # 755,用户目录在里面
3. 查找大文件
# 从根目录找大文件,但排除其他文件系统du -h -x / | sort -rh | head -20# 只看 /var/logdu -sh /var/log/* | sort -rh | head -10
六、常见错误和危险操作
| | |
|---|
rm -rf / | | |
rm -rf /boot/* | | |
chmod -R 777 / | | |
> /var/log/messages | | |
| | /tmp |
七、总结 checklist
□ /bin、/sbin:系统启动必需的基础命令□ /usr/bin、/usr/sbin:普通用户和系统管理命令□ /usr/local:手动编译安装的软件□ /etc:系统配置文件,修改前备份□ /var:动态数据,日志、缓存、邮件□ /tmp:临时文件,重启清空,不要存重要数据□ /proc、/sys:虚拟文件系统,实时反映系统状态□ /dev:设备接口,不是真实文件□ /home:用户数据,建议单独分区□ /boot:启动文件,必须保护好
一句话总结
/bin 是救命用的,/usr 是日常用的,/etc 是配置用的,/var 是日志用的,/proc 是内核暴露的——记住这四句话,目录结构就不乱了。