在Linux中,文件包括常规文件、目录、符号链接等。为了方便理解,在本文中,文件指常规文件,目录指常规目录。
文件
1. 文件是如何存储的?
文件是由3部分组成 的:
- 文件名: dentry
- 文件元数据: inode
- 文件数据:data
2. 什么是inode?
inode保存着除了文件名之外的所有文件信息,包括文件类型、所有者以及权限和时间信息等, 可以使用stat
访问文件的inode:
[root@MiWiFi-R3-srv test]# stat file
File: ‘file’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 33878261 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2017-05-29 13:40:51.984844445 +0800
Modify: 2017-05-29 13:40:51.984844445 +0800
Change: 2017-05-29 13:40:51.984844445 +0800
Birth: -
3. 什么是硬链接?
与硬链接相关联的是文件inode, 本质使用不同文件名(dentry)对相同的inode的再次引用。引用计数可以使用ls -l
查看:
[root@MiWiFi-R3-srv test]# ln file hard_link_to_file
[root@MiWiFi-R3-srv test]# ll
total 0
-rw-r--r--. 2 root root 0 May 29 13:40 file # 引用为2
-rw-r--r--. 2 root root 0 May 29 13:40 hard_link_to_file
image.png
当引用计数归0时,文件也就无法被访问了,没有了文件名(dentry),这也就是文件删除(rm)的原理.
4. 什么是软链接?
软链接在Windows中可以认为是快捷方式,内部具体的实现为:
image.png软链接和源文件是两个文件,具有两个不同的inode + data。软链接文件在数据区域存储着对源文件的引用。
[root@MiWiFi-R3-srv test]# ln -s file soft_link_to_file
[root@MiWiFi-R3-srv test]# ll
total 0
-rw-r--r--. 2 root root 0 May 29 13:40 file # 源文件字节数为0
-rw-r--r--. 2 root root 0 May 29 13:40 hard_link_to_file
lrwxrwxrwx. 1 root root 4 May 29 19:49 soft_link_to_file -> file # 快捷方式字节数为4
目录
在Linux中,目录也是文件, 所以上述文件中内容在目录中全部适用,特殊的地方在于目录的数据区域存储的是子文件/文件夹与inode的映射关系;
image.png
网友评论