久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

Linux系統(tǒng)篇-文件系統(tǒng)&虛擬文件系統(tǒng)(非常重要!)

2021-02-25    分類: 網(wǎng)站建設(shè)

1.軟鏈接和硬鏈接的區(qū)別

我們知道文件都有文件名與數(shù)據(jù),數(shù)據(jù)分兩部分:用戶數(shù)據(jù) (user data) 與元數(shù)據(jù) (metadata)。用戶數(shù)據(jù),即文件數(shù)據(jù)塊 (data block),數(shù)據(jù)塊是記錄文件真實內(nèi)容的地方;而元數(shù)據(jù)則是文件的附加屬性,如文件大小、創(chuàng)建時間、所有者等信息。在 Linux 中,元數(shù)據(jù)中的 inode 號(inode 是文件元數(shù)據(jù)的一部分但其并不包含文件名,inode 號即索引節(jié)點號)才是文件的唯一標(biāo)識而非文件名。文件名僅是為了方便人們的記憶和使用,系統(tǒng)或程序通過 inode 號尋找正確的文件數(shù)據(jù)塊

為解決文件的共享使用,Linux 系統(tǒng)引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統(tǒng)解決了文件的共享使用,還帶來了隱藏文件路徑、增加權(quán)限安全及節(jié)省存儲等好處。若一個 inode 號對應(yīng)多個文件名,則稱這些文件為硬鏈接。硬鏈接就是同一個文件使用了多個別名

由于硬鏈接是有著相同 inode 號僅文件名不同的文件,因此硬鏈接存在以下幾點特性:

  • 文件有相同的 inode 及 data block;
  • 只能對已存在的文件進(jìn)行創(chuàng)建;
  • 不能交叉文件系統(tǒng)進(jìn)行硬鏈接的創(chuàng)建;
  • 不能對目錄進(jìn)行創(chuàng)建,只可對文件創(chuàng)建;
  • 刪除一個硬鏈接文件并不影響其他有相同 inode 號的文件。

inode 號僅在各文件系統(tǒng)下是唯一的,當(dāng) Linux 掛載多個文件系統(tǒng)后將出現(xiàn) inode 號重復(fù)的現(xiàn)象,因此硬鏈接創(chuàng)建時不可跨文件系統(tǒng)

軟鏈接與硬鏈接不同,若文件用戶數(shù)據(jù)塊中存放的內(nèi)容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數(shù)據(jù)塊內(nèi)容有點特殊。軟鏈接有著自己的 inode 號以及用戶數(shù)據(jù)塊。因此軟鏈接的創(chuàng)建與使用沒有類似硬鏈接的諸多限制:

  • 軟鏈接有自己的文件屬性及權(quán)限等;
  • 可對不存在的文件或目錄創(chuàng)建軟鏈接;
  • 軟鏈接可交叉文件系統(tǒng);
  • 軟鏈接可對文件或目錄創(chuàng)建;
  • 創(chuàng)建軟鏈接時,鏈接計數(shù) i_nlink 不會增加;
  • 刪除軟鏈接并不影響被指向的文件,但若被指向的原文件被刪除,則相關(guān)軟連接被稱為死鏈接(即 dangling link,若被指向路徑文件被重新創(chuàng)建,死鏈接可恢復(fù)為正常的軟鏈接)。
  • 一般情況下,文件名和inode號碼是"一一對應(yīng)"關(guān)系,每個inode號碼對應(yīng)一個文件名。但是,Unix/Linux系統(tǒng)允許,多個文件名指向同一個inode號碼。這意味著,可以用不同的文件名訪問同樣的內(nèi)容;對文件內(nèi)容進(jìn)行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。

2.Linux VFS

Linux 有著極其豐富的文件系統(tǒng),大體上可分如下幾類:

  • 網(wǎng)絡(luò)文件系統(tǒng),如 nfs、cifs 等;
  • 磁盤文件系統(tǒng),如 ext4、ext3 等;
  • 特殊文件系統(tǒng),如 proc、sysfs、ramfs、tmpfs 等。

