0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

軟鏈接、硬鏈接的區(qū)別

科技綠洲 ? 來(lái)源:Linux開(kāi)發(fā)架構(gòu)之路 ? 作者:Linux開(kāi)發(fā)架構(gòu)之路 ? 2023-11-09 11:41 ? 次閱讀

1 文件系統(tǒng)的尋址過(guò)程——以cat命令是如何讀出文件內(nèi)容、文件的刪除過(guò)程為例

操作系統(tǒng)級(jí)別看存儲(chǔ)空間的話,是分為很多的block塊,這些block塊是分為很多種類的

圖片

當(dāng)我們使用cat命令查看文件的時(shí)候,比如 cat /1.txt ,那么首先會(huì)去尋找根目錄/,Linux一切皆文件,目錄也是文件,根據(jù)目錄名找到inode編號(hào),然后查看歸屬信息和權(quán)限,是否擁有cat權(quán)限,如果有的話再根據(jù)指針尋找指向的內(nèi)容,/的inode block的指針應(yīng)該是指向/目錄的目錄塊directiry block。然后在/目錄的directiry block塊中搜索1.txt文件,如果有,找到它的inode號(hào),然后根據(jù)1.txt的inode編號(hào)找到該文件的inode block,檢測(cè)歸屬和權(quán)限,如果有權(quán)限,則根據(jù)指針尋找指針指向,該指針指向的就是文件1.txt的具體內(nèi)容所在的數(shù)據(jù)塊。這樣就可以把文件內(nèi)容讀出來(lái)了。

圖片

如果我們要?jiǎng)h除一個(gè)文件的時(shí)候,比如刪除1.txt,首先在super block中,會(huì)把1.txt的inode編號(hào)標(biāo)記為free(自由的),也就是可用的。然后再去該文件所在的目錄塊(比如/目錄)中把a(bǔ).txt和inode編號(hào)1111的映射關(guān)系刪掉。最后一步,把1.txt的數(shù)據(jù)所在的數(shù)據(jù)塊標(biāo)記為free,也就是可用的,如果有其它數(shù)據(jù)要存儲(chǔ),那么這個(gè)block是可以分配的。但是,實(shí)際上,block里面的內(nèi)容還沒(méi)有被抹去,刪除只是刪除了尋址的方式和映射關(guān)系,真正的文件數(shù)據(jù)還是保存在block中的。

所以,刪除的數(shù)據(jù)是可以恢復(fù)的,首先在super block中把inode1111重新標(biāo)記為不可分配,然后在directory block中把1.txt和inode1111的映射關(guān)系重新建立起來(lái),那么數(shù)據(jù)就恢復(fù)成功了。數(shù)據(jù)恢復(fù)就是一個(gè)重新建立關(guān)系,打通尋址路徑的過(guò)程。

文件只有在被覆蓋的時(shí)候,才算是真正的刪除了,也就是有當(dāng)其他數(shù)據(jù)正好存在1.txt數(shù)據(jù)所用的block中時(shí),把原來(lái)1.txt文件的內(nèi)容覆蓋掉,這才算是真正的刪除。所以說(shuō),沒(méi)有真正的刪除,我們沒(méi)有辦法直接把物理硬盤(pán)的數(shù)據(jù)抹去,只能通過(guò)刪除映射關(guān)系,覆蓋原數(shù)據(jù)的方式去刪除。(我們看到的磁盤(pán)還有多少G空間都是一個(gè)邏輯的概念,實(shí)際上你的硬盤(pán)可能已經(jīng)全是數(shù)據(jù)了,只不過(guò)有的空間不可用,它保存了你需要的數(shù)據(jù),而那些被標(biāo)記為free狀態(tài)的block是可用的,即使它上面有數(shù)據(jù)也是你已經(jīng)刪除不需要的數(shù)據(jù),當(dāng)你保存新數(shù)據(jù)的時(shí)候就會(huì)分配一些被標(biāo)記為free狀態(tài)的block給你,你的新數(shù)據(jù)會(huì)覆蓋掉原來(lái)的數(shù)據(jù),這樣新數(shù)據(jù)就被保存了。所以,一定要分清楚邏輯的可用空間概念和物理硬盤(pán)的概念)

