0

0

Linux文件系统 | 知识要点总结

DDD

DDD

发布时间:2025-01-06 10:44:31

|

562人浏览过

|

来源于良许Linux教程网

转载

前言

什么是文件系统

 

文件系统是操作系统用于明确存储设备(通常是磁盘,也可能是基于 NAND Flash 的固态硬盘)或分区上文件的方法和数据结构;即在存储设备上组织文件的方式。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,以及对象及其属性。从系统的角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体而言,它负责为用户建立文件,存入、读取、修改、转储文件,控制文件的存取,以及在用户不再需要时撤销文件等。

1. Linux 下文件系统的层次结构

 

在 Linux 系统下,我们首先执行以下命令并查看输出:

ls -l /

对于 Linux 软件开发人员来说,对 Linux 系统的目录结构应该已经非常熟悉了。文件系统可以根据其结构而变化,但在大多数情况下,它们应该遵循文件系统层次标准。执行 ls -l / 命令来查看根目录下列出的目录。你的目录可能与我的有些许不同,但它们应该大致如下所示:

Linux文件系统 | 知识要点总结

我们来看一下各个目录都是做什么用的:

  • / -根目录,整个文件系统层次结构的根目录,所有内容都位于此目录下。
  • /bin -存放基本的可执行的程序(二进制文件),包括最基本的命令,如ls和cp。
  • /boot -包含内核引导加载程序文件。
  • /cdrom -光盘安装点
  • /dev -存放设备文件。
  • /etc -核心系统配置目录,应该只保存配置文件。
  • /home -用户的主目录,保存你的文档,文件,设置等。
  • /lib、/lib32、/lib64、/libx32 -主要目的是存放特定的库,这些库是在/bin和/sbin目录里的工具所需要的库,/lib中的库可以是32位或64位
  • /lost+found -这个目录一般情况下是空的,当系统非法关机后,如果你丢失了一些文件,在这里能找回来,通常很少用到此目录
  • /media -用作可移动媒体的连接点,如USB驱动器。
  • /mnt -临时挂载的文件系统。
  • /opt -可选应用软件包。
  • /proc -当前运行进程的信息。
  • /root -root用户的主目录。
  • /run -自上次引导以来运行系统的信息。
  • /sbin -包含基本的系统二进制文件,通常只能由root用户运行。
  • /srv -系统提供的特定于站点的数据。
  • /tmp -临时文件的存储
  • /usr -通常它不包含主文件夹意义上的用户文件。这意味着用户安装的软件和实用程序,但这并不是说你不能在那里添加个人目录。在这个目录中有/usr/bin、/usr/local等子目录。
  • /var -变量目录,用于系统日志记录、用户跟踪、缓存等。

2. 文件系统类型

文件系统分很多种类,有许多不同的文件系统实现可用。有些比其他的更快,有些支持更大容量的存储,而另一些只能在更小容量的存储上工作。不同的文件系统有不同的组织数据的方式。由于有很多不同的实现,应用程序需要一种方法来处理不同的操作。因此,有一种东西叫做虚拟文件系统抽象层。它是应用程序和不同文件系统类型之间的一层,因此无论拥有什么文件系统,你的应用程序都能够使用它。

你的磁盘上可以有许多文件系统,这取决于它们是如何分区的。

Linux系统中日志记录

在大多数文件系统类型上,日志记录是默认的,但是为了以防万一,你应该知道它是做什么的。假设你正在复制一个大文件,突然断电。如果你使用的是一个没有日志记录的文件系统,那么文件最终会损坏,你的文件系统也会不一致,然后当你重新启动时,系统将执行文件系统检查以确保一切正常。但是,修复可能需要一段时间,这取决于你的文件系统有多大。

现在,如果你使用的是带日志记录的系统,在你的机器开始复制文件之前,它会将你将要做的事情写入日志文件。当你实际复制文件时,一旦它完成,日志将该任务标记为完成。因此,文件系统总是处于一致的状态,因此,如果你的机器突然关闭,它将确切地知道你停止的位置。这也减少了引导时间,因为它不检查整个文件系统,只查看日志。

