Linux: 文件系统导航——ls / cd / pwd 与目录结构

Linux 将所有文件和目录组织成一棵以 /(根)为起点的树。这棵树叫文件系统层次结构(Filesystem Hierarchy Standard,FHS)。

📋 前置知识:需要先掌握以下内容

1. 你将学到


2. 一个迷路的新手故事

(1) 痛点:面对目录树不知自己在哪

小明第一次登录服务器,面对根目录 / 被一堆陌生目录名吓到了:/bin/etc/var/usr……他不知道每个目录是干什么的,也不知道自己当前在哪。

(2) 三张地图

资深工程师 Bob 画出三张"地图":

BASH
# 地图 1:我在哪?
pwd
# 输出:/home/charlie

# 地图 2:这里有什么?
ls
# 输出:Desktop  Documents  Downloads

# 地图 3:去那里看看?
cd /etc

(3) 收益:自由导航

小明明白了三个命令的关系:pwd 定位当前位置,ls 查看环境,cd 前往目标。他从此能在任何 Linux 服务器的文件系统中自由穿梭。


3. 知识点讲解

(1) FHS 标准目录速查

Linux 的目录结构有统一标准。你不需要记住所有目录,但这几个必须了解:

💡 提示:FHS(Filesystem Hierarchy Standard)的核心原则是"按功能分区"——/etc 放配置、/var 放可变数据、/usr 放用户程序。理解这个逻辑后,即使忘记具体目录,也能根据功能推断文件大概在哪个目录下。

目录 含义 用途
/ 根目录 文件系统的起点,所有路径从这里开始
/home 用户家目录 每个用户的个人文件存放在这里(如 /home/alice
/etc 配置文件 系统配置文件和守护进程配置(如 Nginx、SSH)
/var 可变数据 日志(/var/log)、数据库、缓存数据
/tmp 临时文件 重启后自动清空的临时目录

ℹ️ 说明/tmp 在系统重启后通常会被清空(现代系统使用 tmpfs,将 /tmp 存在内存中)。因此不要在 /tmp 中存放重要数据或长时间需要的文件——它只适合临时中转。 | /usr | 用户系统资源 | 系统程序和库文件(/usr/bin/usr/lib)| | /bin | 基础命令 | lscpmv 等基本命令 | | /opt | 可选软件 | 第三方软件安装目录 |

(2) 绝对路径 vs 相对路径

类型 特点 示例
绝对路径 / 开头,从根开始 /home/alice/Documents/report.md
相对路径 以当前目录为起点 Documents/report.md(当前在 /home/alice 时)
TEXT 📖 仅展示
# 当前在 /home/alice
# 使用绝对路径
cd /etc/nginx

# 使用相对路径(效果相同,从当前目录出发)
cd ../../../etc/nginx

(3) ... 的特殊含义

符号 含义
. 当前目录
.. 上一级目录
~ 当前用户的家目录
~alice 用户 alice 的家目录
- 上一个目录(cd 专用)
💡 提示cd - 可以快速切换回上一个工作目录,在两个目录间来回切换时非常方便——比如你在 /var/log/etc/nginx 之间频繁切换,每次只需 cd - 即可跳转。

TEXT 📖 仅展示
# 当前在 /home/alice/projects
cd .       # 不移动(还在当前目录)
cd ..      # 移动到 /home/alice
cd ../..   # 移动到 /home
cd ~       # 移动到 /home/alice
cd -       # 回到上一个目录

(4) ls 的常用选项

TEXT 📖 仅展示
# 基本用法
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]* 匹配不以字母开头的文件
BASH
# 通配符示例
ls *.md                # 列出所有 Markdown 文件
ls file?.txt           # 列出 file1.txt、file2.txt 等
ls [abc]*              # 列出以 a、b、c 开头的文件
ls [0-9]*              # 列出以数字开头的文件

▶ 示例:pwd——告诉我你在哪

BASH
# 只要不确定当前位置,就用 pwd
pwd
# 输出:/home/alice

# 切换到不同目录后再试
cd /etc
pwd
# 输出:/etc

输出:

TEXT 📖 仅展示
/home/alice
/etc

▶ 示例:cd——带我穿梭目录

TEXT 📖 仅展示
# 回家
cd ~

# 回到上一个目录
cd /etc
cd /var/log
cd -    # 回到 /etc

# 到根目录
cd /

# 到指定用户的家目录
cd ~alice

▶ 示例:ls——让我看看这里有什么

TEXT 📖 仅展示
# 简洁模式
ls /etc

# 长格式(包含权限、大小、修改时间)
ls -l /etc

# 显示隐藏文件
ls -la ~

# 人性化大小
ls -lh /var/log

# 递归查看
ls -R ~/projects | head -20

# 按文件大小排序(最大的在前)
ls -lhS /var/log

▶ 示例:隐藏文件

在 Linux 中,任何以 . 开头的文件或目录都是隐藏的。ls 默认不显示它们。

BASH
# 查看家目录下的隐藏文件
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

▶ 示例:通配符实战

TEXT 📖 仅展示
# 列出所有 .log 文件
ls -la /var/log/*.log

# 列出名字以 access 开头的文件
ls -la /var/log/access*

# 删除所有 .tmp 文件
rm *.tmp

# 复制所有 .jpg 文件到另一个目录
cp *.jpg ~/Pictures/

▶ 综合示例:文件系统探险

BASH
# 小明的第一次文件系统探险之旅

# 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 环境变量。


📖 小节


📝 作业

  1. 基础题(难度⭐):用 pwd 确认当前位置,然后用 cd / 跳到根目录,再用 ls -la / 列出所有文件
  2. 进阶题(难度⭐⭐):用 cd ~ 回家查看隐藏文件,然后到 /var/log 查看日志目录,用 cd - 在两个目录间切换,最后用通配符 ls *.conf/etc 中查找配置文件
  3. 挑战题(难度⭐⭐⭐):绘制你系统根目录下的目录结构图(至少包含 5 个 FHS 标准目录),并标注每个目录的用途和是否可写
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