實現(xiàn)以上這些文件系統(tǒng)并在 Linux 下共存的基礎(chǔ)就是 Linux VFS(Virtual File System 又稱 Virtual Filesystem Switch),即虛擬文件系統(tǒng)。VFS 作為一個通用的文件系統(tǒng),抽象了文件系統(tǒng)的四個基本概念:文件、目錄項 (dentry)、索引節(jié)點 (inode) 及掛載點,其在內(nèi)核中為用戶空間層的文件系統(tǒng)提供了相關(guān)的接口。VFS 實現(xiàn)了 open()、read() 等系統(tǒng)調(diào)并使得 cp 等用戶空間程序可跨文件系統(tǒng)。VFS 真正實現(xiàn)了上述內(nèi)容中:在 Linux 中除進(jìn)程之外一切皆是文件。

Linux VFS 存在四個基本對象:超級塊對象 (superblock object)、索引節(jié)點對象 (inode object)、目錄項對象 (dentry object) 及文件對象 (file object)。超級塊對象代表一個已安裝的文件系統(tǒng);索引節(jié)點對象代表一個文件;目錄項對象代表一個目錄項,如設(shè)備文件 event5 在路徑 /dev/input/event5 中,其存在四個目錄項對象:/ 、dev/ 、input/ 及 event5。文件對象代表由進(jìn)程打開的文件。為文件路徑的快速解析,Linux VFS 設(shè)計了目錄項緩存(Directory Entry Cache,即 dcache)。

3.文件的打開過程

open()系統(tǒng)調(diào)用的過程如下:

  • 查看system-wide open-file table(系統(tǒng)打開文件表)中是否有該文件,即查看該文件是否已經(jīng)被其他進(jìn)程打開了
  • 如果存在,那么該進(jìn)程會在自己的per-process open-file table(進(jìn)程打開文件表)中,建立一個項目,指向system-wide open-file table中的該文件
  • 如果不存在,則需要根據(jù)file name在directory中查找該file,通常directory中的部分內(nèi)容在cache中,這樣可以加快搜索速度。
  • 一旦文件被找到,那么FCB(file control block)文件控制塊會被復(fù)制到system-wide open-file table中,該表不僅僅保存FCB,而且記錄每個文件被多少個進(jìn)程打開
  • 接下來,在per-process open-file table(進(jìn)程打開文件表)中,簡直一個entry,指向進(jìn)程打開文件表中該項目

當(dāng)進(jìn)程close()一個文件時:

  • 該進(jìn)程的per-process open-flle table中的對應(yīng)項會被刪除,系統(tǒng)打開表中的該文件計數(shù)器會減1
  • 如果系統(tǒng)打開表中的計算為0,那么刪除該文件項

4.inode的理解

操作系統(tǒng)讀取硬盤的時候,不會一個個扇區(qū)地讀取,這樣效率太低,而是一次性連續(xù)讀取多個扇區(qū),即一次性讀取一個"塊"(block)。這種由多個扇區(qū)組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續(xù)八個 sector組成一個 block。

文件數(shù)據(jù)都儲存在"塊"中,那么很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創(chuàng)建者、文件的創(chuàng)建日期、文件的大小等等。這種儲存文件元信息的區(qū)域就叫做inode,中文譯名為"索引節(jié)點"。

inode包含文件的元信息,具體來說有以下內(nèi)容:

* 文件的字節(jié)數(shù)

* 文件擁有者的User ID

* 文件的Group ID

* 文件的讀、寫、執(zhí)行權(quán)限

* 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內(nèi)容上一次變動的時間,atime指文件上一次打開的時間。

* 鏈接數(shù),即有多少文件名指向這個inode

* 文件數(shù)據(jù)block的位置

除了文件名以外的所有文件信息,都存在inode之中

每個inode都有一個號碼,操作系統(tǒng)用inode號碼來識別不同的文件。

表面上,用戶通過文件名,打開文件。實際上,系統(tǒng)內(nèi)部這個過程分成三步:首先,系統(tǒng)找到這個文件名對應(yīng)的inode號;其次,通過inode號,獲取inode信息;最后,根據(jù)inode信息,找到文件數(shù)據(jù)所在的block,讀出數(shù)據(jù)。

目錄(directory)也是一種文件,目錄文件的結(jié)構(gòu)非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應(yīng)的inode號碼。

數(shù)據(jù)塊尋址

