Linux:文件系統

一.認識硬件–磁盤

1. 物理結構

在這里插入圖片描述

1.2 存儲結構

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

?如何定位?個扇區呢?

可以先定位磁頭(header)——》確定磁頭要訪問哪?個柱?(磁道)(cylinder)——》 定位?個扇區(sector)。

柱?(cylinder),磁頭(head),扇區(sector),顯然可以定位數據了,這就是數據定位(尋址)?式之?,CHS尋址方式

在這里插入圖片描述

1.3 邏輯抽象

在這里插入圖片描述
我們知道磁帶存儲數據的結構是一個很長很長的帶子,我們可以把磁帶“拉直”,形成一個線性結構。
在這里插入圖片描述
那么磁盤本質上雖然是硬質的,但是邏輯上我們可以把磁盤想象成為卷在?起的磁帶,那么磁盤的邏輯存儲結構我們也可以類似于:

在這里插入圖片描述
這樣每?個扇區,就有了?個線性地址(其實就是數組下標),這種地址叫做LBA
在這里插入圖片描述
?為什么扇區大小不均勻的但是LBA地址是均勻??

——》因為磁道是從中間向外輻射的,所以里面的磁道有多少個扇區,外面的磁道就有多少個扇區,只不過里面磁道的扇區會小一點(扇區大小不均勻) 但其實可以通過調整密度來變得均勻(里面的01序列稠密一點,外面的稀疏一點)

二.文件系統

通過邏輯抽象,我們可以把對扇區的地址抽象成線性的LBA地址,整個磁盤都可以被抽象是成一個一維數組

但是具體磁盤有多大呢?已經用了多少扇區?哪些扇區還沒被使用?哪些扇區存的是屬性?哪些扇區存的是內容?要往哪個扇區去寫入??——>諸如以上問題,注定了我們的操作系統必須想辦法把磁盤空間組織起來!!

操作系統如何對磁盤空間進行管理?在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
? inode存放的是文件的屬性,Block存放的是文件的內容,在Linux文件系統中,文件的屬性和內容是分開存儲的

2.1 inode

在這里插入圖片描述

我們知道,文件 = 屬性 + 內容,屬性也是數據,要管理這些數據,就要以結構體的方式構建出來,這些管理屬性數據的結構體,就是inode一個文件就有一個inode,inode就是屬性數據的集合。

在這里插入圖片描述

? Linux系統里標記文件的唯一標識用的是inode,且文件的屬性中不包含文件的名稱!!

?如何在Linux查到每一個文件的inode編號

ls -li

在這里插入圖片描述

2.2 Data Block

在這里插入圖片描述

? Data Block:存文件內容的區域,以塊作為最小單位,塊的大小常見的是4KB大小,一般而言一個塊只有自己的數據!

? 一個文件只有一個inode,但如果是個大文件可能會有很多個塊。所以在inode結構體內部會有一個block數組,存儲的是數據塊的塊號,標識自己這個文件的內容占據了具體的哪一個數據塊。注意:inode的block數組存的只是塊號,而一個塊號對應著一個Data Block(4KB)。

2.3 BlockBitmap和 InodeBitmap

在這里插入圖片描述
InodeBitmap:是一個位圖,每一個bit表示?個inode是否空閑可用。

BlockBitmap:同樣是個位圖,每一個bit記錄著DataBlock中哪個數據塊已經被占?,哪個數據塊沒有被占?

?問題1: 為什么我們下載一個文件需要很久,但是刪除的時候卻很快呢??

?刪除一個文件的時候,并不會把塊(文件內容)清空,而僅僅只是把對應比特標志位給修改了,表明該塊是空閑可用的。

?問題2:如果我們想恢復一個被刪除的文件,要怎么辦呢??

? 如果我們不小心誤刪的一個文件,如果這個文件很重要,最好的辦法就是什么都不做然后找專業的人去恢復(一般來說恢復其實就是得找到該文件的inode編號,比如通過Linux的日志信息找到被刪文件的inode,但是具體怎么恢復得依靠一些專業的東西!),因為雖然內容還在,但是他的位圖信息表明是可以被使用的,所以你如果亂操作可能會導致文件內容被覆蓋。

2.4 SuperBlock

存放?件系統本?的結構信息,描述整個分區的文件系統信息。記錄的信息主要有:bolck和inode的總量,未使?的block和inode的數量,?個block和inode的??,最近?次掛載的時間,最近?次寫?數據的時間,最近?次檢驗磁盤的時間等其他?件系統的相關信息。SuperBlock的信息被破壞,可以說整個文件系統結構就被破壞了

