Linux文件系统层次结构
2026/6/29大约 4 分钟
Linux文件系统层次结构
复习定位
Linux目录树有固定的FHS标准——但不是强制的——有些发行版(generic Linux)在新版FHS中增加了/run等新目录。理解目录结构对于配置管理、文件查找、权限维护和系统故障诊断都非常重要——知道日志在/var/log——知道系统配置在/etc——知道用户数据在/home。
FHS标准
FHS(Filesystem Hierarchy Standard)定义了Linux系统中主要目录的用途——保证不同发行版(Debian/RedHat/Arch)的目录结构基本一致——软件和用户可以在不同系统中找到所需的文件。
| 目录 | 用途 | 文件类型说明 |
|---|---|---|
| /bin | 基本用户命令(ls/cp/cat) | 普通可执行文件——现代发行版是到/usr/bin的符号链接 |
| /sbin | 基本系统管理命令(fdisk/fsck/ifconfig) | 通常在root的PATH中——普通用户无权限执行部分命令 |
| /etc | 系统配置文件(passwd, fstab, ssh/sshd_config) | 与当台机器相关的设置都在这——文本文件 |
| /dev | 设备文件(sda, tty, random) | 使用ls -l /dev/sda——文件类型为块设备b |
| /proc | 进程和内核信息(cpuinfo, meminfo, 1/...) | 虚拟文件系统——内核在运行时生成的——不占用磁盘空间 |
| /sys | 设备驱动程序信息(block/class/power) | 比proc更结构化——用于修改内核参数(echo 3 > /sys/block/sda/queue/nr_requests) |
| /var | 可变数据(log, spool, cache, tmp) | 程序运行时产生的、文件大小可能增长的内容 |
| /tmp | 临时文件(任何用户都可读写) | 重启后被清空——通常挂载为tmpfs使用内存而非磁盘 |
| /home | 普通用户的家目录(home/user1, home/user2) | 每个用户的数据隔离 |
| /root | root用户的家目录 | 与/home分开——不在/home下 |
| /usr | 共享只读数据(bin, lib, share, include) | 大多数用户程序安装在/usr/bin下而不是/bin |
| /boot | 引导程序(vmlinuz, initramfs, grub目录) | 启动需要的静态文件 |
| /opt | 第三方商业程序(如Oracle) | 非系统自带的软件可以安装在/opt下 |
| /run | 运行时数据卷(pid, lock, socket) | 上一个标准的tmpfs——从系统启动时就存在——不是/var/run |
文件类型
ls -l的第一个字符表示文件类型:
-: 普通文件——二进制程序、文本、脚本、图片d: 目录l: 符号链接——硬链接不显示特殊标记(按普通文件列出)b: 块设备——如/dev/sda(硬盘)c: 字符设备——如/dev/tty(终端)s: 套接字——用于进程间通信——如/var/run/docker.sockp: 命名管道(FIFO)——也用于进程间通信
重要配置文件位置
| 配置 | 路径 |
|---|---|
| 用户信息 | /etc/passwd |
| 加密密码 | /etc/shadow |
| 组信息 | /etc/group |
| DNS解析配置 | /etc/resolv.conf |
| 主机名 | /etc/hostname |
| 静态主机表 | /etc/hosts |
| 自动挂载 | /etc/fstab |
| apt源(Debian) | /etc/apt/sources.list |
| yum源(RedHat) | /etc/yum.repos.d/ |
| 系统日志(Debian) | /var/log/syslog |
| 系统日志(RedHat) | /var/log/messages |
| 登录日志 | /var/log/auth.log(Debian)或/var/log/secure(RedHat) |
复习检查
/etc/passwd文件和/etc/shadow文件的功能差异——为什么user密码存在shadow而不直接写在passwd里(权限原因——passwd任何人都可读)——shadow仅root可读。/proc/cpuinfo和/proc/meminfo——这些内容属于什么文件系统——它占用磁盘空间吗——它的数据是谁在什么时候生产的?硬链接(ln)和符号链接(ln -s)的区别是什么——删除原始文件后——硬链接还能访问文件吗?同文件系统的inode一致性如何保持在多个硬链接间。
/tmp通常在系统启动时被清空——在哪些场景下一个应用应避免向/tmp写入数据(安全敏感性)或者应使用/var/tmp(重启后保留)?为什么普通用户可以通过
/usr/bin/passwd程序修改自己的密码——但/etc/shadow的权限是root:shadow且-rw-r-----——该程序在执行时如何获得写shadow必要的权限?