Linux文件系统

Linux文件系统

Linux 文件系统是 Linux 操作系统中用于存储和组织文件的结构。以下是一些关键概念和常见的 Linux 文件系统类型:

关键概念
  1. 文件系统层次结构:Linux 使用统一的文件系统层次结构,所有文件和目录都从根目录 / 开始。

  2. 目录结构

    • /:根目录。
    • /home:用户的主目录。
    • /etc:系统配置文件。
    • /var:可变数据,如日志文件。
    • /usr:用户程序和数据。
    • /bin:基本命令。
    • /sbin:系统管理命令。
  3. 权限管理:Linux 文件系统使用权限(读、写、执行)来控制对文件和目录的访问。

  4. 挂载:文件系统可以被挂载到目录中,使其内容可用。

常见的文件系统类型
  1. ext4:最常用的 Linux 文件系统,支持大文件和大容量存储。

  2. XFS:高性能文件系统,适用于大文件和高并发环境。

  3. Btrfs:现代文件系统,支持快照、压缩和动态分配。

  4. FAT32:常用于 USB 驱动器和其他可移动存储设备,兼容性好。

  5. NTFS:Windows 文件系统,Linux 支持读写,但可能不如原生文件系统稳定。

常用命令
  • ls:列出目录内容。
  • cd:更改目录。
  • cp:复制文件或目录。
  • mv:移动或重命名文件或目录。
  • rm:删除文件或目录。
  • chmod:更改文件或目录的权限。
  • df:显示文件系统的磁盘空间使用情况。
  • mount:挂载文件系统。

文件系统底层( ext4 和 XFS 文件系统)

ext4 文件系统

  1. 底层结构

    • 超级块(Superblock):存储文件系统的整体信息,如块大小、inode 数量、块组数量等。
    • 块组描述符表(Block Group Descriptor Table):每个块组有一个块组描述符表,记录块组的信息,如空闲块数量、inode 数量等。
    • inode 表:存储所有文件和目录的 inode 结构。
    • 数据块:存储文件的实际数据。
  2. 物理结构

    • 块组:每个块组包含超级块、块组描述符表、块位图、inode 位图和数据块。
    • 块位图:记录数据块的使用情况。
    • inode 位图:记录 inode 的使用情况。
    • 数据块:存储文件的实际数据。

XFS 文件系统

  1. 底层结构

    • 超级块(Superblock):存储文件系统的整体信息。
    • AG(Allocation Group):将文件系统划分为多个 AG,每个 AG 包含数据块、inode 等。
    • inode:存储文件和目录的元数据。
  2. 物理结构

    • AG:每个 AG 包含超级块、inode 区域、数据块区域和日志区域。
    • inode 区域:存储 inode 结构。
    • 数据块区域:存储文件的实际数据。
    • 日志区域:用于记录文件系统的变化,以确保一致性。

比较

  • ext4 使用块组的概念,而 XFS 使用 AG 的概念。
  • ext4 的 inode 和数据块分布在块组中,而 XFS 的 inode 和数据块分布在 AG 中。
  • XFS 在处理大文件和高并发时性能更好,而 ext4 在一般用途下更常见。

ls -la 的执行结果
数据存储位置
目录项(Directory Entry):
每个目录在文件系统中都有一个目录项,目录项包含文件名和对应的 inode 号。
目录项存储在目录的特定数据块中。
inode:
每个文件和目录都有一个 inode,inode 存储了文件的元数据,包括权限、所有者、大小、时间戳等。
inode 信息存储在文件系统的 inode 表中。
执行过程
当您执行 ls -la 命令时,系统会进行以下操作:
读取目录:首先读取当前目录的目录项,获取所有文件和子目录的 inode 号。
获取 inode 信息:根据 inode 号,读取每个文件或目录的 inode,获取其元数据。
显示信息:将获取的文件名和 inode 信息格式化并输出到终端。

i节点和数据块

在 Linux 文件系统中,i 节点(inode)和数据块是存储文件和目录信息的基本结构。

i 节点(inode)
  1. 定义

    • i 节点是文件系统中用于存储文件或目录元数据的结构,包括文件类型、权限、所有者、大小、时间戳(创建、修改、访问时间、指向数据块的指针)等。
  2. 操作

    • 创建文件:当创建一个新文件时,文件系统会分配一个新的 i 节点,并在目录中添加一个目录项,指向该 i 节点。
    • 读取文件:读取文件时,首先通过目录项获取对应的 i 节点,然后根据 i 节点中的信息找到数据块。
    • 修改文件:修改文件内容时,文件系统会更新数据块,并可能更新 i 节点中的时间戳。
    • 删除文件:删除文件时,文件系统会从目录中移除对应的目录项,并释放 i 节点和数据块。
  3. 存储

    • 在传统 Unix 文件系统中(如 ext2、ext3、ext4 等),i 节点表通常存储在文件系统的固定位置,通常是文件系统的预留区域。
      文件系统会维护一个 i 节点表,其中包含所有文件和目录的 i 节点信息,通过这个表可以找到每个文件或目录对应的 i 节点。
    • 一些现代文件系统(如 Btrfs、XFS 等)采用了不同的方式来管理 i 节点,可能会将 i 节点信息分散存储在文件系统的数据结构中,而不是集中存储在一个表中。