常见桌面文件系统类型

  • ext4:这是本地Linux文件系统的最新版本。它与旧的ext2和ext3版本兼容。它支持高达10亿字节的磁盘卷和高达16TB甚至更多的文件大小。它是Linux文件系统的标准选择。
  • Btrfs:“Better or Butter FS”,它是一种新的Linux文件系统,提供快照、增量备份、性能提升等功能。它是广泛可用的,但还不太稳定和兼容。
  • XFS:高性能日志文件系统,非常适合具有大文件的系统,例如媒体服务器。
  • NTFS和FAT:Windows文件系统
  • HFS+:苹果系统的文件系统

查看以下Ubuntu系统上的文件系统:

Linux文件系统 | 知识要点总结

3. Linux下磁盘的分区

硬盘可以细分为多个分区,本质上就是多个块设备。回想一下这样的例子,/dev/sda1和/dev/sda2, /dev/sda是整个磁盘,但是/dev/sda1是磁盘上的第一个分区。分区对于分离数据非常有用,如果你需要某个文件系统,可以轻松地创建一个分区,而不是将整个磁盘设置为一种文件系统类型。

分区表每个磁盘都有一个分区表,这个表告诉系统磁盘是如何分区的。该表告诉你分区的开始和结束位置,哪些分区是可引导的,磁盘的哪些扇区分配给哪些分区等等。有两种主要的分区表方案,主引导记录(MBR)和GUID分区表(GPT)。

分区磁盘由帮助我们组织数据的分区组成。你可以在一个磁盘上有多个分区,它们不能相互重叠。如果有未分配给分区的空间,则称为空闲空间。分区的类型取决于你的分区表。在一个分区中,你可以拥有一个文件系统,也可以将一个分区专用于其他功能,如交换分区。

MBR

  • 传统的分区表,被用作标准
  • 可以有主分区、扩展分区和逻辑分区
  • MBR有四个主分区的限制
  • 通过将一个主分区划分为一个扩展分区(一个磁盘上只能有一个扩展分区),可以创建额外的分区。然后在扩展分区中添加逻辑分区。逻辑分区的使用就像任何其他分区一样。
  • 支持最大2TB的磁盘

GPT

  • GUID分区表(GPT)正在成为磁盘分区的新标准
  • 只有一种类型的隔断,你可以做很多
  • 每个分区都有一个全局唯一ID (GUID)
  • 主要用于基于UEFI的引导

文件系统结构

文件系统是文件和目录的有组织的集合。在其最简单的形式中,它由一个管理文件的数据库和实际文件本身组成。

  • 引导块:它位于文件系统的前几个扇区中,文件系统并没有真正使用它。相反,它包含用于引导操作系统的信息。操作系统只需要一个引导块。如果你有多个分区,它们将有引导块,但其中许多是未使用的。
  • 超级块:这是在引导块之后的单个块,它包含关于文件系统的信息,例如inode表的大小、逻辑块的大小和文件系统的大小。
  • 索引表:把它看作是管理文件的数据库。每个文件或目录在索引表中都有一个唯一的条目,并且包含关于该文件的各种信息。
  • 数据块:这是文件和目录的实际数据。

让我们看一下不同的分区表。下面是一个使用MBR分区表(msdos)的分区示例。你可以看到系统上的主分区、扩展分区和逻辑分区。

Linux文件系统 | 知识要点总结

磁盘分区

如果我们需要对磁盘进行分区。有很多工具可以做到这一点:

  • fdisk 基本的命令行分区工具,不支持GPT
  • parted 这是一个命令行工具,支持MBR和GPT分区
  • gparted 这是parted的GUI版本
  • gdisk fdisk但不支持MBR,只支持GPT 我们用parted来划分。假设我连接了USB设备,我们看到设备名称是/dev/sdb2.

4. 创建文件系统

你可以创建一个文件系统:

sudo mkfs -t ext4 /dev/sdb2

就这么简单!mkfs(制作文件系统)工具允许我们指定我们想要的文件系统类型和位置。你只希望在新分区的磁盘上创建文件系统,或者在对旧磁盘重新分区时创建文件系统。如果你试图在现有文件系统之上创建一个文件系统,那么很可能会使你的文件系统处于损坏状态。

