成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux文件系統(tǒng)中的硬鏈接及常見面試題

系統(tǒng) Linux
如果能對inode的概念有所了解,對理解本文會有所幫助。如果對inode的概念不太清楚也沒有關(guān)系,我們會捎帶介紹一下。

如果能對inode的概念有所了解,對理解本文會有所幫助。如果對inode的概念不太清楚也沒有關(guān)系,我們會捎帶介紹一下。在文件系統(tǒng)的實現(xiàn)層面,我們可以認為包含兩個組件:一個是包含數(shù)據(jù)塊的池子,池子中的數(shù)據(jù)塊是等大小的,比如4KB,8KB等;另外一個是管理這些數(shù)據(jù)塊的數(shù)據(jù)庫。當(dāng)普通用戶訪問文件數(shù)據(jù)時,正是通過前面所說的數(shù)據(jù)庫來找到文件對應(yīng)的數(shù)據(jù)塊的。

什么是inode

inode是Linux(Unix)操作系統(tǒng)中文件系統(tǒng)的一個概念。inode的全稱為index node,也就是索引節(jié)點。那么inode是用來索引什么的呢?其實inode表示的是一個文件,它是用來索引文件數(shù)據(jù)的。以Ext3文件系統(tǒng)為例,其文件數(shù)據(jù)通過間接塊的方式來管理,inode通過一個間接塊樹來管理整個文件的數(shù)據(jù)。

圖1 Ext3間接塊數(shù)組組織形式圖1 Ext3間接塊數(shù)組組織形式

如圖所示,inode中包含索引信息,通過文件的邏輯地址和inode中的索引信息,可以很方面的找到文件特定位置的數(shù)據(jù)。關(guān)于inode與文件系統(tǒng)的更多知識,大家可以翻閱本號的其它文章,本文不再贅述。

需要注意的是,在inode中并沒有文件名稱相關(guān)的信息。文件名稱相關(guān)的信息是存儲在目錄當(dāng)中,在目錄當(dāng)中有文件名稱與inode ID之間的對應(yīng)關(guān)系,具體如下所示。由于有兩者之間的對應(yīng)關(guān)系,因此可以根據(jù)文件名輕松地獲取到inode ID,進而得到inode的信息。

圖2 目錄內(nèi)數(shù)據(jù)格式圖2 目錄內(nèi)數(shù)據(jù)格式

什么是硬鏈接

文件的硬鏈接是一個指向inode的目錄項。硬鏈接從表面上來說就是一個文件,但是該文件是基于原始文件創(chuàng)建的鏈接文件。硬鏈接與源文件指向相同的inode,因此其數(shù)據(jù)也是完全一樣的。

相對于硬鏈接,還有一個軟鏈接的概念。軟鏈接是指向一個具體的文件的,而非文件的inode,所以當(dāng)文件重新命名時,軟鏈接就會失效。因為該軟鏈接原本指向的文件不存在了。而硬鏈接則不會存在這種情況。

假設(shè)如圖所示的目錄結(jié)構(gòu),在目錄Linux中有file1和file2兩個文件。目錄編程語言中有file2文件一個指向目錄linux中file1的硬鏈接。這是在用戶層面的形態(tài),那么在文件系統(tǒng)層面是如何的呢?

在文件系統(tǒng)層面,我們知道文件系統(tǒng)通過一個inode來指示一個文件(包括目錄)的內(nèi)容。目錄“電子書”的inode ID是15,其內(nèi)容圖下圖所示,包含Linux,編程語言等子目錄,對應(yīng)的inode ID分別如圖所示。

對于目錄“Linux”來說,其中包含文件file1和file2,inode ID分別是19和20。目錄“編程語言”的包含文件file2和硬鏈接file1_hlink,可以看出file1的inode ID和硬鏈接file1_hlink的inode ID是相同的,都指向19。inode 19 的內(nèi)容如下所示。

通過上圖可以看出硬鏈接與源文件的對應(yīng)關(guān)系。

如何在Linux創(chuàng)建一個硬鏈接

前面介紹了很多原理性的內(nèi)容,那么如何在Linux中創(chuàng)建一個硬鏈接呢?很簡單,通過ln命令即可,如下是創(chuàng)建硬鏈接的命令格式。

ln target_file link_name

上述命令將為文件target_file創(chuàng)建一個名為link_name的硬鏈接。通過對比你會發(fā)現(xiàn)兩者沒有任何差異,包括文件內(nèi)容和屬性。

如果你通過ls -li命令可以看到,兩個文件的inode ID是相同的(第一列的內(nèi)容),而文件的計數(shù)則是2(rwx權(quán)限后面的數(shù)字),說明有兩個文件名稱指向該inode。

134195 -rw-r--r-- 2 sunnyzhang sunnyzhang        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 sunnyzhang sunnyzhang        0 Jul 17 19:49  link_name

下面這些知識點在面試中經(jīng)常遇到

在后端程序員面試過程中經(jīng)常會遇到鏈接相關(guān)的面試題,下面幾個面試題是硬鏈接相關(guān)的題目。

如果一個文件有硬鏈接,刪除源文件會怎樣?

如果存在硬鏈接,刪除源文件將不會刪除文件的數(shù)據(jù)。通過硬鏈接仍然能夠訪問文件的數(shù)據(jù)。

