Linux: 文件系统导航——ls / cd / pwd 与目录结构
Linux 将所有文件和目录组织成一棵以 /(根)为起点的树。这棵树叫文件系统层次结构(Filesystem Hierarchy Standard,FHS)。
📋 前置知识:需要先掌握以下内容
- 第3课:终端入门
1. 你将学到
- pwd / cd / ls 三大导航命令
- FHS 标准目录结构
- 绝对路径 vs 相对路径
.和..的特殊含义- 通配符与隐藏文件
2. 一个迷路的新手故事
(1) 痛点:面对目录树不知自己在哪
小明第一次登录服务器,面对根目录 / 被一堆陌生目录名吓到了:/bin、/etc、/var、/usr……他不知道每个目录是干什么的,也不知道自己当前在哪。
(2) 三张地图
资深工程师 Bob 画出三张"地图":
# 地图 1:我在哪?
pwd
# 输出:/home/charlie
# 地图 2:这里有什么?
ls
# 输出:Desktop Documents Downloads
# 地图 3:去那里看看?
cd /etc
(3) 收益:自由导航
小明明白了三个命令的关系:pwd 定位当前位置,ls 查看环境,cd 前往目标。他从此能在任何 Linux 服务器的文件系统中自由穿梭。
3. 知识点讲解
(1) FHS 标准目录速查
Linux 的目录结构有统一标准。你不需要记住所有目录,但这几个必须了解:
/etc 放配置、/var 放可变数据、/usr 放用户程序。理解这个逻辑后,即使忘记具体目录,也能根据功能推断文件大概在哪个目录下。
| 目录 | 含义 | 用途 |
|---|---|---|
/ |
根目录 | 文件系统的起点,所有路径从这里开始 |
/home |
用户家目录 | 每个用户的个人文件存放在这里(如 /home/alice) |
/etc |
配置文件 | 系统配置文件和守护进程配置(如 Nginx、SSH) |
/var |
可变数据 | 日志(/var/log)、数据库、缓存数据 |
/tmp |
临时文件 | 重启后自动清空的临时目录 |
ℹ️ 说明:
/tmp在系统重启后通常会被清空(现代系统使用 tmpfs,将/tmp存在内存中)。因此不要在/tmp中存放重要数据或长时间需要的文件——它只适合临时中转。 |/usr| 用户系统资源 | 系统程序和库文件(/usr/bin、/usr/lib)| |/bin| 基础命令 |ls、cp、mv等基本命令 | |/opt| 可选软件 | 第三方软件安装目录 |
(2) 绝对路径 vs 相对路径
| 类型 | 特点 | 示例 |
|---|---|---|
| 绝对路径 | 以 / 开头,从根开始 |
/home/alice/Documents/report.md |
| 相对路径 | 以当前目录为起点 | Documents/report.md(当前在 /home/alice 时) |
# 当前在 /home/alice
# 使用绝对路径
cd /etc/nginx
# 使用相对路径(效果相同,从当前目录出发)
cd ../../../etc/nginx
(3) . 和 .. 的特殊含义
| 符号 | 含义 |
|---|---|
. |
当前目录 |
.. |
上一级目录 |
~ |
当前用户的家目录 |
~alice |
用户 alice 的家目录 |
- |
上一个目录(cd 专用) |
cd - 可以快速切换回上一个工作目录,在两个目录间来回切换时非常方便——比如你在 /var/log 和 /etc/nginx 之间频繁切换,每次只需 cd - 即可跳转。
# 当前在 /home/alice/projects
cd . # 不移动(还在当前目录)
cd .. # 移动到 /home/alice
cd ../.. # 移动到 /home
cd ~ # 移动到 /home/alice
cd - # 回到上一个目录
(4) ls 的常用选项
# 基本用法
ls # 列出文件名(简洁)
ls -l # 长格式(权限/所有者/大小/时间)
ls -a # 显示所有文件(包括 . 开头隐藏文件)
ls -la # 常用组合
ls -lh # 人性化显示文件大小(KB/MB/GB)
ls -R # 递归列出子目录
ls -S # 按文件大小排序
ls -t # 按修改时间排序
(5) 通配符(Wildcards)
| 通配符 | 匹配规则 | 示例 |
|---|---|---|
* |
任意数量字符 | *.txt 匹配所有 .txt 结尾的文件 |
? |
单个字符 | file?.md 匹配 file1.md、file2.md |
[abc] |
集合中任意一个 | file[12].md 匹配 file1.md / file2.md |
[!abc] |
排除集合 | [!a-z]* 匹配不以字母开头的文件 |
# 通配符示例
ls *.md # 列出所有 Markdown 文件
ls file?.txt # 列出 file1.txt、file2.txt 等
ls [abc]* # 列出以 a、b、c 开头的文件
ls [0-9]* # 列出以数字开头的文件
▶ 示例:pwd——告诉我你在哪
# 只要不确定当前位置,就用 pwd
pwd
# 输出:/home/alice
# 切换到不同目录后再试
cd /etc
pwd
# 输出:/etc
输出:
TEXT 📖 仅展示/home/alice /etc
▶ 示例:cd——带我穿梭目录
# 回家
cd ~
# 回到上一个目录
cd /etc
cd /var/log
cd - # 回到 /etc
# 到根目录
cd /
# 到指定用户的家目录
cd ~alice
▶ 示例:ls——让我看看这里有什么
# 简洁模式
ls /etc
# 长格式(包含权限、大小、修改时间)
ls -l /etc
# 显示隐藏文件
ls -la ~
# 人性化大小
ls -lh /var/log
# 递归查看
ls -R ~/projects | head -20
# 按文件大小排序(最大的在前)
ls -lhS /var/log
▶ 示例:隐藏文件
在 Linux 中,任何以 . 开头的文件或目录都是隐藏的。ls 默认不显示它们。
# 查看家目录下的隐藏文件
ls -la ~
# 常见的隐藏文件和目录
# .bashrc bash 配置
# .bash_profile 登录 Shell 配置
# .gitconfig Git 配置
# .ssh/ SSH 密钥和配置
# .vimrc vim 配置
输出:
TEXT 📖 仅展示total 48 drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 . drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 .. -rw-r--r-- 1 alice alice 220 Jul 8 10:23 .bash_logout -rw-r--r-- 1 alice alice 3771 Jul 8 10:23 .bashrc -rw-r--r-- 1 alice alice 807 Jul 8 10:23 .profile drwx------ 2 alice alice 4096 Jul 8 10:23 .ssh -rw-r--r-- 1 alice alice 256 Jul 8 10:23 .vimrc
▶ 示例:通配符实战
# 列出所有 .log 文件
ls -la /var/log/*.log
# 列出名字以 access 开头的文件
ls -la /var/log/access*
# 删除所有 .tmp 文件
rm *.tmp
# 复制所有 .jpg 文件到另一个目录
cp *.jpg ~/Pictures/
▶ 综合示例:文件系统探险
# 小明的第一次文件系统探险之旅
# 1. 她在哪?
pwd
# 2. 看看根目录有什么
ls -la /
# 3. 去 /etc 看看系统配置
cd /etc
ls | head -20
# 4. 去 /var/log 看日志
cd /var/log
ls -lhS | head -10 # 最大的 10 个日志文件
# 5. 回自己家
cd ~
ls -la
# 6. 看看桌面有什么
ls -la ~/Desktop
❓ 常见问题
Q:
/和~有什么区别? A:/是根目录,整棵树的最顶层。~是当前用户的家目录(通常是/home/用户名)。根目录只有一个,家目录每个用户都有自己的。
Q:
.开头的文件为什么是隐藏的? A: 约定俗成的做法——以.开头表示"配置文件"或"系统文件",用户日常不需要看到它们。这样可以减少ls输出的噪音。
Q:
ls -l输出中第一列的drwxr-xr-x是什么意思? A: 第一个字符是文件类型(d目录、-普通文件、l链接)。后面 9 个字符分三组:文件所有者(user)权限 3 位、所属组(group)权限 3 位、其他人(other)权限 3 位。r=读、w=写、x=执行。
Q:
/tmp目录的文件重启后会消失吗? A: 默认会。许多系统在启动时清理/tmp。因此/tmp适合存放临时文件,不要放重要数据。
Q: 路径太长怎么快速切换? A: 用 Tab 补全(输前几个字符按 Tab)、用
cd -回退、用pushd/popd管理目录栈、用CDPATH环境变量。
📖 小节
pwd显示当前位置、cd切换目录、ls列出内容——三个命令走天下- FHS 标准目录:
/home用户家、/etc配置、/var日志、/tmp临时 - 绝对路径以
/开头,相对路径以当前目录为起点 ..上级目录、.当前目录、~家目录*匹配任意、?匹配单字符——批量操作的利器
📝 作业
- 基础题(难度⭐):用
pwd确认当前位置,然后用cd /跳到根目录,再用ls -la /列出所有文件 - 进阶题(难度⭐⭐):用
cd ~回家查看隐藏文件,然后到/var/log查看日志目录,用cd -在两个目录间切换,最后用通配符ls *.conf在/etc中查找配置文件 - 挑战题(难度⭐⭐⭐):绘制你系统根目录下的目录结构图(至少包含 5 个 FHS 标准目录),并标注每个目录的用途和是否可写