吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux系統中軟鏈接和硬鏈接到底有什么區別

Wildesbeast ? 來源:今日頭條 ? 作者:Linux速推文章 ? 2020-04-06 17:33 ? 次閱讀

我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其并不包含文件名,inode 號即索引節點號)才是文件的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。而有一種方法可以快速的尋找到數據元,那就是軟硬鏈接,讓我們一起來看一下吧。

什么是鏈接?

鏈接簡單說實際上是一種文件共享的方式,是 POSIX 中的概念,主流文件系統都支持鏈接文件。

它是用來干什么的?

你可以將鏈接簡單地理解為 Windows 中常見的快捷方式(或是 OS X 中的替身),Linux 中常用它來解決一些庫版本的問題,通常也會將一些目錄層次較深的文件鏈接到一個更易訪問的目錄中。在這些用途上,我們通常會使用到軟鏈接(也稱符號鏈接)。

內容

軟鏈接和硬鏈接的區別是?下面我們進入正題,來探討一下軟硬兩種鏈接到底有什么區別?

首先,從使用的角度講,兩者沒有任何區別,都與正常的文件訪問方式一樣,支持讀寫,如果是可執行文件的話也可以直接執行。

那區別在哪呢?在底層的原理上。

為了解釋清楚,我們首先在自己的一個工作目錄下創建一個文件,然后對這個文件進行鏈接的創建:

$ touch myfile && echo "This is a plain text file." > myfile $ cat myfile This is a plain text file.

現在我們創建了一個普通地不能再普通的文件了。然后我們對它創建一個硬鏈接,并查看一下當前目錄:

$ ln myfile hard $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile

在 ls 結果的最左邊一列,是文件的 inode 值,你可以簡單把它想成 C 語言中的指針。它指向了物理硬盤的一個區塊,事實上文件系統會維護一個引用計數,只要有文件指向這個區塊,它就不會從硬盤上消失。

你也看到了,這兩個文件就如同一個文件一樣,inode 值相同,都指向同一個區塊。

然后我們修改一下剛才創建的 hard 鏈接文件:

$ echo "New line" >> hard $ cat myfile This is a plain text file. New line

可以看到,這兩個文件果真就是一個文件。 下面我們看看軟鏈接(也就是符號鏈接)和它有什么區別。

$ ln -s myfile soft $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 hard 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 myfile 25869216 lrwxr-xr-x 1 unixzii staff 6 7 8 17:47 soft -> myfile

誒,你會發現,這個軟鏈接的 inode 竟然不一樣啊,并且它的文件屬性上也有一個 l 的 flag,這就說明它與之前我們創建的兩個文件根本不是一個類型。

下面我們試著刪除 myfile 文件,然后分別輸出軟硬鏈接的文件內容:

$ rm myfile $ cat hard This is a plain text file. New line $ cat soft cat: soft: No such file or directory

之前的硬鏈接沒有絲毫地影響,因為它 inode 所指向的區塊由于有一個硬鏈接在指向它,所以這個區塊仍然有效,并且可以訪問到。 然而軟鏈接的 inode 所指向的內容實際上是保存了一個絕對路徑,當用戶訪問這個文件時,系統會自動將其替換成其所指的文件路徑,然而這個文件已經被刪除了,所以自然就會顯示無法找到該文件了。

為驗證這一猜想,我們再向這個軟鏈接寫點東西:

$ echo "Something" >> soft $ ls hard myfile soft

可以看到,剛才刪除的 myfile 文件竟然又出現了!這就說明,當我們寫入訪問軟鏈接時,系統自動將其路徑替換為其所代表的絕對路徑,并直接訪問那個路徑了。

總結

總結到這里我們其實可以總結一下了:

硬鏈接: 與普通文件沒什么不同,inode 都指向同一個文件在硬盤中的區塊軟鏈接: 保存了其代表的文件的絕對路徑,是另外一種文件,在硬盤上有獨立的區塊,訪問時替換自身路徑。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210395
  • WINDOWS
    +關注

    關注

    4

    文章

    3570

    瀏覽量

    89306
