Linux中的硬鏈接和軟鏈接

Linux中的硬鏈接和軟鏈接

節選自南大蔣炎巖老師操作系統網絡課程筆記:(2021) 24 [持久化] 文件系統API

硬(hard)鏈接

UNIX文件指針

在UNIX中,文件和目錄完全不是同一個概念,雖然我們平時看著它們仿佛并列地躺在某個文件夾下。但實際上,目錄是樹狀結構組織的,而文件,卻是每個目錄指向某個文件的指針。并且,每個文件都有一個編號,可能會有多個目錄下的多個指針都指向同一個編號的文件。它們雖然存在于不同的目錄下,甚至名稱也不同,但是同一個編號的文件是完全相同的,修改也是同步的。如下圖所示:

在這里插入圖片描述

我們可以做這樣的測試:

創建測試目錄并在其中的a.txt寫入Hello World!

mkdir test && cd test && touch a.txt
vim a.txt # 寫入 Hello World!

創建a.txt的硬鏈接b.txt

ln a.txt b.txt

我們查看兩個文件的內容,輸出顯示都是同樣的Hello World:

cat *.txt
# 輸出:
# Hello World!
# Hello World!

這時,我們修改b.txt的內容為Hello World! Changed~,再查看兩個文件的內容:

vim b.txt		# 更改為 Hello World! Changed~
cat *.txt
# 輸出:
# Hello World! Changed~
# Hello World! Changed~

結果兩個文件都被修改了,這就是硬鏈接,我們可以通過-i參數查看文件的編號:

ls -i
# 輸出:
# 8593746 a.txt  8593746 b.txt

可以看到,兩個文件其實是同一個編號的文件的不同鏈接。即硬鏈接的圖示如下:在這里插入圖片描述

硬鏈接

注意

  • 目錄中僅存儲指向文件數據的指針
  • 允許一個文件被多個目錄引用
  • 不能鏈接目錄 ?
  • 不能跨文件系統 ?

小知識:其實所有的文件都是硬連接 (ls -i 查看)

  • 刪除的系統調用稱為 “unlink” (引用計數)

應用場景

可以給文件起別名,同步,省空間。

需求:系統中可能有同一個運行庫的多個版本

  • libc-2.27.so, libc-2.26.so, …
  • 還需要一個 “當前版本的 libc”
    • 程序需要鏈接 “libc.so.6
    • 能否避免文件的一份拷貝?

軟(symbolic)鏈接

軟鏈接:在文件里存儲一個 “跳轉提示”,相當于”快捷方式“。

  • 軟鏈接也是一個文件
    • 當引用這個文件時,去找另一個文件
    • 另一個文件的絕對/相對路徑以文本形式存儲在文件里
    • 可以跨文件系統、可以鏈接目錄、……好處多多
    • 甚至,符號鏈接可以指向一個暫時不存在的文件或目錄,只要這個不存在文件或目錄將來某天存在了,這個符號鏈接就會生效

ln -s 創建軟鏈接,用的是symlink 系統調用。現在系統中/lib下的共享庫,通常都是軟鏈接。

我們接著上面硬鏈接的例子來看一下二者的區別:

再在測試目錄下創建a.txt的軟鏈接c.txt

ln -s a.txt c.txt

我們用-li參數查看測試目錄中的三個文件:

ls -li
# 輸出
# 8593746 -rw-rw-r-- 2 ps ps 22 10月  1 22:14 a.txt
# 8593746 -rw-rw-r-- 2 ps ps 22 10月  1 22:14 b.txt
# 8593742 lrwxrwxrwx 1 ps ps  5 10月  1 22:35 c.txt -> a.txt

在這里,b,c分別是a的硬、軟鏈接。可以看到,a和c的文件編號是不一樣的,因為它們是軟鏈接,并且可以看到,c作為a的軟鏈接,會有一個箭頭指向a。但是,它們的修改仍然是同步的,因為我們在試圖修改c的時候,系統會順著上面輸出的軟鏈接箭頭去尋找,直到找到一個真實的文件或者目錄。我們還是來試一下:

vim c.txt # 修改為Hello World! Changed~ Soft~
cat *.txt
# 輸出:
# Hello World! Changed~ Soft~
# Hello World! Changed~ Soft~
# Hello World! Changed~ Soft~

與預期一致。此時測試目錄下的鏈接關系應該如下圖所示:
在這里插入圖片描述

