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 时要谨慎设置权限,确保文件和目录的安全性和可访问性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/17936.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[1.15.X-1.18.X]Herobrine-吾王HIM插件

Herobrine 这款插件99%自定义!为你的服务器增加一个吓人的HIM,该插件是一个非玩家角色,由 Minecraft 的粉丝创建。从来没有真正成为 Minecraft 游戏的一部分,这个故事是他在 Minecraft 世界里出没,Mojang 通过开玩笑地将“移除的 …

CTF 取证技术

01 流量分析 筛选器的使用 追踪流 文件导出 实例:通过筛选 http ,推断出 攻击者很可能 是 执行一个 文件上传 的攻击hack.php 很可能就是 攻击者 上传的 webshell依次进行 http 的 追踪流 查看查看到最后,发现响应中 有 PK文件头的存在 ,说…

【GPIO】3.上/下 拉电阻通讯中的作用

一.什么是上/下拉电阻 上拉、下拉电阻统一称为拉电阻,作用是将状态不确定的信号线通过一个电阻将其箝位至高电平(上拉)或低电平(下拉) 这里有人可能会疑惑? 什么叫状态不确定的信号? 在数字电…

分享购:前期布局与后期问题解决策略

在当今电商与消费模式不断创新的时代,分享购作为一种极具潜力的商业模式,正受到越来越多的关注。然而,要想让分享购真正发挥优势、实现可持续发展,无论是前期的精心布局,还是后期妥善应对各类问题,都至关重…

51c大模型~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/11908179 #HITS 北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率 单元测试是软件开发流程中的一个关键环节,主要用于验证软件中的最小可测试单元,函数或模块是否按预期工作…

中断与异常处理:走进代码

在操作系统的核心部分,中断(Interrupt)和异常(Exception)的处理机制是不可或缺的基础。它们的设计决定了系统的响应能力、稳定性和可扩展性。本文将深入探讨 Linux 内核中的中断与异常处理机制,并结合更多实…

智慧社区管理系统平台全面提升物业管理效率与用户体验

内容概要 随着科技的发展,智慧社区管理系统平台应运而生,成为现代物业管理的重要工具。这个平台通过整合多种先进的管理手段,为物业服务提供了全新的解决方案。智慧社区管理系统的核心在于其高效、便捷、智能的特点,最大程度地提…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数 前言一、什么是 datatable 参数?Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

Java学习——Day10

static修饰的成员变量和方法,从属与类。普通变量和方法从属于对象的 静态块就是类在初始化的执行的语句块,静态块中常调用静态变量和静态方法。 以下编写一段代码举个例子 Java参数传值机制 java中,方法中所有参数都是“值传递”&#xff…

StructRAG Boosting Knowledge 论文笔记

StructRAG: Boosting Knowledge Intensive Reasoning of LLMs via Inference-time Hybrid Information Structurization 论文精读 背景知识 知识密集型推理任务(knowledeg- intensive reasoning task): 知识密集型推理任务(knowledge-inte…

【点云上采样】最近邻插值上采样算法 增加点云密度

看了很多文章都是用CGAL去做的,又是下载安装CGAL的贼麻烦,关键弄好还不能用,气死了。 文章目录 前言一、最近邻插值上采样算法1、原理:2、步骤: 二、完整代码三、效果对比 前言 传感器采集到的点云比较稀疏&#xff0…

C++仿函数

概念 仿函数本质上是一个类(class)或者结构体(struct),不过这个类重载了函数调用运算符 operator(),使得它的实例对象可以像函数那样被调用。从使用方式上看,它能表现出类似函数的行为&#xf…

【Linux进程基础篇】总结 | => 进程环境变量(超详细)

-------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤:Never frown, even when you are sad, because you never know who is falling in love wi…

PowerBI 无法拖动字段到组件上

今天在做PowerBI时发现一个奇怪的问题。 本来好好的报表,突然无法拖动字段到组件上。 后来在网上搜索相关问题,发现原因可能是因为"隐式度量值"被禁用。 就是说报表无法自动聚合计算,所以无法拖动字段到组件上。 正确的: 有问题…

熟食店称重计价秤软件下载 佳易王触摸屏称重自动读取重量自动计算金额系统操作教程

一、概述 【软件资源文件下载在文章最后】 熟食店称重计价秤软件下载 触摸屏称重自动读取重量自动计算金额系统操作教程 1、软件可以自动读取称的重量。2、自动计算金额并累计。不需打印条形码直接称重计算,节省人力和时间。 软件同时支持称重商品和条形码百货商…

十一 手写Spring框架

十一、手写Spring框架 Spring IoC容器的实现原理:工厂模式 解析XML 反射机制。 我们给自己的框架起名为:loveSpring 第一步:创建模块loveSpring 采用Maven方式新建Module:loveSpring 打包方式采用jar,并且引入do…

360多模态及文档理解大模型技术亮相全球机器学习技术大会,共探AI技术新前沿...

北京,2024年11月15日 —— 在人工智能技术飞速发展的今天,全球技术生态正经历着深刻的变革。2024全球机器学习技术大会(北京站)于11月14-15日在北京举行,汇聚了顶尖的AI专家、学者和行业实践者,共同探讨机器…

六自由度双足机器人运动控制

最近迷上了研究机器人,花了很多时间研究机器人的控制和交互。先后开发出来了四足四自自由度,四足八自由度,两足四自由度,两足六自由度机器人,并为他们开发了相应的大模型语音交互。通过努力,既锻炼了动手组…

shell脚本(2)

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:shell编程(2)永久环境变量和字符串显位_哔哩哔哩_bilibili 本文主要讲解临时变量和永久变量以及字符串长度截取操作。 一…

SEW MDX61B 变频器调试说明

SEW MDX61B 变频器调试说明 1、打开MOVITOOLS MotionStudio软件 2、创建新项目(可根据需求更改项目名称及保存路径) 新建完成 3、电机初始化 连接新变频器和新电机时,必须进行电机初始化。电机初始化目的为配对电机参数至变频器,简单说就是让变频器知道需要控制的是什么…