inode中記錄了文件數(shù)據(jù)塊的位置,有三種尋址方式:direct blocks直接指向數(shù)據(jù)塊;single indirect指向一個block,該block中為數(shù)據(jù)塊的指針;double indirect,兩級block

5.文件描述符

在Linux系統(tǒng)中一切皆可以看成是文件,文件又可分為:普通文件、目錄文件、鏈接文件和設(shè)備文件。文件描述符(file descriptor)是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,其是一個非負(fù)整數(shù)(通常是小整數(shù)),用于指代被打開的文件,所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都通過文件描述符。程序剛剛啟動的時候,0是標(biāo)準(zhǔn)輸入,1是標(biāo)準(zhǔn)輸出,2是標(biāo)準(zhǔn)錯誤。如果此時去打開一個新的文件,它的文件描述符會是3。POSIX標(biāo)準(zhǔn)要求每次打開文件時(含socket)必須使用當(dāng)前進(jìn)程中最小可用的文件描述符號碼

文件描述符是系統(tǒng)的一個重要資源,雖然說系統(tǒng)內(nèi)存有多少就可以打開多少的文件描述符,但是在實際實現(xiàn)過程中內(nèi)核是會做相應(yīng)的處理的,一般大打開文件數(shù)會是系統(tǒng)內(nèi)存的10%(以KB來計算)(稱之為系統(tǒng)級限制)

6.文件描述符和打開文件之間的關(guān)系

每一個文件描述符會與一個打開文件相對應(yīng),同時,不同的文件描述符也會指向同一個文件。相同的文件可以被不同的進(jìn)程打開也可以在同一個進(jìn)程中被多次打開。系統(tǒng)為每一個進(jìn)程維護(hù)了一個文件描述符表,該表的值都是從0開始的,所以在不同的進(jìn)程中你會看到相同的文件描述符,這種情況下相同文件描述符有可能指向同一個文件,也有可能指向不同的文件。具體情況要具體分析,要理解具體其概況如何,需要查看由內(nèi)核維護(hù)的3個數(shù)據(jù)結(jié)構(gòu)。

  • 進(jìn)程級的文件描述符表
  • 系統(tǒng)級的打開文件描述符表
  • 文件系統(tǒng)的i-node表

進(jìn)程級的描述符表的每一條目記錄了單個文件描述符的相關(guān)信息。

  • 控制文件描述符操作的一組標(biāo)志。(目前,此類標(biāo)志僅定義了一個,即close-on-exec標(biāo)志)
  • 對打開文件句柄的引用

內(nèi)核對所有打開的文件的文件維護(hù)有一個系統(tǒng)級的描述符表格(open file description table)。有時,也稱之為打開文件表(open file table),并將表格中各條目稱為打開文件句柄(open file handle)。一個打開文件句柄存儲了與一個打開文件相關(guān)的全部信息,如下所示:

  • 當(dāng)前文件偏移量(調(diào)用read()和write()時更新,或使用lseek()直接修改)
  • 打開文件時所使用的狀態(tài)標(biāo)識(即,open()的flags參數(shù))
  • 文件訪問模式(如調(diào)用open()時所設(shè)置的只讀模式、只寫模式或讀寫模式)
  • 與信號驅(qū)動相關(guān)的設(shè)置
  • 對該文件i-node對象的引用
  • 文件類型(例如:常規(guī)文件、套接字或FIFO)和訪問權(quán)限
  •  一個指針,指向該文件所持有的鎖列表
  • 文件的各種屬性,包括文件大小以及與不同類型操作相關(guān)的時間戳

在進(jìn)程A中,文件描述符1和30都指向了同一個打開的文件句柄(標(biāo)號23)。這可能是通過調(diào)用dup()、dup2()、fcntl()或者對同一個文件多次調(diào)用了open()函數(shù)而形成的。

進(jìn)程A的文件描述符2和進(jìn)程B的文件描述符2都指向了同一個打開的文件句柄(標(biāo)號73)。這種情形可能是在調(diào)用fork()后出現(xiàn)的(即,進(jìn)程A、B是父子進(jìn)程關(guān)系),或者當(dāng)某進(jìn)程通過UNIX域套接字將一個打開的文件描述符傳遞給另一個進(jìn)程時,也會發(fā)生。再者是不同的進(jìn)程獨自去調(diào)用open函數(shù)打開了同一個文件,此時進(jìn)程內(nèi)部的描述符正好分配到與其他進(jìn)程打開該文件的描述符一樣。