?格式化:就是寫入空的文件系統!!

2.5 GDT(GroupDescriptorTable)

塊組描述符表,描述塊組屬性信息,整個分區分成多個塊組就對應有多少個塊組描述符。每個塊組描述符存儲?個塊組的描述信息,如在這個塊組中從哪?開始是inodeTable,從哪?開始是Data Blocks,空閑的inode和數據塊還有多少個等等。塊組描述符在每個塊組的開頭都有?份拷貝。

三.深刻理解文件系統下目錄文件

3.1 對文件操作,os怎么做?

?新建和刪除文件,在文件系統的角度下,os到底是怎么做的?

?1??新建文件:OS會在某個路徑下去創建,路徑幫助我們確定在哪一個分區——》讀取了超級塊后確定了一個block,然后通過查該block的GDT知道該分區的inode還有很多沒有被使用——》于是到inodebitmap位圖結構里找到了沒有用過的inode,然后分配給該文件——》分配好之后把自己的屬性往里面填,這樣就算新建成功了!

?如果還打算寫入的話,先確認一下要寫入內容的大小,確定一下需要幾個塊,然后到blockbitmap里面找到沒被使用的塊,把塊號填到inode結構體里面的block數組里,然后再把文件內容寫進這些塊里面。

?2??刪除文件:先找到分區,再找到inode,然后把對應inodebitmap和blockbitmap的位置置0。其實文件還在,只不過對應的塊可以被覆蓋。

?但是我們會發現一個問題,就是在文件系統的角度下,os無論對文件進行怎樣的操作,都要取到對應的inode號,進而才能對其操作,但是我們在對文件進行操作的時候,可從來沒有關心過indoe號啊?!我們對文件操作向os提供的是文件的地址,os是怎么根據文件的地址知道文件的inode的???

?回答這個問題必須先了解文件系統下的目錄。

3.2 目錄文件

首先要明白一個事實,那就是目錄也是文件,也有自己的inode ,也是有內容+屬性構成

?但是我們知道,目錄文件跟普通文件不同的是,目錄文件沒有所謂的"文件內容"的,那目錄文件的文件內容存的是什么

?有內容就要占據數據塊,目錄有自己的數據塊,其中數據塊存儲的就是,在當前目錄下的文件和其inode值的映射關系!!!!

我們可以借助這一結論回答很多問題,提升我們對文件的理解:

?疑問1:在同一目錄下,為什么不允許有同名文件?

?因為文件名和inode是key和value的關系,通過文件名找到inode,key值必須唯一。

?疑問2:為什么沒有w權限無法創建文件??

?沒有w權限意味著我們就無法將文件名和inode的映射關系寫進去,因此無法創建文件。

?疑問3:為什么沒r無法查看文件??

?沒有r權限著意味著我們也看不到文件名和inode的映射關系找不到inode就找不到文件,也就找不到文件的內容。

?疑問4:為什么沒有x無法進入目錄??

?x意味著沒有操作權限,要進入一個目錄必須cd目錄名,并且將當前目錄名更新到環境變量PWD中,所以無法進行該操作的話我們就無法進入。

3.3 路徑解析

?問題:打開當前工作?錄文件,查看當前?作?錄?件的內容?當前?作?錄不也是?件嗎?我們訪問當前?作?錄不也是只知道當前?作?錄的?件名嗎?要訪問它,不也得知道當前?作?錄的inode嗎?

?所以也要打開當前?作?錄的上級?錄,類似"遞歸",需要把路徑中所有的?錄全部解析,出?是"/"根?錄。
??實際上,任何?件,都有路徑,訪問?標?件,?如:

 /home/lvision/code/test/test/test.c

都要從根?錄開始,依次打開每?個?錄,根據?錄名,依次訪問每個?錄下指定的?錄,直到訪問到test.c。這個過程叫做Linux路徑解析

四.深刻理解軟硬鏈接

4.1 硬鏈接

4.1.1 如何建立硬鏈接
ln a[源文件] b[硬鏈接名字]

在這里插入圖片描述

4.1.2 如何理解硬鏈接

我們知道,真正找到磁盤上?件的并不是文件名,inode。其實在linux中,可以讓多個文件名映射同?個inode,而這些新建立的,對indoe建立的映射關系,的文件,就是硬鏈接

硬鏈接不是一個獨立的文件,因為他沒有獨立的inode!!

在這里插入圖片描述

在這里插入圖片描述

  • Hardlink和myfile.cc的鏈接狀態完全相同,他們被稱為指向?件的硬鏈接。內核記錄了這個連接數,inode 650257 的硬連接數為2

  • 我們在刪除?件時干了兩件事情:1.在目錄中將對應的記錄刪除,2.將硬連接數-1,如果為0,則將對應的磁盤釋放

