inode
了解一下文件系統(tǒng):
Linux ext2文件系統(tǒng),上圖為磁盤文件系統(tǒng)圖(內(nèi)核內(nèi)存映像肯定有所不同),磁盤是典型的塊設(shè)備,硬盤分區(qū)被
劃分為一個個的block。一個block的大小是由格式化的時候確定的,并且不可以更改。例如mke2fs的-b選項可以設(shè)
定block大小為1024、2048或4096字節(jié)。而上圖中啟動塊(Boot Block)的大小是確定的
- Block Group:ext2文件系統(tǒng)會根據(jù)分區(qū)的大小劃分為數(shù)個Block Group。而每個Block Group都有著相
同的結(jié)構(gòu)組成。政府管理各區(qū)的例子 - 超級塊(Super Block):存放文件系統(tǒng)本身的結(jié)構(gòu)信息。記錄的信息主要有:bolck 和 inode的總量,
未使用的block和inode的數(shù)量,一個block和inode的大小,最近一次掛載的時間,最近一次寫入數(shù)據(jù)的
時間,最近一次檢驗磁盤的時間等其他文件系統(tǒng)的相關(guān)信息。Super Block的信息被破壞,可以說整個
文件系統(tǒng)結(jié)構(gòu)就被破壞了—備份 - GDT,Group Descriptor Table:塊組描述符,描述塊組屬性信息
- 塊位圖(Block Bitmap):Block Bitmap中記錄著Data Block中哪個數(shù)據(jù)塊已經(jīng)被占用,哪個數(shù)據(jù)塊沒
有被占用 - inode位圖(inode Bitmap):每個bit表示一個inode是否空閑可用。
- inode Table 節(jié)點表:存放文件屬性 如 文件大小,所有者,最近修改時間等,保存了分組內(nèi)部所有可用的inode(已經(jīng)使用/沒有使用)
- Date blocks :保存的是分組內(nèi)部所有文件的數(shù)據(jù)塊
軟硬鏈接
創(chuàng)建軟硬鏈接
創(chuàng)建軟鏈接:
我們先隨便touch
一個文件file.txt
,我們使用ll -li
命令查看到的前面的數(shù)字是inode
的值,這里是658016
給一個文件創(chuàng)建軟鏈接命令:
ln -s file.txt soft_file.link
軟鏈接的inode
值是658307
創(chuàng)建硬鏈接:
給一個文件創(chuàng)建硬鏈接命令:
ln file.txt hard_file.link
我們可以發(fā)現(xiàn)file.txt
和hard_link
的屬性和inode都是一樣的
理解硬鏈接
我們給file.txt
文件中追加重定向一些數(shù)據(jù):
我們使用cat
命令查看file.txt
與hard_file.link
里面的數(shù)據(jù),可以發(fā)現(xiàn)都是一樣的內(nèi)容
建立一個硬鏈接,究竟是做了什么?
?建立硬鏈接,根本沒有創(chuàng)建新文件!因為沒有給硬鏈接分配獨立的inode既然沒有創(chuàng)建文件,那么你一定沒有自己的屬性集合和內(nèi)容集合你用的一定是別人的inode和內(nèi)容
這個數(shù)字2
,其實就是inode
里面用來引用計數(shù)的硬鏈接數(shù)。
建立一個硬鏈接,就是在指導(dǎo)的路徑下,新增文件名和inode編號的映射關(guān)系
什么時候一個文件算是被真正刪除了?
?我們將file.txt
刪除后,它的硬鏈接個數(shù)會-1
當(dāng)一個人文件的硬鏈接數(shù)變?yōu)?的時候,這個文件才算真正被刪除了
理解軟鏈接
我們將軟鏈接的文件file.txt
刪除,我們會發(fā)現(xiàn)它的軟鏈接標(biāo)紅了,且我們使用cat
命令顯示找不到這個文件,同樣也可以說明,軟鏈接不是通過inode
編號去尋找file.txt
,因為硬鏈接跟原文件inode編號是一樣的,軟鏈接是通過文件路徑來尋找的。
比如我們重新創(chuàng)建一個同名文件,他有全新的inode
,這時候軟鏈接就恢復(fù)了,但是跟之前的硬鏈接已經(jīng)沒關(guān)系了:
一般情況下,軟鏈接相當(dāng)于windows下軟件的快捷方式
總結(jié)軟硬件鏈接:
- 軟硬鏈接有什么區(qū)別:是否具有獨立的inode
- 軟鏈接具有獨立的inode,可以被當(dāng)做獨立文件看待
- 硬鏈接沒有獨立的inode
軟鏈接的作用:
下面是完整的shell操作流程:
[AMY@VM-12-15-centos lesson_13]$ mkdir -p ./bin/exe/mydir/
[AMY@VM-12-15-centos lesson_13]$ cd ./bin/exe/mydir/
[AMY@VM-12-15-centos mydir]$ ll
total 0
[AMY@VM-12-15-centos mydir]$ touch hello.c
[AMY@VM-12-15-centos mydir]$ vim hello.c
[AMY@VM-12-15-centos mydir]$ cat hello.c
#include <stdio.h>
int main()
{
printf("hello world!!\n");
return 0;
}
[AMY@VM-12-15-centos mydir]$ gcc -o hello hello.c
[AMY@VM-12-15-centos mydir]$ ll
total 16
-rwxrwxr-x 1 AMY AMY 8360 Jun 24 16:28 hello
-rw-rw-r-- 1 AMY AMY 79 Jun 24 16:27 hello.c
[AMY@VM-12-15-centos mydir]$ cd -
/home/AMY/zt/lesson_13
[AMY@VM-12-15-centos lesson_13]$ pwd
/home/AMY/zt/lesson_13
[AMY@VM-12-15-centos lesson_13]$ ln -s ./bin/exe/mydir/hello myhello
[AMY@VM-12-15-centos lesson_13]$ ll -i
total 4
658016 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:26 bin
658313 lrwxrwxrwx 1 AMY AMY 21 Jun 24 16:30 myhello -> ./bin/exe/mydir/hello
[AMY@VM-12-15-centos lesson_13]$ ./myhello
hello world!!
上面的主要意思就是在該路徑lesson_13
下面創(chuàng)建一個目錄到./bin/exe/mydir/
,然后在這個路徑寫一個程序hello.c
用來輸出hello world!!
,然后回到原路徑,創(chuàng)建一個軟鏈接ln -s ./bin/exe/mydir/hello myhello
,運行程序./myhello
輸出hello world!!
硬鏈接的作用:
思考下面為什么普通文件的硬鏈接個數(shù)是1
,而目錄文件的硬鏈接是2
?
一個普通文件,本身就有一個文件名和自己的inode具有一個映射關(guān)系
而一個目錄文件,除了本身文件名與自己的inode的一個映射關(guān)系,在目錄里面還有
.
表示當(dāng)前文件,與目錄也具有一個映射關(guān)系,所以它的初始硬鏈接個數(shù)是2.
我們在mydir
里面再創(chuàng)建一個目錄,它的硬鏈接就是3
了
[AMY@VM-12-15-centos empty]$ ll -ia
total 8
658308 drwxrwxr-x 2 AMY AMY 4096 Jun 24 16:57 .
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 ..
[AMY@VM-12-15-centos empty]$ cd ..
[AMY@VM-12-15-centos mydir]$ ll -ia
total 12
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 .
658301 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:47 ..
658308 drwxrwxr-x 2 AMY AMY 4096 Jun 24 16:57 empty
[AMY@VM-12-15-centos mydir]$ cd ..
[AMY@VM-12-15-centos lesson_13]$ ll -ia
total 12
658301 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:47 .
664585 drwxrwxr-x 17 AMY AMY 4096 Jun 23 20:38 ..
658016 -rw-rw-r-- 1 AMY AMY 0 Jun 24 16:47 file.txt
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 mydir
文章來源:http://www.zghlxwxcb.cn/news/detail-514348.html
如有錯誤或者不清楚的地方歡迎私信或者評論指出????文章來源地址http://www.zghlxwxcb.cn/news/detail-514348.html
到了這里,關(guān)于【Linux】什么是文件系統(tǒng)及inode?如何創(chuàng)建軟硬鏈接?軟硬鏈接有什么作用?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!