主题
Linux 文件系统
在 Linux 里,「一切皆文件」不是口号——硬盘是文件,键盘是文件,连进程信息都以文件形式存在。理解文件系统,等于拿到了 Linux 系统的地图。
目录结构 FHS
Linux 遵循 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),根目录是 /,所有内容都挂在它下面。
/
├── /bin -> usr/bin # 基本命令(ls、cp、mv 等)
├── /boot # 内核和启动文件
├── /dev # 设备文件(硬盘、键盘、终端...)
├── /etc # 系统配置文件(80% 的运维操作在这里)
├── /home # 普通用户的家目录(/home/username)
├── /lib -> usr/lib # 系统库文件
├── /media # 自动挂载的移动设备
├── /mnt # 临时手动挂载点
├── /opt # 第三方软件安装目录
├── /proc # 虚拟文件系统,进程和内核信息
├── /root # root 用户的家目录
├── /run # 运行时临时文件(重启后清空)
├── /sbin -> usr/sbin # 系统管理命令
├── /tmp # 临时文件(所有用户可写,重启可能清空)
├── /usr # 用户程序和数据(Unix System Resources)
└── /var # 可变数据(日志、缓存、数据库)重点记住这 5 个
/etc:所有配置在这里,改配置 90% 在操作/etc/home:你的文件在这里,备份数据优先备份这里/var:日志在这里,排查问题先看/var/log/tmp:临时文件,别把重要东西放这/proc:不是真实文件,是内核的窗口。cat /proc/cpuinfo看 CPU,cat /proc/meminfo看内存
文件类型
用 ls -l 看到的第一个字符就是文件类型:
| 首字符 | 类型 | 示例 |
|---|---|---|
- | 普通文件 | 文本、图片、二进制 |
d | 目录 | 文件夹 |
l | 软链接(符号链接) | 快捷方式 |
b | 块设备 | 硬盘 /dev/sda |
c | 字符设备 | 键盘、终端 /dev/tty |
s | Socket | 网络通信套接字 |
硬链接 vs 软链接
链接是 Linux 文件系统的核心概念,理解它就理解了文件存储的本质。
软链接(符号链接 Symbolic Link)
类似 Windows 的「快捷方式」。ln -s 源文件 链接名:
bash
ln -s /usr/local/nginx/conf/nginx.conf /etc/nginx.conf
# 现在 /etc/nginx.conf 指向实际文件,方便访问- 软链接有自己的 inode,只存了目标文件的路径
- 源文件删除后,软链接会变成「死链接」(变红)
- 可以跨文件系统
- 可以做目录链接
硬链接(Hard Link)
硬链接是文件内容的另一个名字。ln 源文件 链接名:
bash
echo "hello" > file1.txt
ln file1.txt file2.txt
# file1.txt 和 file2.txt 完全等价,指向同一数据块- 硬链接和源文件共享同一个 inode,地位完全平等
- 删除任何一个,数据仍存在,直到链接数为 0
- 不能跨文件系统
- 不能链接目录(防止循环引用)
怎么理解 inode
inode 是文件的身份证号,存储文件的元数据(权限、大小、位置),但不包括文件名。文件名只是 inode 的标签。ls -i 可以查看文件的 inode 号。如果两个文件的 inode 号相同,说明它们是硬链接关系——这本质上不是两个文件,而是同一个文件有多个名字。
文件权限
这是 Linux 安全模型的基础。ls -l 的输出:
bash
-rwxr-xr-- 1 user group 4096 Jul 26 10:00 script.sh分解来看:
| 部分 | 含义 |
|---|---|
- | 文件类型(- 普通文件) |
rwx | 所有者权限(Owner) |
r-x | 所属组权限(Group) |
r-- | 其他人权限(Others) |
user | 文件所有者 |
group | 文件所属组 |
rwx 含义
| 权限 | 文件 | 目录 |
|---|---|---|
r(read 读) | 可以查看文件内容 | 可以列出目录下的文件(ls) |
w(write 写) | 可以修改文件内容 | 可以在目录中创建/删除文件 |
x(execute 执行) | 可以执行这个文件 | 可以进入这个目录(cd) |
chmod 修改权限
两种方式:数字和符号。
数字方式(推荐):r=4, w=2, x=1
bash
chmod 755 script.sh # rwxr-xr-x(所有者全权限,其他人读+执行)
chmod 644 file.txt # rw-r--r--(所有者读写,其他人只读)
chmod 600 secret.key # rw-------(只有所有者能读写,最安全)
chmod 700 private/ # rwx------(只有所有者能进入的目录)符号方式:u=所有者, g=所属组, o=其他人, a=全部
bash
chmod u+x script.sh # 给所有者加执行权限
chmod g-w file.txt # 移除所属组的写权限
chmod o= file.txt # 清空其他人的所有权限
chmod a+r *.txt # 所有人可读所有 txt 文件chown / chgrp 修改归属
bash
chown user:group file # 同时改所有者和所属组
chown -R www:www /var/www # 递归修改整个目录
chgrp devops file # 只改所属组不是 chmod 777 就能解决一切
新手常见错误:权限不对就 chmod 777。这会打开安全漏洞——任何人都能修改你的文件。正确的做法是分析谁需要什么权限,精准授权。原则是「最小权限」:够用就好,不多给。
mount / umount
Linux 中没有「C 盘」「D 盘」的概念,所有设备都挂载到目录树中:
bash
mount # 查看所有挂载
mount /dev/sdb1 /mnt/data # 把硬盘分区挂载到 /mnt/data
umount /mnt/data # 卸载挂载通俗理解
想象 Linux 的目录树是一棵大树,mount 就是把一块新硬盘(或 U 盘)「嫁接」到树上某个枝桠。之后访问那个目录,实际读写的就是这块硬盘。
df / du 查看磁盘空间
bash
df -h # 各分区的磁盘使用情况(-h 人类可读)
df -i # inode 使用情况(创建不了文件?可能是 inode 满了)
du -sh /var/log # 目录总大小
du -sh * # 当前目录下各子目录的大小
du -sh * | sort -hr # 按大小排序,找出占空间大户实操示例
bash
# 1. 创建目录并设置权限
mkdir -p /tmp/lab/private
chmod 700 /tmp/lab/private
# 2. 创建软链接(方便访问带版本号的目录)
mkdir /opt/myapp-1.2.3
ln -s /opt/myapp-1.2.3 /opt/myapp # 升级只需改软链接指向
# 3. 创建硬链接理解 inode
echo "data" > a.txt
ln a.txt b.txt
ls -li a.txt b.txt # 观察 inode 号相同
# 4. 排查磁盘空间
df -h # 先看哪个分区满了
du -sh /* 2>/dev/null # 再找哪个目录占空间
# 逐个深入,定位大文件小结
/是根,/etc管配置,/home管数据,/var管日志- 软链接是快捷方式,硬链接是文件内容的另一个名字
- 权限 = r(4) + w(2) + x(1),分所有者-所属组-其他人三组
mount把设备嫁接到目录树,df/du看磁盘- 别滥用
chmod 777,最小权限原则
掌握了文件系统,接下来就可以放心地探索 Linux 的各个角落了。
🎯 本章要点
- 系统配置在 /etc,日志在 /var/log,系统信息在 /proc
- /proc 是虚拟文件系统,反映内核和进程实时状态
- 排故优先看 /etc、/var/log、/proc 三个目录
加载练习题中...