欢迎来到罐子的实验室
建立「文件系统是一棵树」「路径是地址」的核心心智模型,能在任意位置精准定位文件。
学完你能做什么:
1. 文件系统是一棵树
Linux 的所有文件和目录,组织成一棵倒挂的树。这棵树的「根」是一个目录,写作单独一个斜杠 /,叫做根目录(root directory)。
/ ← 根目录├── home/ ← 用户家目录的总目录│ ├── user/ ← user 的家目录│ └── alice/├── etc/ ← 系统配置文件├── usr/│ └── bin/ ← 大量可执行程序├── tmp/ ← 临时文件└── ...
关键点:
- 根目录是
/,不是C:\。Linux 没有盘符概念,整个系统只有一个根。 - 每个目录里可以装文件和子目录,子目录又可以再套子目录,层层嵌套。
- 你通过**路径(path)**来引用任何一个文件或目录。
2. 路径:从根说起
路径就是「到达某个文件的路线说明」。从根目录 / 开始的路径,叫绝对路径(absolute path),因为它不管你在哪、结果都一样。
比如 /home/user 表示:从根 / 进去,先到 home,再到 user。每一段之间用 / 分隔。
user@host:~$ echo /home/user/home/user
💡 注意 / 的双重身份:路径开头的 / 表示「根目录」,路径中间的 / 表示「目录分隔符」。看到 /home/user 时,开头的 / 是根,后面的两个 / 是分隔。
动手练习 1:认识根目录
任务:列出根目录 / 下面有哪些东西。
思路引导:列出目录内容的命令是 ls,把目录路径作为参数传给它(ls 详见《03》,这里先用一下)。
参考答案:
user@host:~$ ls /bin boot dev etc home lib lib64media mnt opt proc root run sbinsrv sys tmp usr var
(你的机器上看到的可能略有不同。)这些都是根目录下的子目录,每个都有专门用途,比如:
常见错误:把 ls / 误写成 ls // 或 ls /\——多打斜杠会报错或行为异常。
3. 切换目录:cd 与当前工作目录
每个正在运行的程序(包括你的 Shell)都有一个当前工作目录(cwd),可以理解为「你现在站在哪个目录里」。
用 cd(change directory)命令切换:
user@host:~$ cd /etcuser@host:/etc$# 注意提示符变了,现在显示 /etc
注意:提示符里的目录部分会跟着变,这就是 ~ 之所以是 ~ 的原因——它代表「家目录」。
切回根目录试试:
user@host:/etc$ cd /user@host:/$
pwd:我在哪?
如果提示符没显示完整路径(比如只显示 ~),你想确切知道自己在哪,用 pwd(print working directory):
user@host:~$ pwd/home/user
——原来 ~ 就是 /home/user 的简写。
动手练习 2:穿梭与定位
任务:
思路引导:cd /etc → pwd → cd ~(或直接 cd,不带参数默认回家)。
参考答案:
user@host:~$ cd /etcuser@host:/etc$ pwd/etcuser@host:/etc$ cduser@host:~$
💡 cd 不带参数 = cd ~ = 回家。这是最常用的快捷方式之一。
常见错误:
- ❌
cd etc(没加 /)——Shell 会去当前目录里找叫 etc 的子目录,而当前目录里通常没有,于是报 No such file or directory。想从根开始,必须写 /etc。 - ⚠️ 大小写敏感:
/etc 正确,/ETC 不存在。
4. 绝对路径 vs 相对路径
绝对路径:从根 / 开始,全世界唯一,与你在哪无关。例:/home/user/docs/report.txt。
相对路径:从当前工作目录开始,你在不同地方写同一个相对路径,指向的文件可能完全不同。
假设目标文件是 /tmp/a/b/my_file:
| |
|---|
/ | tmp/a/b/my_file |
/tmp | a/b/my_file |
/tmp/a/b | my_file |
判断方法很简单:以 / 开头 = 绝对路径,不以 / 开头 = 相对路径。
动手练习 3:体会相对
任务:你现在在家目录 /home/user。
- 再用相对路径(不带开头的
/)切回 home/user(提示:从 /tmp 出发,相对路径是 ../home/user,下节解释 ..)。
思路引导:cd /tmp 是绝对的;cd ../home/user 中 .. 表示「上一级」,从 /tmp 上一级是 /,再进 home 进 user。
参考答案:
user@host:~$ cd /tmpuser@host:/tmp$ cd ../home/useruser@host:~$
常见错误:分不清时,就用绝对路径——绝对路径永远正确,新手初期建议多用绝对路径。
5. 两个特殊目录:. 和 ..
每个目录里(哪怕它空无一物)都隐含着两个「虚拟条目」:
用 ls -a 能看到它们(-a 表示 all,详见《模块 03》):
user@host:~$ cd /tmpuser@host:/tmp$ ls -a. .. somefile.txt
. 和 .. 不是真实文件,而是路径中的「指路标」。比如你在家目录 /home/user:
这两条等价的命令都表示「切到家目录」(一个绝对,一个相对):
user@host:/tmp$ cd /home/useruser@host:~$ cd /tmpuser@host:/tmp$ cd ../home/useruser@host:~$
. 单独用似乎没意义,但它有妙用——比如「运行当前目录下的某个脚本」(详见《模块 11》):./my_script。
动手练习 4:上下楼梯
任务:从家目录 /home/user 出发:
思路引导:每次 cd .. 上升一级。
参考答案:
user@host:~$ pwd/home/useruser@host:~$ cd ..user@host:/home$ cd ..user@host:/$ pwd/
常见错误:
- ❌
cd . —— 切到「当前目录」,等于没切。它本身不报错,只是没意义(特定场景才有用)。 - ⚠️ 不要把
.. 和 ./ 搞混:.. 是上一级,./ 是当前目录。
6. 家目录 ~:你最常待的地方
每个用户都有一个家目录(home directory),普通用户的家目录通常在 /home/用户名。比如你是 user,家目录就是 /home/user。
Shell 启动时默认把你放在家目录,所以提示符里的 ~ 就是它。~ 是家目录的简写:
user@host:~$ echo ~/home/useruser@host:~$ cd /tmpuser@host:/tmp$ cd ~# 用 ~ 回家user@host:~$ cd ~/Documents# 家目录下的 Documents 子目录user@host:~/Documents$
注意:~ 只在路径开头才会被展开成家目录。~/~ 会被理解成「家目录下叫 ~ 的文件」,而不是「家目录的家目录」。
动手练习 5:用 ~ 导航
任务:
参考答案:
user@host:~$ cd /tmpuser@host:/tmp$ cd ~user@host:~$ echo ~/home/user
常见错误:把 ~ 当成「根目录」——不是!~ 是家目录,/ 才是根。
速查表
| | |
|---|
pwd | | pwd |
cd 路径 | | cd /etc |
cd | | cd |
cd ~ | | cd ~ |
cd .. | | cd .. |
/ | | /home/user |
. | | ./script.sh |
.. | | cd ../.. |
~ | | cd ~/Documents |
绝对 vs 相对 一图流
绝对路径: /home/user/docs/report.txt ← 从 / 开始,唯一确定相对路径: docs/report.txt ← 从当前目录开始,取决于你在哪 ../user/docs/report.txt ← 用 .. 也能写相对路径
下一步
现在你知道「自己在哪、文件在哪」了。但光知道地址还不够——你得能查看、创建、删除、搬动文件。