Linux文件部分知识

目录

认识inode

 如何理解创建一个空文件?

 如何理解对文件写入信息?

如何理解删除一个文件?

为什么拷贝文件的时候很慢,而删除文件的时候很快? 

 如何理解目录

​编辑

文件的三个时间

​编辑

Access: 文件最后被访问的时间。

Modify: 文件内容最后的修改时间。

Change: 文件属性最后的修改时间

软硬链接

硬链接

ln 源文件名称 硬链接文件名称

为什么这些我自己创建的目录的硬链接数是2?

 这里我试着给目录建立硬链接,却失败了,为什么不行?

软链接 

ln -s 源文件名称 软链接文件名称

软硬链接的区别

用法补充:


认识inode

在Linux操作系统中 文件 = 内容 + 属性,文件的属性和内容是分离存储的,其中保存属性信息的结构称之为inode,因为系统当中可能存在大量的文件,所以我们需要给每个文件的属性集起一个唯一的编号,即inode号。
也就是说,inode是一个文件的属性集合,Linux中几乎每个文件都有一个inode,为了区分系统当中大量的inode,我们为每个inode设置了inode编号。

说白了通俗一点 就是文件的身份证号 与文件唯一对应

每行包含7列: 模式 硬链接数 文件所有者 组 大小 最后修改时间 文件名

ls -l读取存储在磁盘上的文件信息,然后显示出来

其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息

这里可以查看到文件的inode

在命令行当中输入ls -i,即可显示当前目录下各文件的inode编号。

先简单了解一下文件系统

常见的文件系统有EXT2、EXT3、XFS、NTFS等

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被 划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设 定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的

Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相
同的结构组成。政府管理各区的例子
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
文件系统结构就被破坏了
GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下
块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
数据区:存放文件内容

 如何理解创建一个空文件?

  1. 通过遍历inode位图的方式,找到一个空闲的inode。
  2. 在inode表当中找到对应的inode,并将文件的属性信息填充进inode结构中。
  3. 将该文件的文件名和inode指针添加到目录文件的数据块中。

 如何理解对文件写入信息?

通过文件的inode编号找到对应的inode结构。
通过inode结构找到存储该文件内容的数据块,并将数据写入数据块。
若不存在数据块或申请的数据块已被写满,则通过遍历块位图的方式找到一个空闲的块号,并在数据区当中找到对应的空闲块,再将数据写入数据块,最后还需要建立数据块和inode结构的对应关系。

如何理解删除一个文件?

  1. 将该文件对应的inode在inode位图当中置为无效。
  2. 将该文件申请过的数据块在块位图当中置为无效。

为什么拷贝文件的时候很慢,而删除文件的时候很快? 

因为拷贝文件需要先创建文件,然后再对该文件进行写入操作,该过程需要先申请inode号并填入文件的属性信息,之后还需要再申请数据块号,最后才能进行文件内容的数据拷贝,而删除文件只需将对应文件的inode号和数据块号置为无效即可,无需真正的删除文件,因此拷贝文件是很慢的,而删除文件是很快的

 如何理解目录

  1. 都说在Linux下一切皆文件,目录当然也可以被看作为文件。
  2. 目录有自己的属性信息,目录的inode结构当中存储的就是目录的属性信息,比如目录的大小、目录的拥有者等。
  3. 目录也有自己的内容,目录的数据块当中存储的就是该目录下的文件名以及对应文件的inode指针。

文件的三个时间

Access: 文件最后被访问的时间。

Modify: 文件内容最后的修改时间。

Change: 文件属性最后的修改时间

当我们修改文件内容时,文件的大小一般也会随之改变,所以一般情况下Modify的改变会带动Change一起改变,但修改文件属性一般不会影响到文件内容,所以一般情况下Change的改变不会带动Modify的改变。
我们若是想将文件的这三个时间都更新到最新状态,可以使用命令touch 文件名来进行时间更新。
 

软硬链接

硬链接

这里我给可执行程序test创建一个硬链接

ln 源文件名称 硬链接文件名称
[lsy@hcss-ecs-d737 day_12_6]$ ln test mytest_h

首先可以发现他们的inode都是一样的

其次,两个程序的内容一样

 

还有就是权限后面的数字加了一个,也就是硬链接数加了一

与软连接不同的是,当硬链接的源文件被删除后,硬链接文件仍能正常执行,只是文件的链接数减少了一个,因为此时该文件的文件名少了一个。

总之,硬链接就是让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了

为什么这些我自己创建的目录的硬链接数是2?

不是说linux一切皆文件,那我创建了一个文件按道理只有一个硬链接,而目录也是文件,但创建目录为什么是两个硬链接数?

因为每个目录创建后,该目录下默认会有两个隐含文件.和..,它们分别代表当前目录和上级目录,因此这里创建的目录有两个名字,一个是dir另一个就是该目录下的.,所以刚创建的目录硬链接数是2。通过命令我们也可以看到dir和该目录下的.的inode号是一样的,也就可以说明它们代表的实际上是同一个文件

 这里我试着给目录建立硬链接,却失败了,为什么不行?

答案是为了防止闭环,如果真的可以建立,那么当一个进程在某种场景需要搜索文件,进入给目录的硬链接就会陷入一个闭环,如下图,所以Linux系统的设计者早就想到了这一点,给上级目录和当前目录指定符号. 和 ..当系统搜索文件路径时,通过某种手段跳过,这样就避免了环路路径问题

