3. Linux 文件系统:目录结构、文件类型与路径
聊到 Linux 文件系统,我脑子里第一个蹦出来的词就是「树」。没错,整个 Linux 的世界就是一棵倒挂的树,根是 /,其他所有目录、文件都是这棵树上的枝叶。这个设计理念,说实话,简洁又优雅。
我记得刚入行那会儿,有个同事把 /etc 下的配置文件删了,结果系统起不来。他一脸懵地问我:「我就删了个文件啊?」嗯,从那以后,我养成了一个习惯——动手之前,先搞清楚你在哪个目录,这个目录是干嘛的。
3.1 目录结构:从根开始
Linux 的目录结构有标准,叫 FHS(Filesystem Hierarchy Standard)。说白了,就是大家约定好,什么东西放哪个位置。我挑几个最常用的目录讲讲。
| 目录 | 用途 | 避坑提醒 |
|---|---|---|
/ |
根目录,一切从这里开始 | 别往根目录乱塞文件,会乱 |
/etc |
系统配置文件集中营 | 我曾经手滑改过 /etc/passwd,差点把自己锁在外面 |
/var |
可变数据,日志、缓存、队列 | /var/log 日志爆满,磁盘写满,服务直接挂 |
/usr |
用户程序和数据,只读共享 | 别往 /usr 写临时文件,它设计成只读的 |
/home |
普通用户的家目录 | 用户数据都在这里,备份别漏了 |
/tmp |
临时文件,重启就清 | 别放重要数据,系统会定期清理 |
/opt |
第三方软件安装目录 | 我习惯把商业软件放这里,方便卸载 |
核心原则:/etc 管配置,/var 管数据,/usr 管程序。各司其职,别混着放。
3.2 文件类型:不只是「文件」和「文件夹」
你想想看,在 Windows 里,文件要么是普通文件,要么是文件夹。但在 Linux 里,文件类型有 7 种。我第一次用 ls -l 看到输出里有个 l 开头的东西,还以为是 bug。后来才知道,那是符号链接。
用 ls -l 看第一列的第一个字符,就能判断文件类型:
| 字符 | 类型 | 举例 |
|---|---|---|
- |
普通文件 | 文本、二进制、压缩包 |
d |
目录 | 就是文件夹 |
l |
符号链接 | 类似 Windows 的快捷方式 |
c |
字符设备 | 键盘、鼠标 |
b |
块设备 | 硬盘、U盘 |
s |
套接字 | 进程间通信 |
p |
命名管道 | 也是进程间通信 |
我的小技巧:用 file 命令查看文件真实类型。比如 file /bin/ls,它会告诉你这是 ELF 可执行文件,而不是只看扩展名。
3.3 绝对路径与相对路径
这个问题,我每次培训都要强调。很多新手搞混,结果脚本跑错目录,删错文件。说白了,就两句话:
- 绝对路径:从根
/开始写,完整、唯一。比如/etc/nginx/nginx.conf。 - 相对路径:从当前目录开始写,依赖当前位置。比如
./nginx.conf或../conf/nginx.conf。
举个例子。假设当前在 /home/user:
# 绝对路径,不管你在哪,都能找到
cat /etc/passwd
# 相对路径,依赖当前位置
cat ../../etc/passwd # 从 /home/user 往上两级到 /,再进 etc
我曾经踩过的坑:写脚本时用了相对路径,结果 cron 定时任务执行时,当前目录是 /,脚本里的 ./data 直接指向了根目录下的 data。从那以后,我所有脚本里的路径都写成绝对路径,或者先 cd 到明确目录。
3.4 知识结构图
下面这张图,把 Linux 文件系统的核心脉络画出来了。从根目录出发,到各个关键目录,再到文件类型和路径规则。我建议你把它存下来,忘了就瞄一眼。
3.5 实战:用命令感受文件系统
光说不练假把式。我带你走一遍常用命令,你可以在自己的机器上试试。
# 查看当前路径
pwd
# 列出根目录内容
ls -la /
# 查看文件类型
ls -l /etc/passwd
# 输出第一列是 -rw-r--r--,说明是普通文件
# 查看 /dev/sda 的设备类型
ls -l /dev/sda
# 输出第一列是 brw-rw----,说明是块设备
# 绝对路径 vs 相对路径
cd /var/log
cat /etc/hostname # 绝对路径
cat ../../etc/hostname # 相对路径,从 /var/log 往上两级
我的习惯:写脚本时,所有路径都用绝对路径。交互操作时,多用相对路径加 Tab 补全,省时间。另外,cd - 可以回到上一个目录,这个快捷键我一天能用几十次。
3.6 避坑总结
- 别在
/下乱建目录:系统升级时可能会被覆盖或冲突。 /tmp不是保险箱:重启就清,别放重要数据。- 符号链接别乱删:删了链接文件,源文件还在;但如果你删了源文件,链接就断了。
- 路径里别用空格:Linux 支持带空格的文件名,但脚本里处理起来很麻烦。我一般用下划线或连字符代替。
- 养成
ls -l先看一眼的习惯:确认文件类型和权限再动手,能省很多麻烦。
文件系统是 Linux 的骨架。骨架正了,上面的服务才能跑得稳。下一层,我们会聊文件权限和用户管理,到时候你会发现,权限和目录结构是配合着用的。