Linux一個重要的哲學(xué)是:一切皆文件。而文件與文件系統(tǒng)是密切相關(guān)的,本篇筆記我們來一起學(xué)習(xí)、理清那些令我們眼花繚亂的文件系統(tǒng)。
文件系統(tǒng)粗略的分類:
下面依次進(jìn)行介紹:
根文件系統(tǒng)
根文件系統(tǒng)(rootfs)是內(nèi)核啟動時(shí)所 mount(掛載)的第一個文件系統(tǒng),內(nèi)核代碼映像文件保存在根文件系中,而系統(tǒng)引導(dǎo)啟動程序會在根文件系統(tǒng)掛載之后從中把一些基本的初始化腳本和服務(wù)等加載到內(nèi)存中去運(yùn)行。
根文件系統(tǒng)的根目錄/下有很多子目錄:
虛擬文件系統(tǒng)
從上面的分類圖中我們可以知道Linux中有很多文件系統(tǒng),并且是共存的。那么在Linux中是怎么做到讓一切都是文件呢?這是由于有一層虛擬文件系統(tǒng)軟件抽象層的存在,這個軟件抽象層為用戶屏蔽了底層文件系統(tǒng)的差異,向上層提供了統(tǒng)一地訪問接口。如圖:
(圖片來源:野火電子)
無論最下層的文件系統(tǒng)是什么,我們最上層的用戶端盡管使用系統(tǒng)調(diào)用接口(open、write、read等)或glibc接口(fopen、fwrite、fread等)來操作就可訪問文件系統(tǒng)里的文件,使得一切都是文件成為可能。
真文件系統(tǒng)
真文件系統(tǒng)其實(shí)是實(shí)際存儲設(shè)備的文件系統(tǒng),掛載于EEPROM、 Nor FLASH、 NAND FLASH、 eMMC 等存儲器中。
1、ext2
EXT2第二代擴(kuò)展文件系統(tǒng)(second extended filesystem,縮寫為 ext2),是Linux內(nèi)核早期所用的文件系統(tǒng),但是隨著技術(shù)的發(fā)展 ext2 文件系統(tǒng)已經(jīng)不推薦使用了。ext2是一個非日志文件系統(tǒng)。
2、ext3
EXT3是第三代擴(kuò)展文件系統(tǒng)(Third extended filesystem,縮寫為ext3),是一個日志文件系統(tǒng)。主要特點(diǎn):
高可用性:系統(tǒng)使用了ext3文件系統(tǒng)后,即使在非正常關(guān)機(jī)后,系統(tǒng)也不需要檢查文件系統(tǒng)。宕機(jī)發(fā)生后,恢復(fù)ext3文件系統(tǒng)的時(shí)間只要數(shù)十秒鐘。
數(shù)據(jù)完整性:ext3文件系統(tǒng)能夠極大地提高文件系統(tǒng)的完整性,避免了意外宕機(jī)對文件系統(tǒng)的破壞。
3、ext4
EXT4是第四代擴(kuò)展文件系統(tǒng)(Fourth extended filesystem,縮寫為 ext4)是一個日志文件系統(tǒng),是ext3文件系統(tǒng)的后繼版本。主要特點(diǎn):
更多的子目錄數(shù)量:Ext3目前只支持32000個子目錄,而Ext4取消了這一限制,理論上支持無限數(shù)量的子目錄。
更多的塊和i-節(jié)點(diǎn)數(shù)量:Ext3文件系統(tǒng)使用32位空間記錄塊數(shù)量和i-節(jié)點(diǎn)數(shù)量,而Ext4文件系統(tǒng)將它們擴(kuò)充到64位。
偽文件系統(tǒng)
Linux內(nèi)核提供了sysfs、procfs、devtmpfs等偽文件系統(tǒng),偽文件系統(tǒng)存在于內(nèi)存,不占用硬盤。以文件地形式向用戶提供一些系統(tǒng)信息,用戶讀寫這些文件就可以讀取、修改系統(tǒng)的一些信息。
1、procfs
procfs是 進(jìn)程文件系統(tǒng)的縮寫,包含一個偽文件系統(tǒng)(啟動時(shí)動態(tài)生成的文件系統(tǒng)),用于通過內(nèi)核訪問進(jìn)程信息。這個文件系統(tǒng)通常被掛載到 /proc 目錄。
由于 /proc 不是一個真正的文件系統(tǒng),它也就不占用存儲空間,只是占用有限的內(nèi)存。
/proc目錄的內(nèi)容如下:
其中,這些以數(shù)字命名的文件夾就是與進(jìn)程相關(guān)的部分,這些數(shù)字就是進(jìn)程的PID號。
我們可以訪問系統(tǒng)信息,如讀取CPU相關(guān)信息:
查看內(nèi)核支持的文件系統(tǒng)類型:
可見,內(nèi)核支持了很多文件系統(tǒng),我們上面的文件系統(tǒng)匯總只列出了一小部分,感興趣的朋友可以自己去了解其它的。
我們可以通過/proc目錄了解到很多信息,大家可以自行嘗試查看其它信息。
2、sysfs
sysfs是一個基于內(nèi)存的文件系統(tǒng),它的作用是將內(nèi)核信息以文件的方式提供給用戶程序使用。sysfs 文件系統(tǒng)被掛載在 /sys 掛載點(diǎn)上。/sys目錄下的內(nèi)容如:
上一篇分享了《看看你的嵌入式設(shè)備CPU溫度是多少,能烤肉嗎?》中,我們讀取/sys/devices/virtual/thermal/thermal_zone0下的temp文件就可以得到cpu的溫度。
sysfs 與 proc 相比有很多優(yōu)點(diǎn),最重要的莫過于設(shè)計(jì)上的清晰。sysfs 的設(shè)計(jì)原則是一個屬性文件只做一件事情, sysfs 屬性文件一般只有一個值,直接讀取或?qū)懭搿?/p>
整個 /proc/scsi目錄在2.6內(nèi)核中已被標(biāo)記為過時(shí)(LEGACY),它的功能已經(jīng)被相應(yīng)的 /sys 屬性文件所完全取代。新設(shè)計(jì)的內(nèi)核機(jī)制應(yīng)該盡量使用 sysfs 機(jī)制,而將 proc 保留給純凈的“進(jìn)程文件系統(tǒng)”。
3、devtmpfs
devtmpfs 的功用是在 Linux 核心 啟動早期建立一個初步的 /dev,令一般啟動程序不用等待 udev(udev 是Linux kernel 2.6系列的設(shè)備管理器。它主要的功能是管理/dev目錄底下的設(shè)備節(jié)點(diǎn)。),縮短 GNU/Linux 的開機(jī)時(shí)間。
在devtmpfs出現(xiàn)之前,/dev/下面的設(shè)備節(jié)點(diǎn)應(yīng)該都是udev-daemon收到內(nèi)核的事件后用mknod程序或者直接調(diào)mknod()系統(tǒng)調(diào)用創(chuàng)建出來的;現(xiàn)在基本上不走udev了,幾乎所有的設(shè)備文件(比如/dev/sda1)都是內(nèi)核直接創(chuàng)建的。
我們在之前hello驅(qū)動、led驅(qū)動實(shí)驗(yàn)中,我們動態(tài)加載的方式加載我們的驅(qū)動程序之后,會在/dev目錄下生成相應(yīng)的節(jié)點(diǎn)。我們只要在應(yīng)用程序中操作這個節(jié)點(diǎn)就可以間接地操控我們的led:
再一次體現(xiàn)了Linux中一切皆文件的概念。
相關(guān)筆記推薦:
《嵌入式Linux驅(qū)動基礎(chǔ)》
《LED驅(qū)動實(shí)驗(yàn)(總線設(shè)備驅(qū)動模型)》
網(wǎng)絡(luò)文件系統(tǒng)
NFS(Network File System) ,即網(wǎng)絡(luò)文件系統(tǒng), 能使使用者訪問網(wǎng)絡(luò)上別處的文件就像在使用自己的計(jì)算機(jī)一樣。其工作原理是使用客戶端/服務(wù)器架構(gòu) :
服務(wù)器程序向其他計(jì)算機(jī)提供對文件系統(tǒng)的訪問,其過程稱為輸出。NFS客戶端程序?qū)蚕砦募到y(tǒng)進(jìn)行訪問時(shí),把它們從NFS服務(wù)器中“輸送”出來。
文件通常以塊為單位進(jìn)行傳輸。在我們嵌入式Linux中,NFS的主要應(yīng)用如:把主機(jī)的上文件(比如目標(biāo)板的可執(zhí)行文件)共享給目標(biāo)板,這樣目標(biāo)板就很方便地運(yùn)行程序。比如我們往期筆記【Linux筆記】掛載網(wǎng)絡(luò)文件系統(tǒng)中的實(shí)驗(yàn)框圖:
以上就是本次的筆記分享,如有錯誤,歡迎指出,謝謝!本次著重分享了幾個重要的文件系統(tǒng),了解這幾個文件系統(tǒng)對我們學(xué)習(xí)嵌入式Linux有幫助。
責(zé)任編輯:xj
原文標(biāo)題:Linux中文件系統(tǒng)分類,以及基礎(chǔ)使用方法
文章出處:【微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
Linux
+關(guān)注
關(guān)注
87文章
11232瀏覽量
208949 -
文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
284瀏覽量
19884
原文標(biāo)題:Linux中文件系統(tǒng)分類,以及基礎(chǔ)使用方法
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論