硬鏈接應用場景:通常用來做路徑定位!!可以通過硬鏈接進行目錄切換!

4.1.3為什么Linux不允許對目錄建立硬鏈接

如果對目錄建立硬鏈接,就可能會出現這樣的情景,
在這里插入圖片描述
?可是目錄內部不是有. 和 … 的硬鏈接,他們不是目錄的硬鏈接嗎??
在這里插入圖片描述

  1. . 和 … 是操作系統創建的,操作系統提前規定好了 .和…不會被做搜索,這是強制規定的!所以不會有環的問題!

  2. 操作系統給我們. 和 … ,我們就可以用相對路徑去訪問文件了,可以在一些情境中不必用很長的絕對路徑去訪問文件。

4.2 軟鏈接

4.2.1 如何建立軟鏈接

ln -s a[源文件] b[硬鏈接名字]

在這里插入圖片描述

4.2.2 如何理解軟鏈接

軟連接是一個獨立的文件,有獨立的inode,也有獨立的數據塊 ,他的內容里面保存的是指向的文件的路徑。(相當于windows的快捷方式)

在這里插入圖片描述
應用場景:快捷方式

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

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

相關文章

數字孿生廢氣處理工藝流程

圖撲數字孿生廢氣處理工藝流程系統。通過精準 3D 建模,對廢氣收集、預處理、凈化、排放等全流程進行 1:1 數字化復刻,實時呈現設備運行參數、污染物濃度變化等關鍵數據。 借助圖撲可視化界面,管理者可直觀掌握廢氣處理各環節狀態&#xff0c…

Scratch——第18課 列表接龍問題

在四級的考級中,接龍的題目雖然在CIE中只出現過兩次,但是這類題目對字符串的知識點考察相對全面。 一、接龍游戲的判斷方法 接龍的內容對應的字符數 ? 已接龍內容的字符數 滿足條件>接龍內容的第一個字符數 ? 上一項接龍的最后一個字符 滿足條件…

webgl入門實例-向量在圖形學中的核心作用

在圖形學中,向量是描述幾何、光照、運動等核心概念的基礎工具。以下是向量在圖形學中的關鍵應用和深入解析: 1. 向量的核心作用 幾何表示:描述點、方向、法線、切線等。空間變換:平移、旋轉、縮放等操作依賴向量運算。光照計算&a…

Redis 是如何保證線程安全的?

Redis 是如何保證線程安全的? Redis 是一個高性能的鍵值數據庫,廣泛應用于緩存、消息隊列、實時分析等場景。由于其性能優勢,Redis 已經成為許多系統的核心組件之一。然而,很多開發者在使用 Redis 時,常常會問&#x…

Img2img-turbo 在2080Ti上的測試筆記

1. 介紹 [img2img-turbo]是[pytorch-CycleGAN-and-pix2pix]推薦的更新的圖像變換的代碼實現; 2. 配置信息 Conda環境名稱:img2img-turbo 3. 問題描述 當前在我們嘗試使用了官方推薦的訓練命令在2080Ti上進行訓練, 3.1 出現了 CUDA out …

代碼隨想錄算法訓練營第三十五天|416. 分割等和子集、698.劃分為k個相等的子集、473.火柴拼正方形

今日題目 416. 分割等和子集 題目鏈接:416. 分割等和子集 - 力扣(LeetCode) 思考:本題要將數組分為兩個子數組,且兩個子數組和相等,因此首先可以想到的條件就是數組可分為兩個,這要求數組元素數…

純CSS實現自動滾動到底部

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>自動滾動到底部</title><style>*…

【新人系列】Golang 入門(十五):類型斷言

? 個人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 專欄地址&#xff1a;https://blog.csdn.net/newin2020/category_12898955.html &#x1f4e3; 專欄定位&#xff1a;為 0 基礎剛入門 Golang 的小伙伴提供詳細的講解&#xff0c;也歡迎大佬們…

AI大模型發展現狀與MCP協議誕生的技術演進

1. 大模型能力邊界與用戶痛點&#xff08;2023年&#xff09; 代表模型&#xff1a;GPT-4&#xff08;OpenAI&#xff09;、Claude 3&#xff08;Anthropic&#xff09;、通義千問&#xff08;阿里云&#xff09;等展現出強大的生成能力&#xff0c;但存在明顯局限&#xff1a…

深入理解Linux中的線程控制:多線程編程的實戰技巧

