在Linux中吩翻,文件包括常規(guī)文件兜看、目錄、符號(hào)鏈接等狭瞎。為了方便理解细移,在本文中,文件指常規(guī)文件熊锭,目錄指常規(guī)目錄弧轧。
文件
1. 文件是如何存儲(chǔ)的?
文件是由3部分組成 的:
- 文件名: dentry
- 文件元數(shù)據(jù): inode
- 文件數(shù)據(jù):data
image.png
2. 什么是inode碗殷?
inode保存著除了文件名之外的所有文件信息精绎,包括文件類型、所有者以及權(quán)限和時(shí)間信息等锌妻, 可以使用stat
訪問(wèn)文件的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. 什么是硬鏈接代乃?
與硬鏈接相關(guān)聯(lián)的是文件inode, 本質(zhì)使用不同文件名(dentry)對(duì)相同的inode的再次引用仿粹。引用計(jì)數(shù)可以使用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
當(dāng)引用計(jì)數(shù)歸0時(shí)搁吓,文件也就無(wú)法被訪問(wèn)了,沒(méi)有了文件名(dentry)牍陌,這也就是文件刪除(rm)的原理.
4. 什么是軟鏈接擎浴?
軟鏈接在Windows中可以認(rèn)為是快捷方式,內(nèi)部具體的實(shí)現(xiàn)為:
image.png
軟鏈接和源文件是兩個(gè)文件毒涧,具有兩個(gè)不同的inode + data贮预。軟鏈接文件在數(shù)據(jù)區(qū)域存儲(chǔ)著對(duì)源文件的引用。
[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 # 源文件字節(jié)數(shù)為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 # 快捷方式字節(jié)數(shù)為4
目錄
在Linux中契讲,目錄也是文件仿吞, 所以上述文件中內(nèi)容在目錄中全部適用,特殊的地方在于目錄的數(shù)據(jù)區(qū)域存儲(chǔ)的是子文件/文件夾與inode的映射關(guān)系;
image.png