Linux 只有一棵树,没有 C 盘 D 盘——这一节把根目录下那十几个文件夹逐个交代清楚:谁管程序、谁管配置、谁管数据、谁是虚拟的。外加两个必知的新情况:/usr 合并,和树莓派特有的 /boot/firmware。
4-2 教你「怎么找东西」,4-3 教你「谁能动东西」——本节回答「东西为什么在该在的地方」。
3-1 提过一句「文件系统是一棵树不是一堆盘」;本节把这棵树画全。
读完之后再回头看 3-5 的 df -h、2-2 的 /boot/firmware,你会知道那些路径为什么长那样。
一、总纲:一棵树,一个根,没有盘符
| 对比项 | Windows | Linux |
|---|---|---|
| 起点 | 每个盘一个根:C:\、D:\ |
只有一个根:/ |
| 分区/U 盘插进来 | 变成新盘符 E:\ |
挂到树上某个目录(如 /media/pi/USB) |
| 路径分隔符 | 反斜杠 \ |
正斜杠 / |
| 大小写 | 不区分 | 区分(Notes.txt 和 notes.txt 是两个文件) |
一块新硬盘或 U 盘插上去,不是「多出一个盘」,而是被挂到已有的树上的某个位置——像往真树上接一个枝。
所以树莓派的 SD 卡插上 U 盘后,你是去 /media/pi/xxx 里找它的文件,而不是找「F 盘」。
再看一眼根目录,其实只有十几个条目:
ls -1 /
二、根下的目录逐个交代(全景表)
先按「用途」分四类记,比按字母背容易得多。
第一类:程序与库(系统自己住的房子)
| 目录 | 装什么 | 一句话 |
|---|---|---|
/usr |
绝大部分已安装的软件 | 名字骗人,不是「用户文件」,是 Unix System Resources |
/usr/bin |
用户能用的可执行程序 | ls、python3、apt 都在这儿 |
/usr/sbin |
系统管理类程序 | useradd、iptables |
/usr/lib |
共享库与内部程序 | 程序依赖的 .so 文件 |
/usr/share |
与架构无关的数据 | 手册、图标、语言包 |
/usr/local |
你自己手动装的软件 | 包管理器不碰这里(4-5 会用到) |
/opt |
第三方整包软件 | 如某些商业软件整套塞在这儿 |
/lib /bin /sbin |
老位置(现在是快捷方式) | 见第三节 |
第二类:配置与数据(会变的东西)
| 目录 | 装什么 | 一句话 |
|---|---|---|
/etc |
全系统的配置文件 | 纯文本,你要改的东西基本都在这(/etc/hostname、/etc/passwd) |
/var |
一直在变的数据 | 日志、缓存、数据库文件 |
/var/log |
日志 | 排查问题必看(syslog、auth.log) |
/var/cache |
缓存 | 删了不影响运行 |
/home |
每个用户的家目录 | 你的东西都在 /home/你的名字,简称 ~ |
/root |
root 的家目录 | 注意它不在 /home 下,是特例 |
/srv |
服务要对外提供的数据 | 用得少,知道有就行 |
第三类:启动与设备
| 目录 | 装什么 | 一句话 |
|---|---|---|
/boot |
开机要用的东西(内核、固件) | 树莓派上要再分一层,见第四节 |
/dev |
设备文件 | 假文件,读写它就是操作硬件(/dev/sda、/dev/ttyAMA0) |
第四类:临时与虚拟(重启就清空)
| 目录 | 装什么 | 一句话 |
|---|---|---|
/tmp |
临时文件 | 重启清空;Trixie 起还会自动清理 10 天没动的 |
/run |
运行时数据 | 进程号、socket,重启清空 |
/proc |
内核与进程的实时信息 | 假的,不在磁盘上(见第五节) |
/sys |
内核与硬件的接口 | 同上,改它能调硬件参数 |
/media |
可移动介质自动挂载点 | U 盘插上一般出现在这 |
/mnt |
手工临时挂载点 | 留给管理员自己挂 |
三、必知的变化:/bin、/sbin、/lib 现在是「快捷方式」
老资料会把 /bin 和 /usr/bin 当两个目录讲——按那套说法,/bin 装「开机必须的」,/usr/bin 装「其余的」。现在的系统已经不这么分了。
| 老位置 | 现在实际是 |
|---|---|
/bin |
指向 /usr/bin 的符号链接 |
/sbin |
指向 /usr/sbin |
/lib |
指向 /usr/lib |
这意味着 /bin/bash 和 /usr/bin/bash 是同一个文件。 你可以自己验证:
ls -ld /bin /sbin /lib
# 会看到 lrwxrwxrwx ... /bin -> usr/bin 这一类输出
① 老教程里「把程序放 /usr/local/bin 还是 /bin」的纠结已经没有意义了——它们最终都在同一棵子树下。
② 名字变了之后,PATH 里同时出现 /bin 和 /usr/bin 不是重复,也不是浪费(4-1 里 echo $PATH 那个输出就解释了)。
③ 别手动去「合并」它:现在的系统在安装时就已经是合并状态了;如果 systemctl 提示 System is tainted: unmerged-bin,那是在说「你这台机器的目录结构比较特殊」——官方建议是忽略它,不要自己动手改(手动合并会破坏后续升级)。
一句话:/bin = /usr/bin,当成同一个地方就行。
四、树莓派特有的:/boot/firmware
普通 Linux 的开机文件在 /boot。树莓派从 Bookworm 起多了一层:
| 老路径(旧系统/老教程) | 现在的真实路径 |
|---|---|
/boot/config.txt |
/boot/firmware/config.txt |
/boot/cmdline.txt |
/boot/firmware/cmdline.txt |
为什么要这么改:把「固件(GPU 启动代码)读的配置」和「Linux 内核用的文件」分开放——/boot/firmware 是那个单独的小分区(VFAT),/boot 剩下的才留给内核和 initramfs。
改串口、开 I2C/SPI、超频、强制 HDMI 分辨率这些操作,全都要编辑 /boot/firmware/config.txt。
老教程写 /boot/config.txt——在新系统上你要么找不到这个文件,要么改了个「不生效的副本」(有些版本里它只是个普通文件或失效链接,改了系统根本不读)。
动手前先确认路径:
ls -l /boot/firmware/config.txt
cat /boot/firmware/cmdline.txt # 看得到内容,就说明路径对了
改之前先备份:sudo cp /boot/firmware/config.txt /boot/firmware/config.txt.bak——这个文件改错可能开不了机。
顺便认一下这个分区里还有什么(2-2 烧录时你其实见过):
ls /boot/firmware
# 常见:config.txt、cmdline.txt、overlays/(硬件覆盖层)、start*.elf、kernel*.img
五、那些「不在磁盘上」的目录:虚拟文件系统
/proc、/sys、/dev、/run 有个共同点:它们看起来是目录、能 ls、能 cat,但磁盘上并没有对应的数据——它们是内核实时生成的窗口。
| 目录 | 看什么 | 试一下 |
|---|---|---|
/proc |
进程与内核状态 | cat /proc/cpuinfo、cat /proc/version |
/proc/<数字> |
每个进程一个目录,数字就是 PID | ls /proc/self 看当前 Shell 自己 |
/sys |
内核与硬件的接口 | cat /sys/class/thermal/thermal_zone0/temp(CPU 温度) |
/dev |
设备 | ls /dev/tty* |
/run |
运行时数据 | 重启后内容全变 |
① 树莓派上查型号、查温度、查 CPU 信息,用的就是这些路径——第一章 1-2 提过 cat /proc/device-tree/model,就是这一类。
② 别对它们做备份、别往里放东西:它们是「镜子」,不是「柜子」。往里写有时会改硬件设置,有时直接报错。
③ 所以 du -sh /proc 得到 0 是正常的——它本来就没占磁盘。
六、五个「看着像」的目录,一次分清
新手最容易混的就是这一组:
| 目录 | 谁的东西 | 怎么记 |
|---|---|---|
/usr/local |
你自己编译/手动装的软件 | 官方发行的软件不在这儿,重装系统前值得备份 |
/opt |
第三方整套软件 | 一个软件一个文件夹,自成一体 |
/srv |
服务对外提供的数据 | 如网站文件(用得少) |
/media |
U 盘等自动挂载 | 插上自动出现,拔了就没了 |
/mnt |
手动临时挂载 | 空着是正常的,是你自己用的 |
一句话:
local是我装的,opt是别人整套塞的,srv是给外人看的,media是插进来的,mnt是我自己挂的。
再补一条实用判断:「我的项目文件该放哪?」
| 情况 | 放哪 |
|---|---|
| 自己的代码、笔记、脚本 | ~(家目录)下随便建,如 ~/projects |
| 想给全系统用的小工具 | /usr/local/bin(4-2 讲 PATH 时提过它在这条路上) |
| 树莓派专属的硬件小项目 | 家目录下建,别放 /boot/firmware |
| 开机参数、硬件开关 | /boot/firmware/config.txt |
| 服务/程序的配置 | /etc/xxx |
七、动手 Demo:把整棵树走一遍
在树莓派上依次跑这九步(每步对应上面某一节):
# 1. 先看根目录到底有哪些条目
ls -1 /
# 2. 验证「/bin 是 /usr/bin 的快捷方式」
ls -ld /bin /sbin /lib
# 3. 验证「同一个文件两个路径」——两条命令结果应完全一致
ls -l /bin/bash
ls -l /usr/bin/bash
# 4. 树莓派专属:确认启动配置在哪一层
ls /boot/
ls /boot/firmware/ | head
test -f /boot/firmware/config.txt && echo "✅ 启动配置在 /boot/firmware/config.txt"
# 5. 虚拟目录:看一眼内核与硬件的实时窗口
cat /proc/version
cat /proc/device-tree/model; echo # 板子型号(1-2 提过)
awk '{printf "CPU温度: %.1f°C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp
# 6. 虚拟目录不占磁盘
du -sh /proc /sys 2>/dev/null
# 7. 谁在占磁盘:按分区看
df -h
# 8. 看挂载关系(比 df 更清楚:谁挂在哪一层)
findmnt --tree | head -n 20
# 9. 认一下几个「像」的目录
ls -d /usr/local /opt /srv /media /mnt 2>/dev/null
ls /etc | head -n 12
看到什么算成功:
| 步骤 | 预期 |
|---|---|
| 2 | 三行都以 l 开头,形如 /bin -> usr/bin |
| 3 | 两条命令的输出一模一样(除了路径那一行)——同一个文件 |
| 4 | /boot/ 里有 firmware;/boot/firmware/ 里有 config.txt、cmdline.txt;最后打印 ✅… |
| 5 | 版本信息;Raspberry Pi 4 Model B/5 Model B 之类的型号;CPU 温度是个 30~70 之间的数 |
| 6 | 输出基本是 0(虚拟目录不占空间) |
| 7 | 你会看到 /boot/firmware 单独占一个小分区(几百 MB)——这就是第四节那层结构的实证 |
| 8 | 树形结构里能看到 /、/boot/firmware、/proc、/sys 各自的挂载点 |
| 9 | 五个目录都在(/mnt 大多数时候是空的,正常) |
「读结果」提示:第 7、8 两步连起来看,你会第一次真切地看到「分区是怎么挂到树上的」——这比背目录表有用得多。
八、30 秒实验
验证「/tmp 是临时区、重启就清、而且现在还会自动清老文件」。
# 1. 在 /tmp 里放一个带标记的文件
echo "test" > /tmp/我的临时文件.txt
ls -l /tmp/我的临时文件.txt
# 2. 同时,在家目录放一个对照组
echo "test" > ~/我的正式文件.txt
# 3. 看一眼规则(Trixie 起 /tmp 的老文件会被自动清理)
systemctl status systemd-tmpfiles-clean --no-pager | head -n 6
# 4. 重启(这一步可选,做了就验证「重启清空」)
# sudo reboot
# 5. 重启回来后看两个文件
# ls /tmp/我的临时文件.txt → 应该没了
# ls ~/我的正式文件.txt → 还在
这 30 秒你收获的是:「临时」在 Linux 里是有明确边界的——/tmp 里的东西不保证活着,/home 里的才算你的。以后写脚本要用临时文件,就放 /tmp,别在家目录里堆垃圾。
(不想重启的话,跑完第 1、3 步,再 rm ~/我的正式文件.txt /tmp/我的临时文件.txt 收尾即可。)
九、常见误区
- 「Linux 也有 C 盘 D 盘」:没有盘符。全系统一棵树,分区和 U 盘都是「挂」到某个目录上的。
- 「
/usr是装用户文件的」:不是。「用户文件」在/home;/usr是 Unix System Resources——系统软件的家。 - 「
/bin和/usr/bin是两个目录,放的东西不一样」:现在是同一个(/bin是快捷方式)。老资料的说法已过期。 - 「树莓派的开机配置在
/boot/config.txt」:Bookworm 起是/boot/firmware/config.txt。改错路径等于没改(第四节)。 - 「
/proc和/sys是普通目录,可以随便放东西」:它们是内核的窗口,重启即变、不能存东西、某些文件写下去还会改硬件。 - 「
.txt和.TXT是同一个文件」:Linux 区分大小写。Notes和notes是两个不同文件。 - 「
du报/proc占 0 字节,是不是没挂上」:正常。虚拟目录本来就不占磁盘。 - 「
/mnt空着说明系统少了什么」:它就是留给管理员手动挂载用的,空着才正常。
自测三问
1. Linux 全系统的配置文件、日志、你自己的文件,分别在哪个目录下?(**配置=`/etc`;日志=`/var/log`(在 `/var` 下);你的文件=`/home/你的名字`(`~`)**) 2. 树莓派上要开一个硬件接口(如 I2C),该改哪个文件?(**`/boot/firmware/config.txt`**——不是 `/boot/config.txt`) 3. `/bin`、`/usr/bin` 是什么关系?(**`:bin` 只是指向 `/usr/bin` 的符号链接,同一个地方**;`/bin/bash` 和 `/usr/bin/bash` 是同一个文件)- ☐ 下一节(4-5 使用命令行安装和卸载应用程序)
相关笔记
- Linux 的常用指令 —— 上一节:
find、du、df怎么用(本节讲它们搜的范围) - 认识 Linux、终端机和桌面环境 —— 「一棵树、没有盘符」的入门版
- 安装 Raspberry Pi OS 至 microSD 卡 —— 烧录时看到的那个 boot 分区
- 树莓派的型号 ——
cat /proc/device-tree/model认板子的出处 - 🍓 树莓派 · 索引 —— 全课路线图