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 文件系统的核心脉络画出来了。从根目录出发,到各个关键目录,再到文件类型和路径规则。我建议你把它存下来,忘了就瞄一眼。

Linux 文件系统核心结构 / 根目录 /etc 配置文件 /var 可变数据 /usr 用户程序 /home 用户家 nginx.conf, passwd log, cache, spool bin, lib, share user1, user2 文件类型(ls -l 第一列) - 普通文件 d 目录 l 符号链接 c 字符设备 b 块设备 s 套接字 p 命名管道 路径规则 绝对路径:从 / 开始 相对路径:从当前位置开始

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 的骨架。骨架正了,上面的服务才能跑得稳。下一层,我们会聊文件权限和用户管理,到时候你会发现,权限和目录结构是配合着用的。