此外,進(jìn)程A的描述符0和進(jìn)程B的描述符3分別指向不同的打開文件句柄,但這些句柄均指向i-node表的相同條目(1976),換言之,指向同一個文件。發(fā)生這種情況是因為每個進(jìn)程各自對同一個文件發(fā)起了open()調(diào)用。同一個進(jìn)程兩次打開同一個文件,也會發(fā)生類似情況。

7. 總結(jié)

  • 由于進(jìn)程級文件描述符表的存在,不同的進(jìn)程中會出現(xiàn)相同的文件描述符,它們可能指向同一個文件,也可能指向不同的文件
  • 兩個不同的文件描述符,若指向同一個打開文件句柄,將共享同一文件偏移量。因此,如果通過其中一個文件描述符來修改文件偏移量(由調(diào)用read()、write()或lseek()所致),那么從另一個描述符中也會觀察到變化,無論這兩個文件描述符是否屬于不同進(jìn)程,還是同一個進(jìn)程,情況都是如此。
  • 要獲取和修改打開的文件標(biāo)志(例如:O_APPEND、O_NONBLOCK和O_ASYNC),可執(zhí)行fcntl()的F_GETFL和F_SETFL操作,其對作用域的約束與上一條頗為類似。
  • 文件描述符標(biāo)志(即,close-on-exec)為進(jìn)程和文件描述符所私有。對這一標(biāo)志的修改將不會影響同一進(jìn)程或不同進(jìn)程中的其他文件描述符