圖片

綜上,磁盤(pán)沒(méi)有真正的刪除操作,只能覆蓋。而格式化的過(guò)程就是建立文件系統(tǒng)的過(guò)程,也就是把各種block塊劃分出來(lái)的過(guò)程。

如圖,我們用ll命令查看到的信息就是存在18653這個(gè)inode block中的

圖片

所以,即便是建新文件,磁盤(pán)空間也會(huì)被占用(雖然沒(méi)有實(shí)際數(shù)據(jù),但是會(huì)有inode中的信息)

圖片

不管是新建還是刪除文件,第一步都是找super block,分配編號(hào)或者把編號(hào)標(biāo)記為free,第二步去目錄中增加或刪除映射關(guān)系,第三步給文件的inode塊關(guān)聯(lián)一個(gè)數(shù)據(jù)塊或把關(guān)聯(lián)的數(shù)據(jù)塊標(biāo)記free。

2 深入探析軟鏈接和硬鏈接本質(zhì)

軟鏈接相當(dāng)于Windows下的快捷方式,修改軟鏈接文件,源文件內(nèi)容也會(huì)改變,修改源文件內(nèi)容,軟鏈接文件內(nèi)容隨之改變。刪除軟鏈接不影響源文件,刪除源文件軟鏈接文件失效。

圖片

修改硬鏈接文件,源文件內(nèi)容也會(huì)改變,修改源文件內(nèi)容,硬鏈接文件內(nèi)容隨之改變。刪除硬鏈接文件,源文件無(wú)影響;刪除源文件,硬鏈接文件無(wú)影響。

圖片

那么軟鏈接和硬鏈接這些特性是怎么來(lái)的呢?首先我們知道,文件存儲(chǔ)分為兩部分,一部分是inode block,另一部分是數(shù)據(jù)block。

軟鏈接是指向文件名的

圖片

硬鏈接是指向inode的

圖片

一個(gè)分區(qū)就是一個(gè)文件系統(tǒng),軟鏈接可以跨分區(qū)而硬鏈接不可以跨分區(qū)。

圖片

這是因?yàn)椴煌謪^(qū)可以有相同的文件名,但是inode唯一標(biāo)識(shí)一塊block。硬鏈接是指向inode編號(hào)的,假如說(shuō)我現(xiàn)在有一個(gè)1.txt的inode編號(hào)為12345,該文件在磁盤(pán)分區(qū)1上面。我現(xiàn)在在磁盤(pán)分區(qū)2中創(chuàng)建一個(gè)指向inode12345的硬鏈接文件,這兩個(gè)12345inode編號(hào)指向的是自己分區(qū)的block塊,這兩個(gè)block根本就不是同一塊磁盤(pán)空間。

圖片

圖片

在操作系統(tǒng)級(jí)別,維護(hù)的都是inode編號(hào),也就是說(shuō)操作系統(tǒng)不認(rèn)文件名,只認(rèn)inode編號(hào)。我們知道,在文件系統(tǒng)中,inode block中有一個(gè)指針,軟鏈接的指針就是指向源文件的文件名的。

圖片

