【Linux】深刻理解軟硬鏈接

一.軟硬鏈接操作

1.軟連接

touch 創建一個文件file.txt ,對該文件創建對應的軟鏈接改怎么做呢?

ln? -s? file.txt? file-soft.link?.給對應文件創建軟連接。

軟連接本質就是一個獨立的文件,因為我們對應的軟連接有獨立的inode,他和他指向的file.txt的inode是不同的。

如下圖:

我們把字符串寫入file.txt中,查看兩個文件的內容,都能看到該字符串,說明實際在用戶層使用我們的軟連接,等同于我們的目標文件。軟鏈接是通過名字引?另外?個?件,但實際上,新的?件和 被引?的?件的inode不同

2.硬鏈接

硬鏈接的使用方法,對文件file.txt怎么創建硬鏈接?

ln? file.txt? file-head.link.給對應的文件創建硬鏈接。

硬鏈接本質上不是一個獨立的文件,沒有獨立的inode,而是相同的inode,不同的文件文件名。

在Linux中可以讓多個文件名指向同一個inode。

如上面圖片所示,權限后面這個數字是什么呢?沒創建硬鏈接時,數字為1,創建硬鏈接后數字變成2,這個我們先引出來,后面說!!

Linux中搞懂操作是沒什么用的,就跟之前創建進程,等待進程,說了操作,接口講完沒有用,最關鍵的是他在干什么?下面我們來認識如何理解軟硬鏈接!!!

二.如何理解軟硬鏈接

a.軟硬鏈接有獨立的inode,所以一定要有獨立的屬性和內容,軟鏈接內容上,保存的是目標文件的路徑,在Windows中,相當于一個軟件在桌面上的快捷方式,所以平時用的這些快捷方式也是一個軟連接文件,Linux中,軟連接就是指向文件的快捷方式!!

b.硬鏈接,不是獨立的文件,沒有獨立的inode,硬鏈接本質就是一組文件名和已經已經存在的文件的inode的映射關系!!!

c.所以當我們建立了軟連接,就是相當于在當前目錄下建立了一個軟連接文件,快捷方式,而其中,我們建立一個硬鏈接,就是在我們當前所處的目錄當中新增加一個文件名和要鏈接文件的inode的映射關系,所以最終,我們就會發現,這個硬鏈接文件,他所查到的inode和目標文件inode是一樣的了,這個就是硬鏈接!!!

d.文件權限后面對應的數字是什么呢?創建硬鏈接文件前,目標文件數字為1,創建硬鏈接文件后,目標文件變成2?

根據前面講的文件系統內容,知道了,一個目錄也是文件,他的內容保存的是該目錄下文件的文件名和inode的映射關系,所以在我們當前目錄中,新建一個普通文件,題目文件名不在inode中保存,普通文件的文件名是在我們的文件所處的目錄文件他的內容中保存的,創建一個硬鏈接文件,換句話說,就是在當前目錄中有兩個文件名,他們兩個都會映射到同一個inode,這像什么呢?inode特別像一個指針一樣的東西,所以當我們想使用文件名找文件的時候,我們都知道Linux下是通過inode找文件,兩個文件的inode相同,所以本質上就是相當于有兩個文件名指向同一個inode,換句話說,我作為一個inode,作為一個文件,什么時候在系統上算真正的刪除呢?是不是要在整個系統里,沒有任何文件名字符串和我這個文件inode的有映射關系時,也就是這個文件沒有名字了,這個時候對應的文件就應該被刪除了,可是我們怎么知道有多少個文件名通過ionde編號,來和我對應的文件的inode來產生關系呢?答案是在我們inode中,存在一個引用計數的東西,int ret_count,也就是說,今天在一個特定的目錄下有一個文件名映射的inode是該文件,ret_count就會++,再有一個文件名和這個文件inode有映射關系,再++,所以我們對應的這個數字,稱之為inode本身的引用計數,被稱之為硬鏈接數!!!

e.如果我們對目標文件進行刪除會怎么樣?

