欢迎光临
我们一直在努力

Linux 文件系统详解:为什么说一切皆文件?[从零开始学Linux 第二篇]

刚开始使用 Linux 时,你可能会发现:Windows 通常使用 C:\\、D:\\ 这样的盘符组织文件,而 Linux 却从一个 / 开始,所有目录都挂在它下面。

这就是 Linux 文件系统的一个重要特点:采用统一的树形目录结构,以根目录 / 作为整个目录树的起点。

在这里插入图片描述

1. 什么是文件系统?

文件系统(File System)是操作系统用来组织、存储和管理数据的一套机制。它负责管理文件和目录,并处理文件的命名、读写、权限以及空间分配等问题。

Linux 可以使用 ext4、XFS、Btrfs 等不同文件系统。它们是具体的文件系统类型,而 /home、/etc 这些则是目录路径,不要把两者混为一谈。

2. Linux 为什么只有一个根目录?

Linux 使用统一的目录树结构,最顶层的目录叫作根目录,写作 /。

所有文件和目录都位于这棵目录树中。硬盘、分区、U 盘等存储设备上的文件系统,也需要通过挂载(Mount)接入这棵目录树中的某个目录。

例如,一块独立分区可以挂载到 /data。挂载后,访问 /data 就是在访问该分区中的文件。

因此,Linux 并不是没有磁盘分区,而是不通过 C:、D: 这样的盘符来访问它们。

3. 常见目录分别有什么作用?

目录主要用途常见内容
/ 根目录,整个目录树的起点 所有目录的顶层
/bin 基本用户命令 ls、cp 等
/sbin 系统管理相关命令 fsck、shutdown 等
/etc 系统和服务配置文件 hosts、服务配置
/home 普通用户的家目录 /home/用户名
/root root 用户的家目录 root 的个人文件
/usr 大部分用户空间程序和只读共享数据 /usr/bin、/usr/lib
/var 经常变化的数据 /var/log、/var/cache
/tmp 临时文件 程序运行时的临时数据
/dev 设备文件 /dev/null、磁盘设备
/proc 内核和进程信息的虚拟文件系统 /proc/cpuinfo、/proc/<PID>
/sys 设备和内核对象信息的虚拟文件系统 /sys/class
/boot 启动所需文件 内核、initramfs 等
/opt 可选的附加软件 部分第三方软件
/mnt、/media 常见挂载目录 临时挂载点、可移动介质

补充两个容易混淆的目录:

  • /home 是普通用户的家目录集合;/root 是 root 管理员自己的家目录。
  • /usr 不是用户个人文件夹,它主要存放系统软件和共享资源;个人文件通常放在 /home/用户名。

在不少现代发行版中,/bin、/sbin、/lib 可能是指向 /usr 下对应目录的符号链接,这是常见的合并 /usr 布局。

4. 为什么 Linux 说一切皆文件?

一切皆文件是 Linux/Unix 的经典设计思想。它强调系统尽可能通过统一的文件接口来访问不同类型的资源。

例如:

  • 普通文件:保存文本、图片、程序等数据。
  • 目录:用于组织文件和其他目录。
  • 设备文件:通过 /dev 下的文件接口访问设备,例如 /dev/null。
  • 虚拟文件:/proc、/sys 提供内核、进程和设备等信息,并不代表普通磁盘文件。
  • 管道和套接字:也可以通过文件描述符进行读写,用于进程间通信。

例如:

# 把输出丢弃,不显示也不保存
echo "hello" > /dev/null

# 查看 CPU 信息
cat /proc/cpuinfo

# 查看内存信息
cat /proc/meminfo

这里的 /dev/null 就像一个“黑洞”,写进去的数据会被丢弃;/proc/cpuinfo 则让我们通过读取文件的方式查看 CPU 信息。

但要注意:一切皆文件是设计理念,不是说 Linux 中所有东西在底层都是真正存储在磁盘上的普通文件。
例如进程、网络连接等资源有各自的内核对象,只是其中很多可以通过文件描述符或虚拟文件接口进行访问。

5. 绝对路径和相对路径有什么区别?

Linux 中路径有两种常见写法:

  • 绝对路径:从根目录 / 开始写,例如 /home/zhangjiayu/project。
  • 相对路径:从当前所在目录开始写,例如 project/src。

几个常见符号:

写法含义
/ 根目录
. 当前目录
.. 上一级目录
~ 当前用户的家目录

可以用下面的命令练习:

# 查看当前所在目录
pwd

# 进入根目录
cd /

# 进入 /etc 目录
cd /etc

# 返回上一级目录
cd ..

# 回到当前用户的家目录
cd ~

6. 如何查看磁盘和挂载情况?

理解目录结构后,还需要知道目录背后使用的是哪块磁盘或分区。

# 查看磁盘分区和设备
lsblk

# 查看文件系统类型、容量和挂载点
df -hT

# 查看当前挂载关系
findmnt

其中,df -hT 可以查看文件系统类型、总容量、已用空间、可用空间以及挂载点。排查服务器磁盘空间不足时,这条命令非常常用。

7. 后端开发中会用到哪些目录?

举几个常见场景:

  • 部署服务时,可能把应用放在 /opt/myapp 或 /usr/local/myapp。
  • 查看 Nginx 等服务的配置时,经常会接触 /etc。
  • 排查 Spring Boot 或系统服务问题时,经常需要查看 /var/log 下的日志。
  • 查看服务器 CPU、内存和进程信息时,可以使用 /proc。
  • 检查磁盘是否空间不足时,可以使用 df -h,再结合 du -sh 目录 定位占用较大的目录。

这些目录并不是强制规定每个项目都必须这样部署,实际路径还要以发行版和团队规范为准。

总结

  • Linux 采用以 / 为起点的统一树形目录结构,磁盘分区通过挂载接入目录树。
  • /etc 存配置、/home 存普通用户个人文件、/var 存经常变化的数据、/dev 存设备文件、/proc 和 /sys 提供内核及设备信息。
  • 一切皆文件强调统一的访问接口,并不意味着所有资源都是磁盘上的普通文件。
  • 赞(0)
    未经允许不得转载:171主机测评 » Linux 文件系统详解:为什么说一切皆文件?[从零开始学Linux 第二篇]
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址