為什么會出現(xiàn)這種情況?這是因為當(dāng)有目錄項指向inode的時候,inode會增加引用計數(shù)。通常情況下引用計數(shù)是1,當(dāng)有一個硬鏈接時為2,再有一個硬鏈接的時候就變成了3。

當(dāng)我們刪除普通文件(無硬鏈接)的時候,首先會刪除目錄項中的內(nèi)容,然后將inode的引用計數(shù)減1,如果此時inode中引用計數(shù)為0,則刪除該inode,同時刪除相關(guān)聯(lián)的數(shù)據(jù)。如果非0,則只刪除目錄項,而不刪除相關(guān)內(nèi)容。所以,如果存在硬鏈接則可以正常訪問文件內(nèi)容。

為什么沒法為目錄創(chuàng)建硬鏈接?

我們可以為目錄創(chuàng)建一個軟鏈接,但是當(dāng)我們?yōu)槟夸泟?chuàng)建硬鏈接的時候?qū)霈F(xiàn)如下錯誤提示:

ln: newdir/test_dir: hard link not allowed for directory

為什么不能為目錄創(chuàng)建硬鏈接呢?這是因為在目錄中除了文件相關(guān)內(nèi)容外,還有一個指向父目錄的目錄項,具體如下圖所示的".."目錄。如果我們在其它目錄創(chuàng)建該目錄的硬鏈接,那么該內(nèi)容就會被改寫,從而導(dǎo)致混亂。

除了導(dǎo)致目錄數(shù)據(jù)混亂外,還有一種問題就是會形成路徑環(huán)。至于如何形成路徑環(huán)本文不再贅述,大家可以自己思考一下。

能否區(qū)分源文件與硬鏈接?

實際上并沒有任何信息區(qū)分硬鏈接和源文件。如果我們在文件名命名規(guī)則上沒有限制,那么我們將無法區(qū)分兩者。也就是說,文件本身也是一個硬鏈接。

134195 -rw-r--r-- 2 sunnyzhang sunnyzhang        0 Jul 17 19:49  target_file
134195 -rw-r--r-- 2 sunnyzhang sunnyzhang        0 Jul 17 19:49  link_target_file

比如上面這個例子,我們可以通過文件名稱來知道哪個是硬鏈接。但是并沒有其它信息進行區(qū)分。

如何查找一個文件的硬鏈接?

如果你發(fā)現(xiàn)一個文件的引用計數(shù)大于1,那么該文件肯定是有硬鏈接的。那么如何找到這個文件的所有硬鏈接呢?其實很簡單,通過find命令就行。find命令有個-inum選項,用于查找指定inode ID的文件,具體如下。

find . -inum inode_number
責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2021-07-16 10:20:56

Linux 硬鏈接Linux 系統(tǒng)

2009-06-02 15:11:11

Hibernate面試題查詢

2015-09-29 09:24:22

Node.js面試題

2017-12-22 13:38:55

2018-09-11 10:04:27

程序員面試數(shù)據(jù)結(jié)構(gòu)

2023-11-15 08:27:46

Linux系統(tǒng)

2021-01-14 05:12:19

Http協(xié)議面試

2024-09-26 10:10:00

MyBatis數(shù)據(jù)庫

2017-12-04 13:30:12

Linux文件系統(tǒng)鏈接

2017-02-28 20:00:17

Linux文件系統(tǒng)對比

2009-12-18 17:08:10

Linux常見文件系統(tǒng)

2009-06-16 14:03:16

Hibernate面試Hibernate面試

2020-03-01 15:13:05

Linux文件系統(tǒng)

2011-03-29 14:31:41

CC++

2023-08-18 08:13:11

k8s容器

2018-01-26 14:39:55

Nginx網(wǎng)頁服務(wù)器

2020-06-01 19:00:42

Linux軟鏈接硬鏈接

2013-05-22 10:04:18

Hibernate面試問題

2017-09-25 10:00:18

Hadoop面試題答案解析

2017-03-30 10:13:11

Linux內(nèi)核文件系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本成人中文字幕在线观看 | 免费在线观看一区二区 | 欧美1页| 久草在线 | 蜜桃黄网 | 国产传媒毛片精品视频第一次 | 欧美精品欧美精品系列 | 久久久久一区 | 免费视频二区 | 欧美在线视频观看 | 国产精品久久久久久久久久三级 | 久久九七 | 欧美久久一区二区 | 午夜爱爱网 | 天天拍天天操 | 久久国产精品久久久久久 | 久久夜色精品国产 | 中文字幕1区2区3区 日韩在线视频免费观看 | 久久国产精品久久国产精品 | 羞羞视频免费观看入口 | 色爱区综合 | 国产精品一区免费 | 91日韩在线| 欧美在线一二三 | 一区二区三区在线免费看 | 国外激情av | 91久久 | 国产日韩欧美在线 | 日韩av成人在线 | 91精品免费视频 | 午夜视频在线观看网站 | 国产成人精品一区二区三区在线 | 国产一级特黄真人毛片 | 夜夜爽99久久国产综合精品女不卡 | 国产中文 | 羞羞视频在线免费 | 国产视频精品在线观看 | 国产精品久久久久久久久久久久午夜片 | 免费九九视频 | 欧美三级在线 | 国产精品久久久亚洲 |