軟鏈接可能帶來的麻煩

軟鏈接可以隨意創建 (當前可能不合法;但未來可能合法),操作系統在處理軟鏈接時會執行路徑解析,,允許多次間接鏈接,會有意想不到的復雜性 ,a → b → c (遞歸解析)。可以創建軟連接的硬鏈接 (因為軟鏈接也是文件),通過ls -i 可以看到。

符號鏈接成環?ln -s . a。所有處理符號鏈接的程序 (tree, find, …) 都要考慮遞歸的情況。它們默認遇到軟鏈接就跳過,如果加上-L參數強制使它們考慮軟鏈接的話,它們也會很小心的檢測成環和遞歸的情況并適時退出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532738.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機win10開機音樂,大師傳授win10系統電腦開機總是自動播放音樂的方案

今天小編分享一下win10系統電腦開機總是自動播放音樂問題的處理方法,在操作win10電腦的過程中常常不知道怎么去解決win10系統電腦開機總是自動播放音樂的問題,有什么好的方法去處理win10系統電腦開機總是自動播放音樂呢?今天本站小編教您怎么…

Linux中的tty、pts、pty等概念辨析

Linux中的tty、pts、pty等概念辨析 基本概念 tty、pty、pts、ptmx tty(終端設備的統稱):tty一詞源于Teletypes,或teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱讀和發送信息的東…

(2021) 25 [持久化] 文件系統實現:FAT和UNIX文件系統

(2021) 25 [持久化] 文件系統實現:FAT和UNIX文件系統 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻:https://www.bilibili.com/video/BV1HN41197Ko?p25 講義:http://jyywiki.cn/OS/2021/slides/15.slides#/ 背景 回顧 應用眼中的文件…

用計算機模擬地球誕生,計算機模擬顯示早期金星或像地球一樣宜居

雖然金星的綽號是“地球的邪惡孿生化身”,但它和地球上的一切都不同:灼熱、干燥并且被有毒煙云籠罩。不過,就在10億或20億年前,這兩個任性的“兄弟”可能更加相似。最新的計算機模擬顯示,早期的金星看上去和地球很像&a…

海南大學計算機原理,海南大學微機原理課件 第一章 計算機基礎知識

第一章計算機基礎知識數 制1.1一.計算機使用的數制及其相互轉換 十進制(D)、二進制(B)、八進制(O)和十六進制(H). 數制中用少量數碼按次序排列成數位,并按由低到高的進位方式進行計 數。(數碼的個數稱為基數) D---0,1,2,3,4,5,6,7,8,9------數碼十個(基為10)-------…

Linux中的二進制可執行文件和腳本可執行文件及Shebang

Linux中的二進制可執行文件和腳本可執行文件及Shebang 二進制可執行文件 我們知道&#xff0c;一個C程序經過預處理、編譯、匯編、鏈接就會得到一個二進制可執行文件&#xff0c;這種文件在Linux中叫做ELF文件。比如我們有一個C源代碼hello.c&#xff1a; #include <stdi…

pe能用的固態硬盤測試軟件,通用pe工具箱教你如何讓硬盤4K對齊

昨天小編教大家如何查看電腦硬盤是否4K對齊&#xff0c;馬上就有讀者告訴小編&#xff0c;查看電腦硬盤是否4K對齊的方法學到了&#xff0c;那么我使用的固態硬盤如何做到4K對齊呢&#xff1f;問的好啊&#xff01;現如今用戶對電腦硬件的要求是越來越高。很多用戶都不僅僅滿足…

