Linux中文件名存在哪儿

转自:https://blog.csdn.net/wdkirchhoff/article/details/44205143

我们可以把一个磁盘分成一个或多个分区。每个分区可以包含一个文件系统。 
i节点是固定长度的记录项,它包含了有关文件的大部分信息。可是就是不包含文件名!

inode包含文件的元信息,具体来说有以下内容: 
  * 文件的字节数 
  * 文件拥有者的User ID 
  * 文件的Group ID 
  * 文件的读、写、执行权限 
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。 
  * 链接数,即有多少文件名指向这个inode 
  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

stat example.txt**
  • 1

总之,除了文件名以外的所有文件信息,都存在inode之中。 
这里写图片描述
如果仔细得观察硬盘中一个柱面组的i节点和数据块部分,可以看到上图的情况。 
1. 在图中有两个目录项指向同一个i节点。每个i节点中都有一个链接计数,其值是指向该i节点的目录项数。只有当链接计数减少至0时。才可以删除该文件(也就是说可以释放该文件所占用的硬盘空间了)。这就是为什么“解除对一个文件的链接”操作并不总是意味着“释放该文件占用的磁盘块”的原因。在stat结构中,链接计数包含在st_nlink成员中,其基本系统数据类型是nlink_t。这种链接类型称为硬链接。 
2. 另外一种链接类型称为符号类型,对于这种链接,该文件的实际内容(在数据块中)包含了该符号链接所指向的文件的名字。在下例中:

lrwxrwxrwx 1 root 7 Sep 1 12:33 lib -> usr/lib
  • 1

该目录项中的文件名是3字符的字符串lib,而在该文件中包含了7个数据字节usr/lib。该i节点的文件类型是S_IFLNK,于是系统知道这是个符号链接。 
引入符号链接的原因是为了避开硬链接的一些限制: 
(1)硬链接通常要求链接和文件位于同一文件系统中。 
(2)只有root用户才能创建目录的硬链接 
3. i节点包含了大多数与文件有关的信息:文件系统、文件访问权限位、文件长度等等信息。stat结构中的大多数信息都取自i节点。只有两项数据存放在目录项中:文件名和i节点编号。 
4. 每个文件系统各自对他们的i节点进行编号,因此目录项中的i节点编号数指向同一文件系统中的相应i节点,不能使一个目录项指向另一个文件系统的i节点。这就是为什么ln命令不能跨文件系统的原因。

另一个问题:改变文件名会不会改变MD5

答:计算MD5只针对数据区的文件内容,而与文件名无关。所以改变文件名不会影响到MD5数值

猜你喜欢

转载自blog.csdn.net/qq_22080999/article/details/81570571