個人主頁&#xff1a;chian-ocean 文章專欄-Linux 前言&#xff1a; POSIX線程&#xff08;Pthreads&#xff09; 是一種在 POSIX 標準下定義的線程庫&#xff0c;它為多線程編程提供了統一的接口&#xff0c;主要用于 UNIX 和類 UNIX 系統&#xff08;如 Linux、MacOS 和 BS…

(mac)Grafana監控系統之監控Linux的Redis

Grafana安裝-CSDN博客 普羅米修斯Prometheus監控安裝&#xff08;mac&#xff09;-CSDN博客 1.Redis_exporter安裝 直接下載 wget https://github.com/oliver006/redis_exporter/releases/download/v1.0.3/redis_exporter-v1.0.3.linux-amd64.tar.gz 解壓 tar -xvf redis_…

鴻蒙應用元服務開發-Account Kit未成年人模式訂閱和處理用戶信息變更

一、概述 通過訂閱用戶信息變更&#xff0c;您可以接收有關用戶及其賬戶的重要更新。當用戶取消元服務的授權信息、注銷華為賬號時&#xff0c;華為賬號服務器會發送通知到元服務&#xff0c;元服務可以根據通知消息進行自身業務處理。 二、用戶信息變更事件介紹 三、訂閱用…

buildroot構建根文件系統報錯(已解決大部分問題)

title: buildroot構建根文件系統報錯(set FORCE_UNSAFE_CONFIGURE1) author: cbus categories: 小知識 tags:小知識 abbrlink: 53691 date: 2025-04-20 08:03:00 錯誤1 set FORCE_UNSAFE_CONFIGURE1 在使用buildroot構建根文件系統時&#xff0c;一切按照文檔的配置&#xff0…

7.QT-常用控件-QWidget|font|toolTip|focusPolicy|styleSheet(C++)

font API說明font()獲取當前widget的字體信息.返回QFont對象.setFont(const QFont& font)設置當前widget的字體信息. 屬性說明family字體家族.?如"楷體",“宋體”,"微軟雅?"等.pointSize字體??weight字體粗細.以數值?式表?粗細程度取值范圍為[…

通過面向目標的獎勵彌合人與機器人的靈活性差距

24年10月來自紐約大學的論文“Bridging the Human to Robot Dexterity Gap through Object-Oriented Rewards”。 直接通過人類視頻訓練機器人是機器人技術和計算機視覺領域的一個新興領域。盡管雙指機械手在雙指夾持器方面取得了顯著進展&#xff0c;但以這種方式讓多指機械手…

C++入門篇(下)

目錄 1、引用 1.1 引用概念 1.2 引用特性 1.3 常引用 1.4 使用場景 1.4.1 引用做參數 1.4.2 引用做返回值 1.5 引用和指針的區別 2、內聯函數 2.1 概念 2.2 特性 3、auto關鍵字 4、基于范圍的for循環 5、指針空值nullptr 5.1 C98 中的指針空值處理 5.2 C11 …

Multi-Query Attention (MQA) PyTorch 實現

和多頭注意力機制的唯一區別&#xff1a;K、V在不同的head之間實現了復用&#xff0c;而對于不同的頭&#xff0c;Q依然不同。 因此這里的代碼和標準多頭注意力的實現也是幾乎完全一樣&#xff1a; import torch import torch.nn as nn import torch.nn.functional as Fclass…

visual studio無法跳轉到函數定義、變量定義、跳轉函數位置不準問題解決

參考&#xff1a;https://blog.csdn.net/snakehacker/article/details/135438353 程序有時會出現大部分函數都不能準確的從頭文件中正確定位到函數定位,這是因為數據庫錯亂造成的,可以通過重構數據庫來解決,操作方法如下&#xff1a; 菜單欄&#xff1a;工具——選項 文本編輯…

Java優雅實現判空方法

在 Java 開發中&#xff0c;頻繁的 if (obj ! null) 判空代碼會導致代碼冗余、可讀性差&#xff0c;且容易遺漏判空導致 NullPointerException。以下從 語言特性、設計模式、工具類 和 編碼規范 四個維度&#xff0c;結合實際案例&#xff0c;詳解如何優雅處理空值問題。 一、…

京東百億補貼殺入外賣市場:一場關乎即時零售未來的攻防戰

當美團和餓了么在外賣市場雙雄爭霸十余年之際&#xff0c;京東突然以"百億補貼免傭金"的組合拳高調入場。這場看似跨界的外賣大戰&#xff0c;實則是互聯網巨頭對萬億級即時零售市場的生死爭奪。 外賣只是表象&#xff0c;即時零售才是終極戰場 京東黑板報4月10日官…