码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 中文件名存在哪里?

时间:2015-03-11 21:39:07      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:i节点   文件名存放   目录项   硬盘   linux   

面试中被问到Linux系统下文件的文件名放在了哪里,没答出来。:-(这里总结下:

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

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

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

stat example.txt**

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

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

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

Linux 中文件名存在哪里?

标签:i节点   文件名存放   目录项   硬盘   linux   

原文地址:http://blog.csdn.net/wdkirchhoff/article/details/44205143

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!