對目標文件進行刪除,硬鏈接還在,里面的內容還能打印出來,這個文件并沒有被刪除,所以這個刪除做了一個什么工作?對目標文件進行重命名的工作,所有平時建立一個普通文件本質上都在不斷進行建立硬鏈接,建立一個文件,本質就是硬鏈接文件,因為你的文件名和你的inode映射關系就相當于一份,所以刪除,目標文件就減少一份,再把剩余的硬鏈接刪除掉,引用計數變為0,文件系統中就會把你對應的這個inode直接刪掉了。

刪除目標文件,軟鏈接就會變紅,因為軟鏈接文件中存的是目標文件的路徑,目標文件找不到,軟連接也就找不到了。

總結:

其實軟鏈接說到底,其實就相當于,軟鏈接就是一個普通文件,他的內容保存的是目標文件的路徑,所以目標文件刪除了變成紅色,是因為這個軟鏈接文件保存的目標文件的路徑沒有了,找不到了,而所謂的硬鏈接就相當于在當前目錄下保存一下文件名和inode的映射關系,沒有創建新的文件。

三.為什么要有軟硬鏈接呢?各種應用場景

軟鏈接:

?a.如果我們創建一個可執行程序code.exe,在命令行上要執行該文件是? ./code.exe 如果我們想要? ./code? 就直接可以執行,我們該怎么辦?

之前說過,可以把當前路徑增加到環境變量或者把可執行文件拷貝到系統默認路徑下,就可以不帶? ./? 直接執行。

現在我們學了軟鏈接,就可以在當前路徑下直接創建軟鏈接:
ln -s code.exe code

這樣就創建了一個軟鏈接,就直接可以? ./code? 直接執行該可執行程序。

如果想不加? ./? 呢?

可以在 /usr/bin/ 路徑下建立軟鏈接,/usr/bin/ 是系統存放可執行文件的默認路徑,這樣就直接進行code就可以執行,創建快捷方式,直接建立軟鏈接,就可以指向目標程序了。

刪除一個軟鏈接文件:一個rm? 一個unlink

b.如果可以執行程序藏在一個比較深的路徑下,比如 ./dir1/dir2/dir3/ 里,我們要在當前所處的路徑使用可執行程序,就必須帶一串路徑,所以我們可以在當前路徑下創建軟鏈接。

c.我們也可以給一個目錄形成一個軟鏈接,比如? /usr/inlude/? 我想查看頭文件,就可以給這個目錄創建一個軟鏈接。

d.軟鏈接就是為了快速定位文件,以最簡單的方式進入!!!

e.作用:快捷方式

? ?最主要用途:快速找到指令,快速找到對應的庫

?硬鏈接:

?a.在一個目錄里創建一個普通文件和一個目錄,普通文件的引用計數是1,是因為在當前目錄中只有一個文件名與該inode有映射關系,那為什么新建一個目錄,他的引用計數是2呢?進入這個目錄中,再新建一個目錄,引用計數為什么變成3了呢?

因為在目錄里面有一個? .? 文件和? ..? 文件,之前說過,一個點表示當前目錄,兩個點表示上級目錄,那么一個點憑什么表示當前目錄他自己,一個點他是一個文件名,他所映射的inode和當前所處的目錄的映射的inode是一樣的!!文件名不同但指向的文件是一樣的,所以一個點就表示當前工作路徑,所以再在新建的目錄中創建一個新目錄,里面有兩個點的文件名,他映射的inode與上級目錄映射的inode相同,所以此時就有三個文件名指向同一個文件,所以,引用計數是3,所以我們在Linux中,在每一個目錄下都要有一個? .? 和? ..? 呢?就是為了進行路徑切換!!!

b.創建一個文件,在一個目錄比如 /tmp/ 下,給這個文件創建一個硬鏈接,這時,如果誤操作,把原本文件進行了刪除,但是沒關系,因為我們在特定的路徑下,有一個該文件的硬鏈接文件,我們照樣可以通過該硬鏈接文件拿到該文件的內容,這意味著什么?這意味著,在Linux下,對文件做備份,只需要建立硬鏈接文件就可以了,不需要拷貝了!!!?

c.我們現在可以對普通文件做硬鏈接,那么我們可不可以對目錄進行建立硬鏈接呢?

