🗂️ 文件系统
大家好,我是长安!这一章给大家讲讲 Linux 的文件系统,理解了目录结构,你才能在 Linux 的世界里游刃有余。
🎯 本章目标
跟着长安读完这一章,你将了解:
- Linux 文件系统的目录结构
- 各个重要目录的用途
- 绝对路径和相对路径的区别
🌲 目录树结构
Linux 的文件系统就像一棵倒过来的树:
/ ← 根目录(树根)
├── bin ← 基本命令
├── boot ← 启动文件
├── dev ← 设备文件
├── etc ← 配置文件
├── home ← 用户主目录
│ ├── xiaoming ← 小明的家
│ └── xiaohong ← 小红的家
├── lib ← 库文件
├── media ← 可移动设备挂载点
├── mnt ← 临时挂载点
├── opt ← 可选软件
├── proc ← 进程信息
├── root ← root用户的家
├── sbin ← 系统命令
├── srv ← 服务数据
├── sys ← 系统信息
├── tmp ← 临时文件
├── usr ← 用户软件
│ ├── bin ← 用户命令
│ ├── lib ← 用户库
│ └── local ← 本地软件
└── var ← 可变数据
└── log ← 日志文件
💡 和 Windows 的区别
Windows:有 C 盘、D 盘、E 盘...每个盘有自己的根目录
Linux:只有一个根目录 /,所有东西都在这棵树下面
📁 重要目录详解
/ - 根目录
一切的起点!所有文件和目录都在这里面。
cd /
ls
/home - 用户的家
普通用户的"家"目录都在这里。
# 小明的主目录
/home/xiaoming
# 你的主目录可以用 ~ 表示
cd ~
# 等同于
cd /home/你的用户名
每个用户在自己的家目录里可以随便折腾,不会影响其他用户。
/root - root 用户的家
超级管理员(root)的主目录。普通用户一般进不去。
ls /root
# 可能会提示:Permission denied(权限不足)
/etc - 配置文件大本营
几乎所有软件的配置文件都在这里。
# 常见的配置文件
/etc/passwd # 用户信息
/etc/shadow # 用户密码(加密的)
/etc/group # 用户组信息
/etc/hostname # 主机名
/etc/hosts # 域名解析
/etc/fstab # 磁盘挂载配置
/etc/apt/ # APT 软件源配置
⚠️ 注意
修改 /etc 下的文件要小心,改错了可能导致系统出问题! 修改前最好先备份:
sudo cp /etc/some.conf /etc/some.conf.backup
/var - 可变数据
存放经常变化的数据,比如日志、缓存等。
# 常见目录
/var/log # 系统日志
/var/cache # 缓存
/var/tmp # 临时文件(比 /tmp 保留时间更长)
/var/www # 网站文件(如果装了 Web 服务器)
/tmp - 临时文件
任何用户都可以在这里放临时文件。系统重启后会被清空。
# 可以在这里做实验
cd /tmp
touch test.txt
/usr - 用户程序
大部分用户安装的软件都在这里。
/usr/bin # 用户命令
/usr/sbin # 系统管理命令
/usr/lib # 库文件
/usr/local # 手动安装的软件
/usr/share # 共享数据
/bin 和 /sbin - 基本命令
/bin:所有用户都能用的基本命令(ls、cp、mv 等)/sbin:系统管理员用的命令(fdisk、ifconfig 等)
🤓 现代 Linux 的变化
在新版本的 Ubuntu 中,/bin 实际上是指向 /usr/bin 的符号链接。这是为了简化目录结构。
ls -l /bin
# 输出:lrwxrwxrwx 1 root root 7 /bin -> usr/bin
/dev - 设备文件
Linux 中"一切皆文件",硬件设备也是以文件形式存在的。
/dev/sda # 第一块硬盘
/dev/sda1 # 第一块硬盘的第一个分区
/dev/sdb # 第二块硬盘(如 U 盘)
/dev/null # 黑洞设备(丢弃所有写入的数据)
/dev/zero # 零设备(读取时返回无限的 0)
/dev/random # 随机数生成器
💡 有趣的用法
# 把输出丢进黑洞(不显示)
command > /dev/null
# 生成一个 1MB 的空文件
dd if=/dev/zero of=emptyfile bs=1M count=1
/proc - 虚拟文件系统
这个目录是"虚拟"的,不占用磁盘空间。它提供了查看系统运行时信息的接口。
# 查看 CPU 信息
cat /proc/cpuinfo
# 查看内存信息
cat /proc/meminfo
# 查看进程信息(1 是进程号)
ls /proc/1
# 查看系统版本
cat /proc/version
/media 和 /mnt - 挂载点
/media:自动挂载的设备(如 U 盘、光盘)/mnt:临时手动挂载点
# 插入 U 盘后,通常会自动挂载到
/media/你的用户名/U盘名称
🛤️ 路径
绝对路径
从根目录 / 开始的完整路径。
/home/xiaoming/Documents/file.txt
特点:
- 以
/开头 - 不管你在哪,都能准确定位
- 比较长
相对路径
相对于当前目录的路径。
# 假设你在 /home/xiaoming
cd Documents # 进入 Documents
cat ./file.txt # 当前目录的 file.txt
cat ../other.txt # 上级目录的 other.txt
特点:
- 不以
/开头 - 取决于你当前在哪
- 比较短
举个例子
假设目录结构是这样的:
/home/xiaoming/
├── Documents/
│ ├── work/
│ │ └── report.txt
│ └── notes.txt
└── Pictures/
└── photo.jpg
你现在在 /home/xiaoming/Documents/work/ 目录:
| 目标 | 绝对路径 | 相对路径 |
|---|---|---|
| report.txt | /home/xiaoming/Documents/work/report.txt | ./report.txt 或 report.txt |
| notes.txt | /home/xiaoming/Documents/notes.txt | ../notes.txt |
| photo.jpg | /home/xiaoming/Pictures/photo.jpg | ../../Pictures/photo.jpg |
🔗 链接
Linux 中有两种链接:硬链接和软链接(符号链接)。
软链接(符号链接)
类似 Windows 的快捷方式。
# 创建软链接
ln -s /path/to/original /path/to/link
# 示例
ln -s /home/xiaoming/Documents ~/docs
# 查看软链接
ls -l ~/docs
# 输出:lrwxrwxrwx ... docs -> /home/xiaoming/Documents
硬链接
相当于给文件取了个别名,指向同一块数据。
# 创建硬链接
ln /path/to/original /path/to/link
🤔 软链接 vs 硬链接
| 特性 | 软链接 | 硬链接 |
|---|---|---|
| 可以链接目录 | ✅ 可以 | ❌ 不行 |
| 可以跨文件系统 | ✅ 可以 | ❌ 不行 |
| 原文件删除后 | 链接失效 | 链接仍有效 |
| 文件大小 | 很小 | 与原文件相同 |
新手一般只需要会用软链接就够了!
📏 文件类型
用 ls -l 查看时,第一个字符表示文件类型:
| 字符 | 类型 | 说明 |
|---|---|---|
- | 普通文件 | 文本、图片、程序等 |
d | 目录 | Directory |
l | 符号链接 | 软链接 |
c | 字符设备 | 键盘、终端等 |
b | 块设备 | 硬盘、U盘等 |
s | 套接字 | 网络通信 |
p | 管道 | 进程通信 |
🎯 实战练习
试着回答这些问题:
- 你的主目录在哪里?
echo $HOME
# 或
cd ~
pwd
- 系统日志在哪里?
ls /var/log
- 查看系统有多少个 CPU 核心?
cat /proc/cpuinfo | grep processor
- 创建一个软链接
# 在桌面创建一个指向 Documents 的快捷方式
ln -s ~/Documents ~/Desktop/我的文档
📝 本章小结
| 目录 | 用途 | 记忆技巧 |
|---|---|---|
/ | 根目录 | 一切的起点 |
/home | 用户主目录 | 你的"家" |
/etc | 配置文件 | Etc = Editable Text Configuration |
/var | 可变数据 | Variable |
/tmp | 临时文件 | Temporary |
/usr | 用户程序 | User |
/bin | 基本命令 | Binary |
/dev | 设备文件 | Device |
/proc | 进程信息 | Process |
💡 记忆口诀
"回家吃饭,变得临时有用"
- 回家(/home)
- 吃(/etc)
- 饭(/var)
- 变得(/dev)
- 临时(/tmp)
- 有用(/usr)
🚀 下一步
了解了文件系统结构,接下来跟着长安学习 文件操作 的更多技巧!
—— 编程指南社区 · 长安