5. mount and umount

在你可以查看文件系统的内容之前,你必须挂载它。要做到这一点,我需要设备位置、文件系统类型和挂载点,挂载点是系统上文件系统将要附加的目录。我们要把设备挂载到一个挂载点。

首先创建挂载点,然后进行挂载:

mkdir /myTest
sudo mount -t ext4 /dev/sdb2 /myTest

就这么简单!现在当我们转到/myTest目录时,我们可以看到文件系统的内容,-t指定文件系统的类型,然后是设备位置,然后是挂载点。

从挂载点卸载设备:

贝特协同办公系统(BetterCOS)
贝特协同办公系统(BetterCOS)

具备更多的新特性: A.具有集成度更高的平台特点,集中体现了信息、文档在办公活动中交流的开放性与即时性的重要。 B.提供给管理员的管理工具,使系统更易于管理和维护。 C.产品本身精干的体系结构再加之结合了插件的设计思想,使得产品为用户度身定制新模块变得非常快捷。 D.支持对后续版本的平滑升级。 E.最价的流程管理功能。 F.最佳的网络安全性及个性化

下载
sudo umount /myTest
或者
sudo umount /dev/sdb2

请记住,内核按照找到设备的顺序命名设备。如果我们的设备名称在我们挂载它之后因为某种原因改变了怎么办? 你可以使用设备的通用唯一ID (UUID)而不是名称。

查询系统中块设备的uuid:

Linux文件系统 | 知识要点总结

我们可以看到我们的设备名称、它们对应的文件系统类型和它们的uuid。现在,当我们想要挂载某个设备时,我们可以使用:

sudo mount UUID=59c03b23-fd61-4bfc-b9fa-570edf47a0b9 /myTest

大多数情况下,你不需要通过设备的uuid来挂载设备,使用设备名称要容易得多,而且通常情况下,操作系统知道挂载常见的设备,如USB驱动器。如果你需要在启动时自动挂载文件系统,就像你添加了一个辅助硬盘驱动器一样,可能会使用UUID。

6. /etc/fstab

当我们想在系统启动时自动挂载文件系统,我们可以将它们添加到文件系统表的缩写文件/etc/fstab中。该文件包含已挂载的文件系统的永久列表。

Linux文件系统 | 知识要点总结

每一行代表一个文件系统,字段是:

  • UUID -设备标识
  • 挂载点 -文件系统挂载到的目录
  • 文件系统类型
  • 选项 -其他挂载选项
  • 转储 -由转储实用程序用来决定何时进行备份,默认为0
  • Pass -用来决定应该检查文件系统的顺序,如果值为0,则不检查

要添加一个条目,只需使用上面的条目语法直接修改/etc/fstab文件。修改这个文件时要小心,如果搞砸了,可能会给带来一些麻烦

其中swap属于交换分区,这个交换分区是什么?交换是我们用来给系统分配虚拟内存的。如果内存不足,系统会使用这个分区将空闲进程的内存“交换”到磁盘,这样就不会陷入内存困境。

使用分区作为交换空间假设我们希望将/dev/sdb2分区设置为交换空间。

  • 首先确保我们没有任何东西在分区上
  • 执行命令mkswap /dev/sdb2初始化交换区
  • 运行swapon /dev/sdb2将启用交换设备
  • 如果你希望交换分区在启动时保持不变,你需要在/etc/fstab文件中添加一个条目。w是使用的文件系统类型。
  • 删除交换模块:swapoff /dev/sdb2

通常应该分配大约两倍于内存的交换空间。但是现在系统通常已经足够强大并且有足够的内存。

7. 磁盘使用情况

你可以使用一些工具来查看磁盘的利用率:

Linux文件系统 | 知识要点总结

df命令显示当前挂载的文件系统的利用率。-h标志提供了一种可读的格式。你可以看到设备是什么,以及有多少容量被使用和可用。

假设你的磁盘快要满了,你想知道哪些文件或目录占用了这些空间,你可以使用du命令。

du -h
Linux文件系统 | 知识要点总结

8. 文件系统修复

有时我们的文件系统并不总是处于最佳状态,如果我们突然关闭系统,我们的数据可能会损坏。这取决于系统是否试图让我们回到工作状态。

