i節(jié)點(diǎn)
在Linux中創(chuàng)建文件時(shí)拼岳,Linux會(huì)做兩件事情枝誊,第一是在設(shè)備上保留一塊空間存儲(chǔ)數(shù)據(jù),第二是創(chuàng)建一個(gè)i節(jié)點(diǎn)(i-node)存放該文件的基本信息惜纸。
i節(jié)點(diǎn)存放文件所需的全部文件系統(tǒng)信息叶撒,它通常包含:
- 以字節(jié)為單位的文件長度
- 包含該文件的設(shè)備名稱
- 擁有者的用戶標(biāo)識(shí)及id
- 所屬組的用戶標(biāo)識(shí)及id
- 文件權(quán)限
- 上一次修改時(shí)間
- 上一次訪問時(shí)間
- i節(jié)點(diǎn)的上一次修改時(shí)間
- 指向該文件的鏈接數(shù)
- 文件的類型
- 分配給該文件的塊數(shù)
- ……
用戶不必了解i節(jié)點(diǎn)的內(nèi)容,但是也可以很方便的查看耐版,使用stat FILENAME
查看你文件的i節(jié)點(diǎn)的信息:
$ stat name
File: 'name'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd01h/64769d Inode: 1709368 Links: 3
Access: (0775/drwxrwxr-x) Uid: ( 1001/ tom) Gid: ( 1001/ tom)
Access: 2018-06-05 16:47:54.643771585 +0800
Modify: 2018-05-12 10:37:53.792094043 +0800
Change: 2018-06-05 16:48:35.487772167 +0800
Birth: -
文件系統(tǒng)將i節(jié)點(diǎn)存放在一個(gè)大表中祠够,這個(gè)表叫i節(jié)點(diǎn)表。
目錄其實(shí)是一張表粪牲,這個(gè)表的每一項(xiàng)都記錄著目錄下的一個(gè)文件的文件名和i節(jié)點(diǎn)號(hào)古瓤。當(dāng)訪問文件時(shí),雖然用戶輸入的是文件名,但是系統(tǒng)會(huì)通過文件名后面記錄的i節(jié)點(diǎn)號(hào)找到i節(jié)點(diǎn)落君,再通過i節(jié)點(diǎn)中的內(nèi)容找到文件的存儲(chǔ)位置穿香,讀出文件。
使用ls -i FILENAME
即可查看文件的i節(jié)點(diǎn)號(hào)叽奥。下面的例子首先創(chuàng)建了文件now.txt
扔水,其內(nèi)容是Hello, World!
,之后查看了其i節(jié)點(diǎn)號(hào)和i節(jié)點(diǎn)的內(nèi)容朝氓,最后查看了文件內(nèi)容:
$ echo "Hello, World!" > now.txt
$ ls -i now.txt
1709370 now.txt
$ stat now.txt
File: 'now.txt'
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1709370 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1001/ tom) Gid: ( 1001/ tom)
Access: 2018-06-05 17:06:49.791782004 +0800
Modify: 2018-06-05 17:06:49.791782004 +0800
Change: 2018-06-05 17:06:49.791782004 +0800
Birth: -
$ cat now.txt
Hello, World!
文件名魔市、i節(jié)點(diǎn)和文件內(nèi)容的關(guān)系示意圖如下:
硬鏈接
可以使用ln
命令創(chuàng)建一個(gè)硬鏈接(或者叫鏈接),它的特點(diǎn)是會(huì)有多個(gè)目錄項(xiàng)指向同一個(gè)i節(jié)點(diǎn)赵哲。從用戶的角度來看待德,用戶的文件具有多個(gè)文件名,這些文件名都指向同一個(gè)文件枫夺。
通過下面的命令創(chuàng)建新鏈接:
ln TARGET LINK_NAME
其中TARGET
是一個(gè)已經(jīng)存在的普通文件将宪,而LINK_NAME
是新鏈接的名稱。
例如橡庞,下面的命令為now.txt
創(chuàng)建一個(gè)在homework
目錄下的名為newNow.txt
的鏈接:
$ ln now.txt homework/newNow.txt
$ ls -i now.txt homework/newNow.txt
1709370 homework/newNow.txt 1709370 now.txt
查看二者的i節(jié)點(diǎn)號(hào):
$ ls -i now.txt homework/newNow.txt
1709370 homework/newNow.txt 1709370 now.txt
可以看到较坛,它們確實(shí)指向了同一個(gè)i節(jié)點(diǎn)。
軟鏈接
軟鏈接也叫做符號(hào)鏈接扒最,這種鏈接的特點(diǎn)是會(huì)新建一個(gè)全新的文件丑勤,在該文件中記錄目標(biāo)文件的路徑。
使用ln
命令的-s
選項(xiàng)即可創(chuàng)建軟鏈接吧趣,下面為now.txt
創(chuàng)建一個(gè)名為newSNow.txt
的軟鏈接:
$ ln -s now.txt newSNow.txt
查看其i節(jié)點(diǎn)號(hào)法竞,二者并不相同:
$ ls -il now.txt newSNow.txt
1710866 lrwxrwxrwx 1 tom tom 7 Jun 5 17:35 newSNow.txt -> now.txt
1709370 -rw-rw-r-- 2 tom tom 14 Jun 5 17:06 now.txt
newSNow.txt -> now.txt
表示newSNow.txt
是指向now.txt
的軟鏈接。