数据块
  1. 定义

    • 数据块是文件系统中用于存储文件实际数据的基本单位。文件的内容存储在一个或多个数据块中。
  2. 操作

    • 写入数据:当写入数据到文件时,文件系统会分配一个或多个数据块,并将数据写入这些块中。
    • 读取数据:读取文件时,文件系统根据 i 节点中的数据块指针读取相应的数据块。
    • 扩展文件:如果文件增加了数据,文件系统可能需要分配新的数据块,并更新 i 节点中的数据块指针。
    • 释放数据块:当文件被删除或截断时,文件系统会释放不再使用的数据块。
具体操作示例
  • 创建文件

    touch example.txt
    

    这将创建一个新的文件 example.txt,并分配一个新的 i 节点。

  • 查看 i 节点 信息

    ls -i example.txt
    

    这将显示 example.txt 的 i 节点号。

  • 查看文件内容

    cat example.txt
    

    这将读取文件内容,文件系统会根据 i 节点找到数据块并读取数据。

  • 删除文件

    rm example.txt
    

    这将删除 example.txt,并释放其 i 节点和数据块。

vim和重定向的区别
vim打开一个已经存在的文件的时候,实际上创建了一个新的i节点,然后改变文件名和i节点的链接。
而重定向输出到文件末尾不会改变i节点。
在这里插入图片描述

vim打开一个存在的文件夹的时候,实际上是创建了一个和原文件相同的隐藏文件,这样既可以让其他用户访问该文件,也可以在出现异常断电的时候保存未完成的文件。

rm

以下是关于 rm 命令的一些重要知识:

  1. 基本用法

    • 删除单个文件:rm filename
    • 删除多个文件:rm file1 file2 file3
  2. 常用选项

    • -f:强制删除,不提示确认。
    • -i:交互式删除,删除前会询问确认。
    • -r-R:递归删除,用于删除目录及其内容。
    • -v:显示详细的删除过程。
  3. 删除目录

    • 删除空目录:rmdir dirname
    • 删除非空目录:rm -r dirname
  4. 安全性

    • 使用 rm 命令时要小心,因为删除的文件通常无法恢复。
    • 可以使用 -i 选项来增加安全性,避免误删。

rm 命令的底层实现是通过系统调用来完成文件或目录的删除操作。具体来说,rm 命令会调用 unlink() 系统调用来删除一个文件,或者调用 rmdir() 系统调用来删除一个目录。这些系统调用会直接与文件系统交互,告诉文件系统删除指定的文件或目录。
在底层,文件系统会更新文件系统的数据结构,标记被删除的文件或目录的磁盘空间为可重用。这样,被删除的文件或目录在文件系统中就不再存在,但实际上数据并没有被完全擦除,只是被标记为可覆盖。

软链接、硬链接

以下是关于 ln 命令、软链接、硬链接以及文件访问控制列表(File Access Control Lists,facl)的相关知识:

  1. ln 命令

    • ln 命令用于创建链接(link),可以创建硬链接或软链接。
    • 语法:ln [选项] 源文件 目标文件
    • 常用选项:
      • -s:创建软链接(符号链接)。
      • -f:强制创建链接,覆盖已存在的目标文件。
  2. 软链接(符号链接)

    • 软链接是一种特殊的文件,它包含指向另一个文件的路径。
    • 软链接类似于 Windows 中的快捷方式,可以跨文件系统,但源文件被删除后软链接失效。
    • 创建软链接:ln -s 源文件 目标文件
  3. 硬链接

    • 硬链接是文件系统中的一个目录项,指向同一索引节点(inode)的不同文件名。
    • 硬链接只能在同一文件系统内创建,删除源文件不影响硬链接的可用性。
    • 创建硬链接:ln 源文件 目标文件
  4. 文件访问控制列表(facl)

    • 文件访问控制列表(facl)是一种用于控制文件和目录访问权限的扩展机制。
    • facl 允许对文件或目录设置更精细的权限控制,包括用户、组和其他用户的读、写、执行权限。
    • 常用命令:
      • 设置 facl:setfacl
      • 查看 facl:getfacl

以下是更多关于 ln 命令、软链接、硬链接和文件访问控制列表(facl)的知识:

  1. 硬链接与软链接的区别

    • 硬链接:硬链接是文件系统中的目录项,多个文件名指向同一个 inode,删除源文件不影响硬链接的可用性,但不能跨文件系统。
    • 软链接:软链接是一个特殊的文件,包含指向另一个文件的路径,源文件被删除后软链接失效,可以跨文件系统。
    • 软链接是通过存储源文件的路径信息来访问文件内容,而不是直接通过数据块或 inode 访问文件。
  2. 使用场景

    • 硬链接适合在同一文件系统内对同一文件创建多个别名,节省存储空间。
    • 软链接适合跨文件系统或需要动态指向不同文件的情况,如软件安装目录的符号链接。
  3. 文件访问控制列表(facl)

    • facl 提供了更灵活的权限控制,可以为文件或目录设置额外的访问权限。
    • 通过 facl,可以指定不同用户或用户组对文件或目录的读、写、执行权限,实现更细粒度的权限控制。
  4. facl 命令示例

setfacl -m u:user:rw- file.txt       #设置facl(为用户 user 设置读写权限)
getfacl file.txt                     #查看 facl:
  1. 注意事项
    • 在使用链接时要注意不要形成循环链接,避免出现死循环。
    • 使用 facl 时要谨慎设置权限,确保文件和目录的安全性和可访问性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远歌已逝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值