软链接 

ln -s 源文件名称 软链接文件名称

通过ls -i -l命令查看到软链接和硬链接的inode是不一样的,并且软链接文件的大小比源文件的大小要小得多。

软链接又叫做符号链接,软链接文件相对于源文件来说是一个独立的文件,该文件有自己的inode号,但是该文件只包含了源文件的路径名,所以软链接文件的大小要比源文件小得多。软链接就类似于Windows操作系统当中的快捷方式。

软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能执行或是查看软链接的内容了

软硬链接的区别

  1. 软链接是一个独立的文件,有独立的inode,而硬链接没有独立的inode。
  2. 软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件名和已有的inode的映射关系,并写入当前目录

用法补充:

在其他地方建立软盈利链接

用绝对文件路径的方式指明源文件和目标文件

ln命令常用的参数:

  • -b 删除,覆盖以前建立的链接
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优秀案例 | 元宇宙双语财经科技主播“舒望”主持首届粤港澳大湾区元宇宙国际传播论坛

12月6日,由南方财经全媒体集团指导、大湾区元宇宙国际传播实验室(GBA MIC Lab)主办、南财国际传播中心和21世纪经济报道共同承办,以“多元共创开放共享”为主题的首届粤港澳大湾区元宇宙国际传播论坛在广州隆重开幕。 “立足湾区,…

第二十一章网络通信总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmissi…

公网域名如何解析到内网IP服务器——快解析域名映射外网访问

在本地搭建主机应用后,由于没有公网IP或没有公网路由权限,在需要发布互联网时,就需要用到外网访问内网的一些方案。由于内网IP在外网不能直接访问,通常就用通过外网域名来访问内网的方法。那么,公网域名如何解析到内网…

自然语言处理22-基于本地知识库的快速问答系统,利用大模型的中文训练集为知识库

大家好,我是微学AI,今天给大家介绍一下自然语言处理22-基于本地知识库的快速问答系统,利用大模型的中文训练集为知识库。我们的快速问答系统是基于本地知识库和大模型的最新技术,它利用了经过训练的中文大模型,该模型使用了包括alpaca_gpt4_data的开源数据集。 一、本地…

SQL进阶 | CASE表达式

本文所有案例基于《SQL进阶教程》实现。 概述 SQL中的CASE表达式是一种通用的条件表达式,类似于其他语言中的if/else语句。它用于在SQL语句中实现条件逻辑。CASE表达式以WHEN子句开始,后面跟着一个或多个WHEN条件,每个WHEN条件后面跟着一个TH…

DevEco Studio 运行项目有时会自动出现.js和.map文件

运行的时候报错了,发现多了.js和.map,而且还不是一个,很多个。 通过查询,好像是之前已知问题了,给的建议是手动删除(一个一个删),而且有的评论还说,一周出现了3次,太可怕了。 搜的过…

IT企业使用超大数据传输最快的方式有哪些?

IT企业最核心的资产和竞争力肯定是数据,对于数据的安全和完整性是无比的看重的,那么无论是云计算、大数据分析、视频处理还是其他领域,IT企业都需要频繁地进行超大数据传输,以实现数据的共享、备份、迁移、同步等目的。那么&#…

消息队列 - RabbitMQ

消息队列 - RabbitMQ 1. 初识 MQ1.1 同步调用1.2 异步调用1.3.技术选型 2. RabbitMQ2.1 安装2.2 收发信息2.2.1 交换机(Exchange)2.2.2 队列2.2.3 绑定关系2.2.4 发送消息 2.3 数据隔离 1. 初识 MQ 微服务一旦拆分,必然涉及到服务之间的相互调用,之前讲…

FPGA入门有多难?这篇文章让你吃透零基础入门技巧!

FPGA是一个高度集成化的芯片,其学习过程既需要编程,又需要弄懂硬件电路和计算机架构。涉及到的知识和基础非常多,如果不合理地安排学习内容,学习过程会非常漫长和枯燥。这使很多想要学习FPGA小伙伴望而却步,那么&#…

VUE学习一、环境的安装

1.node.js安装 node.js是前端依赖的环境, 类似于java中的jdk 下载地址 node.js 下载 msi文件 下完就是一顿嘎嘎安装 , 安装后可以cmd看看node和npm的版本 1.2 yarn的安装 Yarn是Facebook最近发布的一款依赖包安装工具。Yarn是一个新的快速安全可信赖的可以替代NPM的依赖管…

OpenCL学习笔记(二)手动编译开发库(win10+vs2019)

前言 有时需求比较特别,可能需要重新编译opencl的sdk库。本文档简单记录下win10下,使用vs2019编译的过程,有需要的小伙伴可以参考下 一、获取源码 项目地址:GitHub - KhronosGroup/OpenCL-SDK: OpenCL SDK 可以直接使用git命令…

嵌入式总线技术学习(二):Modbus 总线技术详解

参考资料 工业控制网络 1. Modbus 概述 Modbus 是全球第一个真正用于工业现场的总线协议。为更好地普及和推动 Modbus 在基于以太网上的分布式应用,目前施耐德公司已将 Modbus 协议的所有权移交给 IDA (Interfacefor DistributedAutomation,分布式自动化…