實(shí)際上,在每個(gè)目錄中都有兩個(gè)隱藏文件,.是當(dāng)前目錄的硬鏈接,…是上一級(jí)目錄的硬鏈接。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7030

    瀏覽量

    89034
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4314

    瀏覽量

    85846
  • Block
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    14700
  • 軟鏈接
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2220
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文弄懂Linux鏈接鏈接

    在Linux系統(tǒng)下,有兩種鏈接文件:一種是鏈接(Hard Link);另一種是鏈接,也稱為符號(hào)鏈接
    發(fā)表于 10-21 14:26 ?1350次閱讀

    Linux中的、鏈接區(qū)別

    /inittab /test/inittab.hard   發(fā)現(xiàn)鏈接與真實(shí)文件的大小和創(chuàng)建日期完全相同,類似于copy,同步更新。   3:鏈接與拷貝的
    發(fā)表于 02-04 16:34

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

    。創(chuàng)建方法都很簡(jiǎn)單:1. 鏈接(符號(hào)鏈接) ln -ssourcetarget 2. 3. 鏈接 (實(shí)體
    發(fā)表于 12-06 10:55

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

    。創(chuàng)建方法都很簡(jiǎn)單:1.鏈接(符號(hào)鏈接) ln -ssourcetarget2.3.鏈接 (實(shí)體鏈接
    發(fā)表于 12-06 13:34

    【Linux基礎(chǔ)】Linux鏈接簡(jiǎn)介

    ,Linux鏈接要系統(tǒng)分配額外的空間用于建立新的索引節(jié)點(diǎn)和保存原文件的路徑?! ∥濉inux鏈接
    發(fā)表于 09-20 15:50

    linux下鏈接鏈接區(qū)別

    在linux系統(tǒng)中,鏈接分兩種 :一種被稱為鏈接(Hard Link),另一種被稱為符號(hào)鏈接鏈接
    發(fā)表于 11-15 16:26

    嵌入式開(kāi)發(fā)的鏈接鏈接有什么不同嗎

    為了搞懂這二者關(guān)系,我在網(wǎng)上搜集了不少的資料,特意整理一番。1、鏈接鏈接實(shí)際上是為文件建一個(gè)別名,鏈接文件和原文件實(shí)際上是同一個(gè)文件。
    發(fā)表于 12-21 06:00

    鏈接鏈接區(qū)別在哪

    鏈接鏈接區(qū)別  鏈接(hard link)
    發(fā)表于 12-21 07:21

    你知道Linux連接和鏈接?

    Linux鏈接分兩種,一種被稱為鏈接(Hard Link),另一種被稱為符號(hào)鏈接(Symbolic Link)。默認(rèn)情況下,ln命令產(chǎn)生硬鏈接
    發(fā)表于 04-25 18:00 ?1688次閱讀

    需要了解Linux的鏈接鏈接

    鏈接鏈接是 Linux 文件系統(tǒng)中的一個(gè)重要概念,其涉及文件系統(tǒng)中的索引節(jié)點(diǎn) (index node 又稱 inode),而索引節(jié)點(diǎn)對(duì)象是 Linux 虛擬文件系統(tǒng) (VFS)
    發(fā)表于 04-28 17:01 ?786次閱讀
    需要了解Linux的<b class='flag-5'>硬</b><b class='flag-5'>鏈接</b>與<b class='flag-5'>軟</b><b class='flag-5'>鏈接</b>

    ln 連接與鏈接兩者有什么區(qū)別

    ln命令可以生成鏈接鏈接,也可叫做符號(hào)鏈接和實(shí)體鏈接。
    發(fā)表于 11-12 14:35 ?4131次閱讀

    Linux中的鏈接鏈接都用在哪些場(chǎng)合?

    最近,看到很多文章都在介紹 Linux 中的文件系統(tǒng),其中就包括:inode 節(jié)點(diǎn)、鏈接、鏈接等重要的概念。 于是就有小伙伴私信問(wèn)我:這些概念我都懂,但是我能利用他們來(lái)完成什么工作
    的頭像 發(fā)表于 06-21 16:33 ?1673次閱讀

    鏈接PK鏈接

    鏈接PK鏈接
    的頭像 發(fā)表于 10-12 18:16 ?1157次閱讀

    鏈接鏈接區(qū)別

    鏈接又叫符號(hào)鏈接,和原文件不是一個(gè)文件,類似Windows的快捷方式,如果原始文件被刪除,所有指向它的符號(hào)鏈接也就都被破壞了
    的頭像 發(fā)表于 04-19 10:09 ?1215次閱讀
    <b class='flag-5'>軟</b><b class='flag-5'>鏈接</b>與<b class='flag-5'>硬</b><b class='flag-5'>鏈接</b>的<b class='flag-5'>區(qū)別</b>