fsck(文件系统检查)命令用于检查文件系统的一致性,甚至可以尝试为我们修复它。通常,当你启动磁盘时,fsck将在磁盘挂载之前运行,以确保一切正常。但有时磁盘非常糟糕,需要手动执行此操作。但是,一定要在你处于修复磁盘或可以在不挂载的情况下访问文件系统的地方执行此操作。

sudo fsck /dev/sdb1

9. 索引节点

还记得我们的文件系统是如何由实际文件和管理这些文件的数据库组成的吗?该数据库称为索引节点表。

**什么是索引节点?**索引节点(inode)是该表中的一个条目,每个文件都有一个索引节点。它描述了关于文件的所有内容,例如:

  • 文件类型-常规文件,目录,字符设备等
  • 拥有者
  • 拥有组
  • 访问权限
  • 时间戳- mtime(最后一次修改文件的时间),ctime(最后一次修改属性的时间),atime(最后一次访问的时间)
  • 文件的硬链接数
  • 文件大小
  • 分配给文件的块数
  • 指向文件数据块的指针 基本上索引节点存储了关于文件的所有内容,除了文件名和文件本身

**什么时候创建索引节点?**创建文件系统时,也会为索引分配空间。有一些算法可以根据磁盘容量等确定需要多少索引节点空间。你可能在某些时候看到过磁盘空间不足的错误问题。同样的情况也会发生在索引节点上,你可能会耗尽索引节点,因此无法创建更多的文件

索引节点信息索引节点是由数字标识的,当一个文件被创建时,它被分配一个索引号,这个编号是按顺序分配的。然而,有时你可能会注意到,当你创建一个新文件时,它得到的索引号比其他文件低,这是因为一旦索引被删除,它们就可以被其他文件重用。查看索引编号执行ls -li命令:

Linux文件系统 | 知识要点总结

该命令的第一个字段列出了索引号。

你还可以使用stat查看有关文件的详细信息,它还会告诉你有关索引节点的信息。

Linux文件系统 | 知识要点总结

10. 符号链接

在Windows操作系统中,有一种叫做快捷键的东西,快捷键只是其他文件的别名。如果对原始文件做了一些操作,可能会破坏快捷方式。在Linux中,等同于快捷方式的是符号链接(或软链接或符号链接)。symlinks允许我们通过文件名链接到另一个文件。Linux中的另一种类型的链接是硬链接,它们实际上是另一个指向索引节点的链接文件。

Linux文件系统 | 知识要点总结

可以看到,我创建了一个名为myFile1Link的符号链接,指向myFile1。符号链接用->表示。注意我是如何获得一个新的节点号的,符号链接只是指向文件名的文件。当你修改符号链接时,文件也会被修改。节点号对于文件系统是唯一的,你不能在一个文件系统中有两个相同的节点号,这意味着你不能通过节点号在不同的文件系统中引用文件。但是,如果你使用符号链接,它们不使用节点号,而是使用文件名,因此可以跨不同的文件系统引用它们。

硬链接

Linux文件系统 | 知识要点总结

硬链接只是创建另一个文件,该文件具有到同一节点的链接。因此,如果我修改了myFile2或myFile2link的内容,两者都将看到更改,但如果我删除了myFile2,则仍然可以通过myFile2link访问该文件。这就是ls命令中的链接计数发挥作用的地方。链接数是一个节点拥有的硬链接的数量,当你删除一个文件时,它会减少链接数。只有当节点的所有硬链接都被删除时,节点才会被删除。当你创建一个文件时,它的链接计数是1,因为它是唯一指向该节点的文件。与符号链接不同,硬链接不跨文件系统,因为索引节点对于文件系统是唯一的。

小结

 

好了,这次就总结到这里吧。本文我们总结了Linux系统下文件系统相关的常用且重要的知识点,希望对小伙伴们有所帮助!喜欢的小伙伴记得点赞👍、分享📃、再看☕,你的每一个动作都是对作者的最大支持!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

537

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

25

2026.01.06

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1074

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

169

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1244

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.19

li是什么元素
li是什么元素

li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

419

2023.08.03

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.8万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号