[2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration論文簡析

[2020-ECCV] PIPAL: a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration 論文簡析 論文&#xff1a;https://arxiv.org/abs/2007.12142 代碼及數據集&#xff1a;https://github.com/HaomingCai/PIPAL-dataset 概述 本文認為隨著圖像重建&…

郫都區計算機老師周俊老師,教師節,帶你走進郫都教師背后的故事

點擊“郫都教育”關注我們&#xff1a;)有這樣一群人“師者&#xff0c;所以傳道&#xff0c;授業&#xff0c;解惑也”是他們奉獻一生的事業“隨風潛入夜&#xff0c;潤物細無聲”是他們培養英才的責任“春蠶到死絲方盡&#xff0c;蠟炬成灰淚始干”是他們追求終生的信仰值此第…

(2021) 18 [代碼講解] 可執行文件

(2021) 18 [代碼講解] 可執行文件 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p18 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/C8.slides#/ 背景 回顧 程序 狀態機 狀態機執行 狀態機上的路徑狀…

如何學習計算機思維,劉康平:為什么我們每個人都應該學習計算思維?

不久前&#xff0c;微軟亞洲研究院資深學術合作經理劉康平應邀在“造就”做了演講&#xff0c;以下為演講節選&#xff0c;由“造就”授權轉載。劉康平 微軟亞洲研究院資深學術合作經理以中國象棋為例&#xff0c;在這樣一個棋局上&#xff0c;你怎么用最快的方式找到「將」和「…

鏈接與加載-NJU-JYY

(2021) 19 [代碼講解] 從零實現動態加載 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1N741177F5?p15 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/C9.slides#/ 背景 回顧&#xff1a; ELF可執行文件 只要能完成…

計算機械功的公式,機械功率計算公式

初中物理公式物理量(單位) 公式 備注 公式的變形速度V(m/S) v S /t (S:&#xff1a;路程&#xff1b; t&#xff1a;:時間 )重力G(N) Gmg (m&#xff1a;質量&#xff1b;g&#xff1a;9.8N/kg或者10N/kg)密度ρ(kg/m3) ρ m&#xff1a;質量/V&#xff1a;體積 (m&#xff1a;…

饑荒聯機自建服務器有什么用,聯機版饑荒使用專用服務器的好處 | 手游網游頁游攻略大全...

發布時間&#xff1a;2016-02-15存檔保存位置是?很多玩家對此并不是很了解,不過別著急喲,下面99單機小編就為你帶來高玩分享的相關技巧心得攻略,希望大家能喜歡. 聯機版的存檔與單機版是不同的,由于聯機版饑荒建 ...標簽&#xff1a;游戲資訊 攻略秘籍發布時間&#xff1a;201…

(2021) 26 [持久化] 持久數據的可靠性:RAID和journaling

(2021) 26 [持久化] 持久數據的可靠性&#xff1a;RAID和journaling 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p26 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/16.slides#/ 背景 回顧 文件系統 …

計算機-p命令,OD(電腦命令)_百度百科

od 命令用途是以指定格式顯示文件。常見的文件為文本文件和二進制文件。此命令主要用來查看保存在二進制文件中的值。比如&#xff0c;程序可能輸出大量的數據記錄&#xff0c;每個數據是一個單精度浮點數。這些數據記錄存放在一個文件中&#xff0c;如果想查看下這個數據&…

Linux下編譯、鏈接、加載運行C++ OpenCV的兩種方式及常見問題的解決

Linux下編譯、鏈接、加載運行C OpenCV的兩種方式及常見問題的解決 在Linux下安裝完OpenCV C之后&#xff08;還沒有安裝的讀者請參考Ubuntu 18.04 安裝OpenCV C&#xff09;&#xff0c;本文將探索Linux下編譯、鏈接C OpenCV的兩種方式&#xff0c;并且給出筆者在初次嘗試時遇…

win10無法檢驗服務器出示的ssl證書,win10系統網站啟用ssL安全證書的操作方法

win10系統網站啟用ssL安全證書的操作方法?很多win10用戶在使用電腦的時候&#xff0c;會發現win10系統網站啟用ssL安全證書的的現象&#xff0c;根據小編的調查并不是所有的朋友都知道win10系統網站啟用ssL安全證書的的問題怎么解決&#xff0c;不會的朋友也不用擔心&#xff…

Linux下構建自己的C++共享庫并配合pkg-config生成鏈接選項

Linux下構建自己的C共享庫并配合pkg-config生成鏈接選項 本文將以C鏈表的新建、打印操作為例構建自己的共享庫&#xff0c;并在實際調試代碼時嘗試使用。我們在做數據結構題時經常需要將鏈表打印出來看一下結果&#xff0c;但是并沒有一種庫函數可以讓我們直接調用來打印自己的…

webkitlineclamp css3,-webkit-line-clamp

無標題文檔static&#xff1a;對象遵循常規流。top&#xff0c;right&#xff0c;bottom&#xff0c;left等屬性不會被應用。 relative&#xff1a; 對象遵循常規流&#xff0c;并且參照自身在常規流中的位置通過top&#xff0c;right&#xff0c;bottom&#xff0c;left屬性進…