收藏 人收藏

    評論

    相關推薦

    差分輸入和和單端輸入在本質上到底有什么區別

    和和單端輸入在本質 上到底有什么區別? 因為,ADC采集的信號說到底是AINP - AINN,不管單端還是差分,采集的信號都是這兩個pad的差值。 2:將單端信號接在ADC的差分輸入接口上可以用
    發表于 12-23 07:31

    深入探討Linux系統的動態鏈接庫機制

    本文將深入探討Linux系統的動態鏈接庫機制,這其中包括但不限于全局符號介入、延遲綁定以及地址無關代碼等內容。 引言 在軟件開發過程,動
    的頭像 發表于 12-18 10:06 ?191次閱讀
    深入探討<b class='flag-5'>Linux</b><b class='flag-5'>系統</b><b class='flag-5'>中</b>的動態<b class='flag-5'>鏈接</b>庫機制

    ADS1256的SYSGCAL系統增益校準和SELFGCAL增益自動校準什么區別

    請問一個問題:ADS1256的SYSGCAL系統增益校準和SELFGCAL 增益自動校準什么區別?SELFCAL 偏移和增益自動校準又有何
    發表于 12-13 12:22

    RTOS與Linux到底有什么區別

    很多做嵌入式開發的小伙伴都存在這樣的疑惑:RTOS與Linux到底有什么區別
    的頭像 發表于 10-29 09:53 ?588次閱讀

    功放和運放到底什么區別

    想請問一下功放和運放到底什么區別,感覺只要接一個小負載,運放的輸出電流也可以很大啊?到底有什么區別
    發表于 09-10 07:00

    請問VCA821和VCA824什么區別

    請問VCA821和VCA824什么區別?兩個芯片的概述基本都一樣,但是細看里面的資料會發現一些參數圖表好像是不一樣的。那到底怎么看,什么區別
    發表于 09-05 07:59

    靜態鏈接和動態鏈接

    的時候會發現,so文件里全是亂碼,這就是使用動態鏈接庫的一個好處,可以防止核心算法的泄露。 現在就可以將mymath.c刪除掉了: 直接調用庫編譯發現程序不能運行。 下面將我們自己建立的庫移動到/usr/lib目錄下試試,然后發現代碼運行成功。 可以在Linux
    發表于 08-27 10:20

    INA141U和INA141UA的區別是什么?

    INA141U和INA141UA的區別,從規格書里面,沒有看出這兩種尾椎,到底有什么區別,請TI的技術支持指導一下,謝謝了!
    發表于 08-21 06:07

    RTOS與Linux什么區別

    RTOS(Real-Time Operating System,實時操作系統)與Linux是兩種在不同應用場景下發揮重要作用的操作系統,它們在設計理念、功能特性、應用場景以及性能表現等方面存在顯著差異。以下是對RTOS與
    的頭像 發表于 08-20 16:05 ?4220次閱讀

    NE5532和NE5532A什么區別

    NE5532和NE5532A到底有什么區別,手冊翻了2遍沒看出來,麻煩指導下。
    發表于 08-20 08:31

    e2 studio鏈接腳本的修改指導

    一般而言,程序編譯經歷下圖四個階段,鏈接是編譯的最后一步,無論是在PC上編譯代碼,還是在PC上使用嵌入式gcc工具交叉編譯嵌入式代碼,編譯過程都是如下幾步。深入理解鏈接過程是嵌入式工程師必要掌握的能力!
    的頭像 發表于 06-13 10:49 ?588次閱讀
    e2 studio<b class='flag-5'>中</b><b class='flag-5'>鏈接</b>腳本的修改指導

    包電池和包電池的區別有哪些呢?

    包電池和包電池是兩種不同類型的鋰離子電池封裝方式,它們在材料、結構、性能以及應用領域上都存在顯著的區別
    的頭像 發表于 05-07 10:25 ?1.1w次閱讀

    EWSTM8-2201 or 3101安裝說明上有的說選“是”,有的說選“否”,二者到底有什么區別?對工程什么影響?

    the installation. ......... 安裝說明上有的說選“是”,有的說選“否”,二者到底有什么區別?對工程什么影響?
    發表于 04-28 08:08

    鏈接鏈接區別

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

    什么是開關?什么是開關 開關和開關的優缺點

    什么是開關?什么是開關 開關和開關的優缺點 開關和開關是電力
    的頭像 發表于 02-20 11:43 ?7851次閱讀
    威尼斯人娱乐城代理合作| 环球百家乐的玩法技巧和规则| 正品百家乐官网游戏| 奇博国际娱乐| 钱柜百家乐的玩法技巧和规则| 旅百家乐官网赢钱律| 永利博百家乐官网现金网| 大发888登录器下载| 温州市百家乐ktv招聘| 送现金百家乐官网的玩法技巧和规则 | 百家乐博弈指| 百家乐公式球打法| 678百家乐官网博彩娱乐场开户注册 | 网上百家乐官网软件大全酷| 易博彩票网| 大发888客户端| 温州市百家乐ktv招聘| 网上百家乐优博| 百家乐官网电子路单谁| 百家乐官网游戏运营| 棋牌游戏平台开发| 百家乐平注法到6| 真人百家乐导航| 吉利百家乐官网的玩法技巧和规则 | 百家乐视频游戏大厅| 名人百家乐官网的玩法技巧和规则| 免费百家乐官网娱乐城| 棋牌游戏代理| 全讯网qtqnet| 百家乐群b28博你| 大亨百家乐游戏| 逍遥坊百家乐官网的玩法技巧和规则 | 柬埔寨百家乐官网的玩法技巧和规则 | 大发888娱乐城 手机版| 伯爵百家乐娱乐场| 百家乐发牌铲| 去澳门百家乐官网的玩法技巧和规则| 百家乐官网手机游戏下载| 阳新县| 天峨县| 十六蒲娱乐城|