FHS (Filesystem Hierarchy Standard) 定义了Linux目录结构的布局规范,确保不同发行版之间的一致性。当前版本为3.0,由Linux基金会维护。
/
├── bin/ # 基本用户命令(所有用户可用)
├── sbin/ # 系统管理命令(通常root使用)
├── boot/ # 启动加载文件(内核、initrd、GRUB)
├── dev/ # 设备文件(一切皆文件的体现)
├── etc/ # 系统配置文件
├── home/ # 用户家目录
├── root/ # root用户家目录
├── lib/ # 基本共享库
├── lib64/ # 64位共享库
├── media/ # 可移动设备自动挂载点
├── mnt/ # 临时手动挂载点
├── opt/ # 第三方软件安装目录
├── proc/ # 虚拟文件系统(内核与进程信息)
├── sys/ # 虚拟文件系统(硬件与驱动信息)
├── run/ # 运行时数据(PID文件、socket)
├── srv/ # 服务数据目录
├── tmp/ # 临时文件(重启可能清除)
├── usr/ # 用户程序与数据(第二层次)
│ ├── bin/ # 用户命令
│ ├── sbin/ # 非必需系统命令
│ ├── lib/ # 库文件
│ ├── include/ # C头文件
│ ├── share/ # 共享数据(man、doc)
│ └── local/ # 本地编译安装的软件
└── var/ # 可变数据(日志、缓存、邮件)
├── log/ # 系统日志
├── cache/ # 应用缓存
├── lib/ # 应用状态数据
├── spool/ # 打印/邮件队列
└── tmp/ # 持久临时文件
在initramfs和单用户模式下必须可用的命令存放在此。现代发行版中/bin和/sbin通常是指向/usr/bin和/usr/sbin的符号链接(usr merge)。
$ ls / | head -25
total 10424437 drwxr-xr-x 25 root root 4096 May 19 21:38 . drwxr-xr-x 25 root root 4096 May 19 21:38 .. -rw-r--r-- 1 root root 0 May 13 10:43 .autorelabel lrwxrwxrwx 1 root root 7 Apr 22 2024 bin -> usr/bin drwxr-xr-x 2 root root 4096 Feb 26 2024 bin.usr-is-merged drwxr-xr-x 3 root root 4096 May 14 12:17 boot dr-xr-xr-x 2 root root 4096 Apr 23 2024 cdrom drwxr-xr-x 2 root root 4096 Apr 29 2024 data drwxr-xr-x 19 root root 3960 May 19 02:15 dev drwxr-xr-x 130 root root 12288 May 19 21:32 etc drwxr-xr-x 4 root root 4096 May 13 10:43 home drwxrwxrwx 1 root root 0 Jan 1 1970 lhcos-data lrwxrwxrwx 1 root root 7 Apr 22 2024 lib -> usr/lib lrwxrwxrwx 1 root root 9 Apr 22 2024 lib64 -> usr/lib64 drwxr-xr-x 2 root root 4096 Feb 26 2024 lib.usr-is-merged drwx------ 2 root root 16384 Apr 26 2024 lost+found drwxr-xr-x 2 root root 4096 Apr 23 2024 media drwxr-xr-x 2 root root 4096 Apr 23 2024 mnt drwxr-xr-x 3 root root 4096 May 18 21:13 opt dr-xr-xr-x 210 root root 0 May 19 02:15 proc drwx------ 17 root root 4096 May 19 21:32 root drwxr-xr-x 35 root root 1200 May 19 20:04 run lrwxrwxrwx 1 root root 8 Apr 22 2024 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Apr 3 2024 sbin.usr-is-merged
$ ls /bin | head -20
[ aa-enabled aa-exec aa-features-abi aclocal aclocal-1.16 acpidbg acpi_listen add-apt-repository addpart addr2line ambiguous_words apport-bug apport-cli apport-collect apport-unpack appstreamcli apropos apt apt-add-repository
/etc是系统管理的核心目录,存放几乎所有服务和程序的配置文件。名称源于早期UNIX的"et cetera"。
$ ls /etc | head -25
acpi adduser.conf alternatives apparmor apparmor.d apport apt bash.bashrc bash_completion bash_completion.d bindresvport.blacklist binfmt.d byobu ca-certificates ca-certificates.conf chrony cloud cni console-setup credstore credstore.encrypted cron.d cron.daily cron.hourly cron.monthly
| 文件 | 用途 |
|---|---|
| /etc/passwd | 用户账户信息 |
| /etc/shadow | 用户密码哈希(仅root可读) |
| /etc/group | 组信息 |
| /etc/fstab | 文件系统挂载表 |
| /etc/hostname | 主机名 |
| /etc/hosts | 静态DNS解析 |
| /etc/resolv.conf | DNS解析器配置 |
| /etc/ssh/sshd_config | SSH服务端配置 |
| /etc/sudoers | sudo权限配置 |
| /etc/crontab | 系统定时任务 |
| /etc/apt/sources.list | APT软件源 |
| /etc/nginx/nginx.conf | Nginx配置 |
/proc是内核暴露给用户空间的接口,内容在内存中动态生成,不占磁盘空间。每个进程有对应的/proc/PID/目录。
$ ls /proc | head -15
1 10 1000 1049 1055 1086 1107 1119 1123 1136 1149 1150 1154 1193 1194
$ head -5 /proc/meminfo
MemTotal: 7870368 kB MemFree: 1671488 kB MemAvailable: 5669864 kB Buffers: 350228 kB Cached: 3586964 kB
$ head -5 /proc/cpuinfo
processor : 0 vendor_id : AuthenticAMD cpu family : 23 model : 49 model name : AMD EPYC 7K62 48-Core Processor
| 路径 | 内容 |
|---|---|
| /proc/cpuinfo | CPU信息 |
| /proc/meminfo | 内存信息 |
| /proc/version | 内核版本 |
| /proc/cmdline | 内核启动参数 |
| /proc/mounts | 已挂载文件系统 |
| /proc/loadavg | 系统负载 |
| /proc/uptime | 运行时间 |
| /proc/PID/status | 进程状态 |
| /proc/PID/fd/ | 进程打开的文件描述符 |
| /proc/PID/maps | 进程内存映射 |
| /proc/sys/ | 内核参数(可运行时修改) |
Linux中"一切皆文件"的最佳体现,硬件设备以文件形式出现在/dev中。udev守护进程动态管理设备节点。
$ ls -la /dev | head -20
total 4 drwxr-xr-x 19 root root 3960 May 19 02:15 . drwxr-xr-x 25 root root 4096 May 19 21:38 .. crw-r--r-- 1 root root 10, 235 May 19 02:15 autofs drwxr-xr-x 2 root root 280 May 19 02:16 block drwxr-xr-x 2 root root 60 May 19 02:15 bsg crw-rw---- 1 root disk 10, 234 May 19 02:15 btrfs-control drwxr-xr-x 3 root root 60 May 19 02:15 bus lrwxrwxrwx 1 root root 3 May 19 02:15 cdrom -> sr0 drwxr-xr-x 2 root root 3340 May 19 02:15 char crw------- 1 root root 5, 1 May 19 02:16 console lrwxrwxrwx 1 root root 11 May 19 02:15 core -> /proc/kcore drwxr-xr-x 4 root root 80 May 19 02:15 cpu crw------- 1 root root 10, 123 May 19 02:15 cpu_dma_latency crw------- 1 root root 10, 203 May 19 02:15 cuse drwxr-xr-x 8 root root 160 May 19 02:16 disk drwxr-xr-x 2 root root 60 May 19 02:15 dma_heap drwxr-xr-x 3 root root 80 May 19 02:15 dri crw------- 1 root root 10, 125 May 19 02:15 ecryptfs crw-rw---- 1 root video 29, 0 May 19 02:15 fb0
| 设备文件 | 类型 | 说明 |
|---|---|---|
| /dev/sda, /dev/nvme0n1 | 块设备(b) | 磁盘 |
| /dev/tty0, /dev/pts/0 | 字符设备(c) | 终端 |
| /dev/null | 字符设备 | 黑洞(丢弃所有写入) |
| /dev/zero | 字符设备 | 无限输出0x00 |
| /dev/random | 字符设备 | 随机数(阻塞) |
| /dev/urandom | 字符设备 | 随机数(非阻塞) |
| /dev/stdin, stdout, stderr | 符号链接 | 标准I/O |
# /dev/null 用法示例
# 丢弃输出
command > /dev/null 2>&1
# /dev/zero 创建空文件
dd if=/dev/zero of=/tmp/test.img bs=1M count=10
# /dev/urandom 生成随机数据
head -c 16 /dev/urandom | xxd
$ du -sh /var/log /var/cache /var/lib 2>/dev/null
97M /var/log 586M /var/cache 1.7G /var/lib
/sys(sysfs)是2.6内核引入的虚拟文件系统,以结构化方式展示内核对象(kobject)层次,替代了/proc的部分功能。
$ ls /sys | head -15
block bus class dev devices firmware fs hypervisor kernel module power
$ mount | head -15
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev type devtmpfs (rw,nosuid,relatime,size=3894440k,nr_inodes=973610,mode=755,inode64) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=787040k,mode=755,inode64) /dev/vda2 on / type ext4 (rw,relatime) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,inode64) cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=564) hugetlbfs on /dev/hugepages type hugetlbfs (rw,nosuid,nodev,relatime,pagesize=2M) mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
/etc/fstab定义了系统启动时自动挂载的文件系统。格式为6个字段:
# 设备/UUID 挂载点 文件系统类型 挂载选项 dump fsck顺序
# UUID=xxx / ext4 defaults 0 1
# /dev/sda1 /boot ext4 defaults 0 2
$ cat /etc/fstab
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # ## / was on /dev/vda2 during curtin installation /dev/disk/by-uuid/9842d3d6-a839-4127-bda7-f19137effe71 / ext4 defaults 0 1 /swap.img none swap sw 0 0 /swapfile none swap sw 0 0
| 选项 | 说明 |
|---|---|
| defaults | rw,suid,dev,exec,auto,nouser,async |
| noatime | 不更新访问时间,提升性能 |
| nodiratime | 不更新目录访问时间 |
| ro / rw | 只读 / 读写 |
| noexec | 禁止执行二进制文件 |
| nosuid | 忽略SUID位 |
| user | 允许普通用户挂载 |
# 查看可用磁盘
lsblk
# 查看UUID
blkid
# 手动挂载
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data
# 查看挂载信息
findmnt /mnt/data
# 卸载
sudo umount /mnt/data
# 使用UUID挂载(推荐)
sudo mount UUID="xxxx-xxxx" /mnt/data
# 1. 查看目录树(前2层)
find / -maxdepth 2 -type d 2>/dev/null | head -50
# 2. 统计各目录文件数量
for dir in /bin /etc /var /usr /proc /sys /dev; do
echo ": 47 entries"
done
# 3. 查看符号链接
find / -maxdepth 1 -type l 2>/dev/null | while read link; do
echo " -> "
done
# 4. 查看大文件
find /var -type f -size +100M 2>/dev/null
# 5. 查看SUID文件
find /usr -perm -4000 -type f 2>/dev/null | head -10
原因:虚拟文件系统未挂载
# 手动挂载
sudo mount -t proc proc /proc
sudo mount -t sysfs sysfs /sys
sudo mount -t devtmpfs devtmpfs /dev
原因:挂载点目录不存在
sudo mkdir -p /mnt/data # 创建挂载点
sudo mount /dev/sdb1 /mnt/data
原因:有进程正在使用该挂载点
# 查看谁在使用
lsof /mnt/data
fuser -v /mnt/data
# 强制卸载(危险,可能导致数据丢失)
sudo umount -l /mnt/data # 延迟卸载
sudo umount -f /mnt/data # 强制卸载(NFS)
将以下路径与用途对应:
答案:1-B, 2-A, 3-D, 4-C, 5-E
# 执行以下命令并记录输出
# 1. 查看根目录各目录大小
du -sh /* 2>/dev/null | sort -rh | head -10
# 2. 查看/usr的子目录结构
ls -la /usr/
# 3. 找出/etc下所有.conf文件
find /etc -name "*.conf" 2>/dev/null | wc -l
# 4. 查看/proc下当前进程
ls -d /proc/[0-9]* | wc -l
✅ 掌握FHS目录结构规范
✅ 理解/proc、/sys、/dev虚拟文件系统
✅ 学会使用mount管理挂载
✅ 能够排查挂载相关问题