Linux中,不允許對目錄新建硬鏈接文件,因為主要怕,新建硬鏈接形成一些環狀路徑,進而導致系統出現問題,但是目錄里面? .? 和 ..? 不都是當前目錄和上級目錄的硬鏈接文件嗎?這該怎么理解呢?不怎么理解,因為這是Linux特殊進行處理的!!!?

目錄創建硬鏈接形成環狀路徑的危害

  • 文件系統遍歷異常:文件系統的遍歷算法通常是基于樹形結構進行的,假設可以對目錄創建硬鏈接形成環狀路徑,當系統或應用程序嘗試遍歷目錄樹時,就可能陷入無限循環,無法正常完成遍歷操作,導致程序掛起甚至系統崩潰。
  • 元數據更新混亂:目錄的硬鏈接會使得目錄的元數據(如目錄的鏈接數、修改時間等)管理變得極為復雜且容易出現混亂。例如,當通過一個硬鏈接對目錄進行修改時,很難確定應該如何正確更新其他硬鏈接所指向的同一目錄的元數據,可能導致文件系統的元數據不一致,進而影響文件系統的穩定性和可靠性。
  • 權限管理復雜:在 Linux 中,權限是基于文件和目錄的 inode 進行管理的。如果存在目錄硬鏈接形成的環狀結構,權限的繼承和傳播會變得非常復雜,可能導致權限漏洞或錯誤的權限設置,威脅系統安全。

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

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

相關文章

linux下MySQL的數據存放

在 Linux 下安裝的 MySQL,數據表的數據默認存放在 My曉SQL 數據庫的**數據目錄**(Data Directory)中。具體來說,MySQL 會將所有數據庫的數據存儲在一個由 MySQL 配置文件中指定的目錄里。該目錄包含了所有數據庫的表、索引、日志等…

第三十六章 Spring之假如讓你來寫MVC——攔截器篇

Spring源碼閱讀目錄 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如讓你來寫IOC容器——加載資源篇 第三章 Spring之假如讓你來寫IOC容器——解析配置文件篇 第四章 Spring之假如讓你來寫IOC容器——XML配置文件篇 第五章 Spring之假如讓你來寫…

快速上手 HarmonyOS 應用開發

一、DevEco Studio 安裝與配置 1. DevEco Studio 簡介 DevEco Studio 是 HarmonyOS 的一站式集成開發環境(IDE),提供了豐富的工具和功能,支持 HarmonyOS 應用開發的全流程。 2. DevEco Studio 下載與安裝 下載地址&#xff1a…

Java Web開發進階——錯誤處理與日志管理

錯誤處理和日志管理是任何生產環境中不可或缺的一部分。在 Spring Boot 中,合理的錯誤處理機制不僅能夠提升用戶體驗,還能幫助開發者快速定位問題;而有效的日志管理能夠幫助團隊監控應用運行狀態,及時發現和解決問題。 1. 常見錯誤…

圖解Git——分支的新建與合并《Pro Git》

?分支的新建與合并 先引入一個實際開發的工作流: 開發某個網站。為實現某個新的需求,創建一個分支。在這個分支上開展工作。 正在此時,你突然接到一個電話說有個很嚴重的問題需要緊急修補。你將按照如下方式來處理: 切換到你…

C#使用實體類Entity Framework Core操作mysql入門:從數據庫反向生成模型2 處理連接字符串

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的,可以在任何平臺上使用。 源碼指引:github源…

【數據可視化-12】數據分析崗位招聘分析

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

LeetCode 977 題:有序數組的平方

LeetCode 977 題&#xff1a;有序數組的平方 (Squares of a Sorted Array) LeetCode 第977題要求給定一個按非降序排列的整數數組 nums&#xff0c;返回每個數字的平方并按升序排列。 題目描述 給定一個整數數組 nums&#xff0c;它按非降序排列&#xff08;即 nums[i] < …

excel僅復制可見單元格,僅復制篩選后內容

背景 我們經常需要將內容分給不同的人&#xff0c;做完后需要合并 遇到情況如下 那是因為直接選擇了整列&#xff0c;當然不可以了。 下面提供幾種方法&#xff0c;應該都可以 直接選中要復制區域然后復制&#xff0c;不要選中最上面的列alt;選中可見單元格正常復制&#xff…

微信小程序實現拖拽盒子效果

