Linux下inode的含义 以及基于inode的硬链接 软链接

文件系统的运作与操作系统的档案数据有关,较新的操作系统的档案数据除了档案实际内容外,通常含有非常多的属性,如Linux操作系统的档案权限(rwx)与文件属性(拥有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,实际数据则放置到data block 区块中。另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。

每个inode与block都有编号,三个数据的意义为:

  • superblock:记录次filesystem的整体信息,包括inode/block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
  • block:实际记录档案的内容,若档案太大时,会占用多个block。

由于每个inode与block都有编号,而每个档案都会占用一个inode,inode内则有档案数据放置的block号码。因此,我们可以知道的是,如果能够找到档案inode的话,那么自然就会知道这个档案所放置数据的block号码,也就能够读出该档案的实际数据了。

这个是比较有效率的做法,因为如此一来我们的磁盘就能够在短时间内读取出全部的数据,读写的效能比较好。

这种数据存取的方法我们称为索引时文件系统(indexed alloction)。

inode table:

inode记录的档案数据至少有底下这些:

  • 该档案的存取模式(read/write/excute);
  • 该档案的拥有者与群组(owner/group);
  • 该档案的容量;
  • 该档案建立或状态改变的时间(cyime);
  • 最近一次的读取时间(atime);
  • 最近修改的时间(mtime);
  • 定义档案特性的旗标(flag),如SetUID...;
  • 该档案真正内容的指向(pointer);

inode的数量与大小也是在格式化时就已经固定了:

  • 每个inode大小均固定为128bytes;
  • 每个档案都仅会占用一个inode而已;
  • 文件系统能够建立的档案数量与inode的数量有关;
  • 系统读取档案时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。

inode要记录的数据非常多,但偏偏又只有128bytes而已,我们的系统将inode记录block号码的区域定义为12个直接,一个简接,一个双简接与一个三间接记录区。

【硬链接】
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

在使用硬链接时,磁盘的空间与inode的数目并不会改变;但是硬链接不可以跨文件系统,不能对不存在的文件名以及目录进行连接。

【软链接】

另外一种连接称之为符号连接(Symbolic Link),也叫软链接。软链接文件有类似于Windows的快捷方式。软连接文件只是其源文件的一个标记。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软连接文件的内容了。

由于软连接所建立的档案为一个独立的新的档案,所以会占用inode与block.

时间: 2024-08-04 21:47:22

Linux下inode的含义 以及基于inode的硬链接 软链接的相关文章

Inode/硬链接/软链接

以下2台服务器的不同分区,分别显示不同的"inode size" ,1个为128byte 另一个为256byte. CH-HOV-FTP是采用ext3分区格式,而www服务器采用的是ext4分区格式 -------------------------------------------------------------------------------------------------------------------- CH-HOV-FTP1:/home # df -k /d

Linux下TCP网络编程与基于Windows下C#socket编程间通信

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clos

Linux下TCP网络编程与基于Windows下C#socket编程之间通信

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入 数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clo

Linux下的文件操作(2)——基于文件描述符的文件操作

概要: 打开.创建和关闭文件 读写文件 文件定位 获取文件信息 打开.创建和关闭文件 函数原型: #include <sys/types.h> //头文件 #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); //文件名 打开方式 int open(const char *pathname, int flags, mode_t mode);//文件名 打开方

Linux下动态库和静态库的编译和链接

1.动态库:Linux中动态库的后缀名为.so 第二步:gcc -shared (C文件名.c) -o (lib动态库名.so) 创建一个.so文件,因为是64位的系统,不兼容,会报错 应该在指令前加-fpic 即gcc -fpic -shared (C文件名.c) -o (lib动态库名.so) 第三步:gcc () -(l库文件名无后缀) -L. -o (编译后的c文件名) -L.告诉系统文件库为当前目录 第四步:进入root模式,export LD_LIBRARY_PATH=.:$LD_L

linux中的软、硬链接

linux中的软.硬链接 硬链接 硬链接(hard link),如果文件B是文件A的硬链接,则A的inode节点号与B的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的.如果删除了其中一个,对另外一个没有影响.每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收.注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A

linux下的inode记录

  文件名 -> inode -> device block    转自:http://www.ruanyifeng.com/blog/2011/12/inode.htmlhttp://blog.s135.com/post/295/ http://hi.baidu.com/leejun_2005/blog/item/d9aa13a53b3af6e99152ee7e.html    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇

Linux下对于inode的理解

0x01 什么是inode 文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector),每个扇区储存512字节: 操作系统读取硬盘时,不会一个个扇区地读取,这样效率低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由扇区组成的块是文件存储的最小单位,块的大小,最常见的是4kb,即连续8个Sector组成一个Block: 文件数据存储在块中,显然,还必须找一个地方存储文件的元信息,比如文件的创建者,文件的创建日期,文件的大小等.这种存储文件元信息的区域就叫做

Linux 下inode的理解

转自: http://www.ruanyifeng.com/blog/2011/12/inode.htmlhttp://blog.s135.com/post/295/ http://hi.baidu.com/leejun_2005/blog/item/d9aa13a53b3af6e99152ee7e.html 一.inode是什么? 理解inode,要从文件储存说起.文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统