網(wǎng)頁名稱:Linux系統(tǒng)篇-文件系統(tǒng)&虛擬文件系統(tǒng)(非常重要!)
鏈接URL:http://www.js-pz168.com/news32/102882.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)微信小程序企業(yè)網(wǎng)站制作小程序開發(fā)虛擬主機(jī)網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
中文字幕不卡每日更新1区2区| 精品国产sm最大网站免费看| 久久久美女艺术照精彩视频福利播放| 亚洲视频狠狠干| 奇米色一区二区| 91免费观看视频在线| 亚洲精品8mav| 精品日韩在线观看| 亚洲精品成人精品456| 激情综合色丁香一区二区| 97在线中文字幕| 色婷婷亚洲综合| 久久久久国产精品麻豆ai换脸| 亚洲午夜久久久久久久久久久| 国产91综合网| 日韩理论片在线观看| 日韩三级免费观看| 一区二区在线观看av| 国产999精品久久久久久绿帽| 久久国产精品免费一区| 欧美日韩国产中文| 综合网在线视频| 国产精品456露脸| 久久精品五月婷婷| 91精品在线麻豆| 亚洲曰韩产成在线| av激情综合网| 色拍拍在线精品视频8848| 国产欧美一区二区精品仙草咪 | 欧美一级艳片视频免费观看| 亚洲免费观看高清完整版在线观看熊 | 国产美女精品在线| 欧美日韩三区四区| 日韩欧美一区中文| 午夜欧美视频在线观看| 99re在线国产| 欧美欧美欧美欧美首页| 亚洲精品成人少妇| gogogo免费视频观看亚洲一| 色一情一伦一子一伦一区| 中文字幕国产一区| 国产一区二区美女| 午夜一区二区三区| 欧美激情综合五月色丁香小说| 久久av老司机精品网站导航| 欧美日韩在线高清| 久久久久9999亚洲精品| 久久99精品国产.久久久久 | 99久久精品免费| 欧美中文字幕不卡| 亚洲另类在线制服丝袜| 99久久精品免费看| 欧美群妇大交群的观看方式| 亚洲五月六月丁香激情| 国产精品久久久久久久免费大片| 51久久夜色精品国产麻豆| 天天av天天翘天天综合网色鬼国产| 国产精品有限公司| 日韩精品影音先锋| 精油按摩中文字幕久久| 视频一区二区三区在线观看| 中文字幕不卡的av| 成人av影视在线观看| 在线视频你懂得一区| 一区二区三区不卡视频在线观看| 97免费高清电视剧观看| 日韩精品中文字幕在线不卡尤物| 美日韩一区二区三区| 神马影院一区二区三区| 成人欧美一区二区三区1314| 91av免费看| 精品卡一卡二卡三卡四在线| 国产曰批免费观看久久久| 中国一区二区三区| 亚洲一区二区在线免费观看视频| 国产精品亚洲综合| 久久久国际精品| gogo大胆日本视频一区| 欧美一区二区三区视频免费播放| 蜜臀久久久久久久| 在线观看福利一区| 亚洲一区二区成人在线观看| 蜜桃视频日韩| 亚洲色图视频网| 国产日韩一区二区三区| 国产日韩精品视频一区| 91丨九色丨蝌蚪丨老版| 日韩精品中文字幕在线不卡尤物| 国产精品影视网| 欧美精品在线一区二区三区| 九九精品视频在线看| 欧美色精品在线视频| 麻豆91在线看| 91成人看片片| 美女视频第一区二区三区免费观看网站 | 国产成人精品在线看| 5月丁香婷婷综合| 激情小说欧美图片| 欧美日韩免费高清一区色橹橹| 美国十次了思思久久精品导航| 最新日韩三级| 免费成人在线播放| 色妞www精品视频| 男人操女人的视频在线观看欧美| 色网站国产精品| 蜜臀av国产精品久久久久| 日本国产一区二区| 美女免费视频一区二区| 欧洲亚洲国产日韩| 精品一区二区免费| 欧美高清视频不卡网| 国产精品18久久久| 日韩欧美在线网站| 97se亚洲国产综合在线| 国产亚洲一区二区三区四区 | 成人免费视频免费观看| 精品久久久三级丝袜| 91视频在线观看免费| 国产调教视频一区| 国产私拍一区| 亚洲裸体在线观看| 亚洲美女网站18| 日本中文字幕不卡| 欧美区在线观看| 成人国产精品免费观看动漫| 久久免费视频一区| 国产一级特黄a大片99| 亚洲男同1069视频| 午夜久久资源| 久久福利资源站| 91精品国产一区二区人妖| 成人黄色片在线观看| 久久久久高清精品| 久久综合毛片| 亚洲一区二区三区四区的| 亚洲一区3d动漫同人无遮挡| 久久精品国产一区二区| 欧美一区二视频| 97人人干人人| 夜夜操天天操亚洲| 中文字幕一区二区三区最新| 久草中文综合在线| 亚洲精品一线二线三线无人区| 国产伦理久久久| 亚洲国产日韩精品| 欧美日韩一级视频| 91亚洲精品乱码久久久久久蜜桃 | 国产一区二区免费电影| 亚洲一区二区精品3399| 欧美在线一区二区| 成人av在线一区二区| 国产精品久久久久久久久免费丝袜 | 亚洲精品videosex极品| 一本一本大道香蕉久在线精品 | 久久av一区二区三区亚洲| 性做久久久久久免费观看| 欧美午夜影院一区| 99久久精品免费看国产| 亚洲图片另类小说| 色婷婷综合中文久久一本| 国产99精品国产| 国产精品第一页第二页第三页| 亚洲欧美日韩另类精品一区二区三区 | 国产伦精品一区二区三区视频孕妇 | 欧美一区二区在线免费观看| 国产激情一区二区三区在线观看| 亚洲国产综合91精品麻豆| 欧美高清视频不卡网| αv一区二区三区| 亚洲成av人片在线| 日韩亚洲欧美在线| 麻豆精品视频| 国模娜娜一区二区三区| 日本一区二区成人在线| 在线一区亚洲| 99精品视频在线播放观看| 亚洲主播在线播放| 欧美一区二区网站| 久久一区免费| 国产一区二区在线视频| 国产精品久久久久国产精品日日| 91久久精品网| 99在线影院| 免费成人结看片| 国产欧美一二三区| 色综合久久66| 99一区二区| 裸体在线国模精品偷拍| 欧美高清在线一区二区| 在线观看av一区| 国产区一区二区| 国精产品一区一区三区mba视频| 国产精品久久久久久妇女6080| 欧美性感一类影片在线播放| 国产伦视频一区二区三区| 黄网站免费久久| 亚洲青青青在线视频| 日韩亚洲电影在线| 天天爽天天狠久久久| 99视频精品全部免费在线|