要實現一個當前盒子高度由里面的盒子進行支配高度拖拽的效果 // wxml<view class"exmation-item" wx:elif"{{type4}}"> <view class"exmation-item-drag-box" id"drag-box"> <!-- 內容 --><view class"exm…

支持向量回歸(SVR:Support Vector Regression)用于A股數據分析、預測

簡單說明 支持向量回歸是一種用來做預測的數學方法,屬于「機器學習」的一種。 它的目標是找到一條「最合適的線」,能夠大致描述數據點的趨勢,并允許數據點離這條線有一定的誤差(不要求所有點都完全落在這條線上)。 可以把它想象成:找到一條「寬帶」或「隧道」,大部分…

透明部署、旁路邏輯串聯的區別

背景 需討論防火墻到底是串聯&#xff0c;還是旁掛。 通常串聯指的就是“透明部署”&#xff0c;旁掛指的就是“邏輯串聯”。 透明部署&#xff08;串聯&#xff09; 也稱為透明模式或橋接模式&#xff0c;是一種安全設備的部署方式。在這種模式下&#xff0c;安全設備被串聯…

LabVIEW水位監控系統

LabVIEW開發智能水位監控系統通過集成先進的傳感技術與控制算法&#xff0c;為工業液體存儲提供精確的水位調控&#xff0c;保證了生產過程的連續性與安全性。 項目背景 在化工和飲料生產等行業中&#xff0c;水位控制的準確性對保證生產安全和提高產品質量至關重要。傳統的水…

深入淺出 Android AES 加密解密:從理論到實戰

深入淺出 Android AES 加密解密&#xff1a;從理論到實戰 在現代移動應用中&#xff0c;數據安全是不可忽視的一環。無論是用戶隱私保護&#xff0c;還是敏感信息的存儲與傳輸&#xff0c;加密技術都扮演著重要角色。本文將以 AES&#xff08;Advanced Encryption Standard&am…

hadoop-yarn常用命令

一、YARN命令介紹 1. YARN命令簡介 YARN提供了一組命令行工具&#xff0c;用于管理和監控YARN應用程序和集群。 2. yarn application命令 (1) yarn application命令的基本語法 yarn application命令的基本語法如下&#xff1a; yarn application [genericOptions] [comma…

R語言的語法糖

R語言的語法糖 引言 在編程語言中&#xff0c;所謂的“語法糖”是指那些使得程序員能夠以更簡潔、直觀的方式書寫代碼的語法形式。R語言作為一種用于統計分析和數據可視化的編程語言&#xff0c;具有豐富的功能和靈活的語法。本文將深入探討R語言中的語法糖&#xff0c;幫助讀…

React Fiber框架中的Render渲染階段——workLoop(performUnitOfWork【beginWork與completeWork】)

觸發渲染過程——renderRoot renderRoot 是一個函數&#xff0c;用于觸發渲染工作。它通常會調用并遞歸地執行一系列的渲染任務&#xff0c;直到完成整個更新過程。這個過程包括執行 Fiber 樹中的 beginWork 和 completeWork&#xff0c;以及渲染新狀態或 DOM。 function ren…

【優先算法】思還故里閭,欲歸道無因 - 前綴和

本篇博客給大家帶來的是前綴和算法的知識點, 也是一樣通過OJ題理解,掌握,應用該算法. &#x1f40e;文章專欄: 算法 &#x1f680;若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動力 . 王子,公主請閱&…

億道三防丨三防筆記本是什么意思?和普通筆記本的優勢在哪里?

三防筆記本是什么意思&#xff1f;和普通筆記本的優勢在哪里&#xff1f; 在現代社會中&#xff0c;筆記本電腦已經成為人們工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行業或環境中&#xff0c;普通筆記本電腦由于其脆弱性和對環境條件的敏感性&#xff0c;往…

SOME/IP 協議詳解——服務發現

文章目錄 1. Introduction &#xff08;引言&#xff09;2. SOME/IP Service Discovery (SOME/IP-SD)2.1 General&#xff08;概述)2.2 SOME/IP-SD Message Format2.2.1 通用要求2.2.2 SOME/IP-SD Header2.2.3 Entry Format2.2.4 Options Format2.2.4.1 配置選項&#xff08;Co…