一、文件系統
1.重要作用簡介:
1).承擔信息處理的組織、管理和維護等任務。
2).文件是Linux系統中信息的存儲、讀寫和執行的基本單位。
3).操作系統正是通過文件系統管理信息的存儲、傳輸和加工等多種處理的功能的。
2.Linux 文件系統部分的主要目錄介紹
1). /bin 二進制可執行命令,常用的基本命令。如:cat、cp、mv、rm、ls及ps;bash等各種shell。
2)./dev 設備特殊文件,設備文件,這個目錄包含了系統支持的所有的設備文件。如console表示系統控制台,lp0表示列印機,ttyXX表示系統的串口設備,cdrom表示CD/DVD驅動器,dsp文件表示系統的音響設備,mem表示系統的物理內存,kmem表示內核佔用的虛擬內存,sda表示連接到主控制器第一個磁碟等等。
3)./etc 系統管理和配置文件,該目錄是整個Linux系統的中心,其中包含了所有系統管理和維護方面的配置文件。如:apache2 Apache配置文件的根目錄;apt 包含軟體管理工具使用的配置文件;init.d 用於存儲系統啟動過程中需要由init調度執行的腳步文件。
4)./home 用戶主目錄的基點,比如用戶user的主目錄就是/home/user,可以用~user表示。
5)./lib 標准程序設計庫,又叫動態鏈接共享庫,作用類似windows里的.dll文件。該目錄含有系統引導過程以及運行系統命令所需要的內核模塊和各種動態鏈接共享庫文件。
6)./sbin 系統管理命令,這里存放的是系統管理員使用的管理和維護程序。
7)./tmp 公用的臨時文件存儲點。 用於存儲系統運行過程中生成的臨時文件,也可以供用戶存儲自己的臨時文件。
8)./root 系統管理員的主目錄(超級用戶的主目錄)。
9)./mnt 系統提供這個目錄是讓用戶臨時掛載其他的文件系統。
10)./lost+found 這個目錄平時是空的,系統非正常關機而留下「無家可歸」的文件(windows下叫什麼.chk)就在這里。每個文件系統分區都存在一個lost+found目錄,用於存儲fsck命令在檢測與修復文件系統時刪除的文件或目錄。
11)./proc 虛擬的目錄,是系統內存的映射。可直接訪問這個目錄來獲取系統信息。
12)./var 某些大文件的溢出區,比方說各種服務的日誌文件。既可以作為一個單獨的文件系統,也可以作為根目錄下的一個子目錄,用於存儲各種可變長的數據文件、暫存文件或待處理的臨時文件等。
13)./usr 最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄。其中包含:/usr/x11r6 存放x window的目錄 ;/usr/bin 眾多的應用程序;/usr/sbin 超級用戶的一些管理程序; /usr/doc linux文檔;/usr/include linux下開發和編譯應用程序所需要的頭文件; /usr/lib 常用的動態鏈接庫和軟體包的配置文件;/usr/man 幫助文檔;/usr/src 源代碼,linux內核的源代碼就放在/usr/src/linux里;/usr/local/bin 本地增加的命令;/usr/local/lib 本地增加的庫。
14)./boot 其中包含系統引導程序、Linux內核程序文件vmlinuz、磁碟內存映像文件initrd以及GRUB初始引導程序和配置文件等。
15)./media 移動存儲介質的安裝點。
16)./opt應用程序等附加軟體的安裝目錄。
17)./srv 用於存儲本地系統提供的服務進程所用的數據文件。
18)./sys 系統各種設備配置信息的根目錄。
下面詳細介紹;
/etc文件系統
/etc 目錄包含各種系統配置文件,下面說明其中的一些。其他的你應該知道它們屬於哪個
程序,並閱讀該程序的m a n頁。許多網路配置文件也在/etc 中。
1. /etc/rc或/etc/rc.d或/etc/rcN.d
啟動、或改變運行級時運行的腳本或腳本的目錄。
2. /etc/passwd
用戶資料庫,其中的域給出了用戶名、真實姓名、用戶起始目錄、加密口令和用戶的其他信息。
3. /etc/fdprm
軟盤參數表,用以說明不同的軟盤格式。可用setfdprm 進行設置。更多的信息見setfdprm 的幫助頁。
4. /etc/fstab
指定啟動時需要自動安裝的文件系統列表。也包括用swapon -a啟用的swap區的信息。
5. /etc/group
類似/etc/passwd ,但說明的不是用戶信息而是組的信息。包括組的各種數據。
6. /etc/inittab
init 的配置文件。
7. /etc/issue
包括用戶在登錄提示符前的輸出信息。通常包括系統的一段短說明或歡迎信息。具體內容由系統管理員確定。
8. /etc/magic
「f i l e」的配置文件。包含不同文件格式的說明,「f i l e」基於它猜測文件類型。
9. /etc/motd
motd是message of the day的縮寫,用戶成功登錄後自動輸出。內容由系統管理員確定。
常用於通告信息,如計劃關機時間的警告等。
10. /etc/mtab
當前安裝的文件系統列表。由腳本( s c r i t p )初始化,並由mount 命令自動更新。當需要一個當前安裝的文件系統的列表時使用(例如df 命令)。
11. /etc/shadow
在安裝了影子( shadow )口令軟體的系統上的影子口令文件。影子口令文件將/ etc/ passwd 文件中的加密口令移動到/ etc/ shadow中,而後者只對超級用戶( root)可讀。這使破譯口令更困難,以此增加系統的安全性。
12. /etc/login.defs
login命令的配置文件。
13. /etc/printcap
類似/etc/termcap ,但針對列印機。語法不同。
14. /etc/profile 、/ etc/ csh . login、/etc/csh.cshrc
登錄或啟動時bourne或c shells執行的文件。這允許系統管理員為所有用戶建立全局預設環境。
15. /etc/securetty
確認安全終端,即哪個終端允許超級用戶( root)登錄。一般只列出虛擬控制台,這樣就不可能(至少很困難)通過數據機( modem)或網路闖入系統並得到超級用戶特權。
16. /etc/shells
列出可以使用的shell。chsh 命令允許用戶在本文件指定范圍內改變登錄的shell。提供一台機器f t p服務的服務進程ftpd 檢查用戶shell是否列在/etc/shells 文件中,如果不是,將不允許該用戶登錄。
17. /etc/termcap
終端性能資料庫。說明不同的終端用什麼「轉義序列」控制。寫程序時不直接輸出轉義序列(這樣只能工作於特定品牌的終端),而是從/etc/termcap 中查找要做的工作的正確序列。這樣,多數的程序可以在多數終端上運行。
/dev文件系統
/dev 目錄包括所有設備的設備文件。設備文件用特定的約定命名,這在設備列表中說明。 設備文件在安裝時由系統產生,以後可以用/dev/makedev 描述。/ d e v / m a k e d e v.local 是系統管理員為本地設備文件(或連接)寫的描述文稿(即如一些非標准設備驅動不是標准makedev 的一部分)。下面簡要介紹/ d e v下一些常用文件。
1. /dev/console
系統控制台,也就是直接和系統連接的監視器。
2. /dev/hd
i d e硬碟驅動程序介面。如:/dev/hda指的是第一個硬碟,hda則是指/dev / hda的第一個 分區。如系統中有其他的硬碟,則依次為/ d e v / h d b、/ d e v / h d c、. . . . . .;如有多個分區則依次為hda1、hda2..................。
3. /dev/sd
scsi磁碟驅動程序介面。如有系統有s c s i硬碟,就不會訪問/dev/had,而會訪問/dev / sda。
4. /dev/fd
軟碟機設備驅動程序。如:/dev/fd0指系統的第一個軟盤,也就是通常所說的a:盤, /dev/fd1指第二個軟盤,. . . . . .而/ d e v / f d 1 h 1 4 4 0則表示訪問驅動器1中的4 . 5高密盤。
5. /dev/st
scsi磁帶驅動器驅動程序。
6. /dev/tty
提供虛擬控制台支持。如:/dev/tty 1指的是系統的第一個虛擬控制台, /dev/tty 是系統的第二個虛擬控制台。
7. /dev/pty
提供遠程登陸偽終端支持。在進行telnet登錄時就要用到/dev/pty 設備。
8. /dev/ttys
計算機串列介面,對於d o s來說就是「 com 1」口。
9. /dev/cua
計算機串列介面,與數據機一起使用的設備。
10. /dev/null
「黑洞」,所有寫入該設備的信息都將消失。例如:當想要將屏幕上的輸出信息隱藏起來
時,只要將輸出信息輸入到/dev/null 中即可。
/usr文件系統
/usr 是個很重要的目錄,通常這一文件系統很大,因為所有程序安裝在這里。/usr 里的
所有文件一般來自l i n u x發行版( distribution );本地安裝的程序和其他東西在/usr/local 下,因為這樣可以在升級新版系統或新發行版時無須重新安裝全部程序。/usr 目錄下的許多內容是可選的,但這些功能會使用戶使用系統更加有效。/ u s r可容納許多大型的軟體包和它們的配置 文件。下面列出一些重要的目錄(一些不太重要的目錄被省略了)。
1. /usr/x11r6
包含x wi ndow系統的所有可執行程序、配置文件和支持文件。為簡化x的開發和安裝,x的文件沒有集成到系統中。x wi ndow系統是一個功能強大的圖形環境,提供了大量的圖形工具程序。用戶如果對microsoft windows或mac hintosh比較熟悉的話,就不會對x wi ndow系統感到束手無策了。
2. /usr/x386
類似/usr/x11r6 ,但是是專門給x11 release 5的。
❷ 根文件系統的簡介
首先要明白的是「什麼是文件系統」,文件系統是對一個存儲設備上的數據和元數據進行組織的機制。這種機制有利於用戶和操作系統的交互。在一篇oracle的技術文章中看到這樣一句話「盡管內核是 Linux 的核心,但文件卻是用戶與操作系統交互所採用的主要工具。這對 Linux 來說尤其如此,這是因為在 UNIX 傳統中,它使用文件 I/O 機制管理硬體設備和數據文件」,這句話我是這樣理解的,在Linux沒有文件系統的話,用戶和操作系統的交互也就斷開了,例如我們使用最多的交互shell,包括其它的一些用戶程序,都沒有辦法運行。在這里可以看到文件系統相對於Linux操作系統的重要性。下面是Linux文件系統組件的體系結構。
用戶空間包含一些應用程序(例如,文件系統的使用者)和 GNU C 庫(glibc),它們為文件系統調用(打開、讀取、寫和關閉)提供用戶介面。系統調用介面的作用就像是交換器,它將系統調用從用戶空間發送到內核空間中的適當端點。
VFS 是底層文件系統的主要介面。這個組件導出一組介面,然後將它們抽象到各個文件系統,各個文件系統的行為可能差異很大。有兩個針對文件系統對象的緩存(inode 和dentry)。它們緩存最近使用過的文件系統對象。
每個文件系統實現(比如 ext2、JFS 等等)導出一組通用介面,供 VFS 使用。緩沖區緩存會緩存文件系統和相關塊設備之間的請求。例如,對底層設備驅動程序的讀寫請求會通過緩沖區緩存來傳遞。這就允許在其中緩存請求,減少訪問物理設備的次數,加快訪問速度。以最近使用(LRU)列表的形式管理緩沖區緩存。注意,可以使用 sync 命令將緩沖區緩存中的請求發送到存儲媒體(迫使所有未寫的數據發送到設備驅動程序,進而發送到存儲設備)。
當我們在Windows下,提到文件系統時,你的第一反應是想到的是什麼?是不是Windows下的一些Fat32、NTFS等的文件系統的類型。而在Linux中,你可能會想到Ext2、Ext3,但你還必須要有一個根文件系統的概念。根文件系統首先是一種文件系統,該文件系統不僅具有普通文件系統的存儲數據文件的功能,但是相對於普通的文件系統,它的特殊之處在於,它是內核啟動時所掛載(mount)的第一個文件系統,內核代碼的映像文件保存在根文件系統中,系統引導啟動程序會在根文件系統掛載之後從中把一些初始化腳本(如rcS,inittab)和服務載入到內存中去運行。我們要明白文件系統和內核是完全獨立的兩個部分。在嵌入式中移植的內核下載到開發板上,是沒有辦法真正的啟動Linux操作系統的,會出現無法載入文件系統的錯誤。
那麼根文件系統在系統啟動中到底是什麼時候掛載的呢?先將/dev/ram0掛載,而後執行/linuxrc.等其執行完後。切換根目錄,再掛載具體的根文件系統.根文件系統執行完之後,也就是到了Start_kernel()函數的最後,執行init的進程,也就第一個用戶進程。對系統進行各種初始化的操作。如果要弄明白這里的過程的話,可要好好的看看Linux內核源碼了。下圖展示了VFS,內核,文件系統的層次結構:
根文件系統之所以在前面加一個」根「,說明它是載入其它文件系統的」根「,既然是根的話,那麼如果沒有這個根,其它的文件系統也就沒有辦法進行載入的。它包含系統引導和使其他文件系統得以掛載(mount)所必要的文件。根文件系統包括Linux啟動時所必須的目錄和關鍵性的文件,例如Linux啟動時都需要有init目錄下的相關文件,在 Linux掛載分區時Linux一定會找/etc/fstab這個掛載文件等,根文件系統中還包括了許多的應用程序bin目錄等,任何包括這些Linux 系統啟動所必須的文件都可以成為根文件系統。
Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。成功之後可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。
在 Linux 中將一個文件系統與一個存儲設備關聯起來的過程稱為掛載(mount)。使用 mount 命令將一個文件系統附著到當前文件系統層次結構中(根)。在執行掛裝時,要提供文件系統類型、文件系統和一個掛裝點。根文件系統被掛載到根目錄下「/」上後,在根目錄下就有根文件系統的各個目錄,文件:/bin /sbin /mnt等,再將其他分區掛接到/mnt目錄上,/mnt目錄下就有這個分區的各個目錄,文件。
Linux根文件系統中一般有如下圖的幾個目錄:
1./bin目錄
該目錄下的命令可以被root與一般賬號所使用,由於這些命令在掛接其它文件系統之前就可以使用,所以/bin目錄必須和根文件系統在同一個分區中。
/bin目錄下常用的命令有:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、[、test等。其中「[」命令就是test命令,我們在利用Busybox製作根文件系統時,在生成的bin目錄下,可以看到一些可執行的文件,也就是可用的一些命令。
2./sbin 目錄
該目錄下存放系統命令,即只有系統管理員(俗稱最高許可權的root)能夠使用的命令,系統命令還可以存放在/usr/sbin,/usr/local/sbin目錄下,/sbin目錄中存放的是基本的系統命令,它們用於啟動系統和修復系統等,與/bin目錄相似,在掛接其他文件系統之前就可以使用/sbin,所以/sbin目錄必須和根文件系統在同一個分區中。
/sbin目錄下常用的命令有:shutdown、reboot、fdisk、fsck、init等,本地用戶自己安裝的系統命令放在/usr/local/sbin目錄下。
3、/dev目錄
該目錄下存放的是設備與設備介面的文件,設備文件是Linux中特有的文件類型,在Linux系統下,以文件的方式訪問各種設備,即通過讀寫某個設備文件操作某個具體硬體。比如通過dev/ttySAC0文件可以操作串口0,通過/dev/mtdblock1可以訪問MTD設備的第2個分區。比較重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*等。
4./etc目錄
該目錄下存放著系統主要的配置文件,例如人員的賬號密碼文件、各種服務的其實文件等。一般來說,此目錄的各文件屬性是可以讓一般用戶查閱的,但是只有root有許可權修改。對於PC上的Linux系統,/etc目錄下的文件和目錄非常多,這些目錄文件是可選的,它們依賴於系統中所擁有的應用程序,依賴於這些程序是否需要配置文件。在嵌入式系統中,這些內容可以大為精減。
5./lib目錄
該目錄下存放共享庫和可載入(驅動程序),共享庫用於啟動系統。運行根文件系統中的可執行程序,比如:/bin /sbin 目錄下的程序。
6./home目錄
系統默認的用戶文件夾,它是可選的,對於每個普通用戶,在/home目錄下都有一個以用戶名命名的子目錄,裡面存放用戶相關的配置文件。
7./root目錄
系統管理員(root)的主文件夾,即是根用戶的目錄,與此對應,普通用戶的目錄是/home下的某個子目錄。
8./usr目錄
/usr目錄的內容可以存在另一個分區中,在系統啟動後再掛接到根文件系統中的/usr目錄下。裡面存放的是共享、只讀的程序和數據,這表明/usr目錄下的內容可以在多個主機間共享,這些主要也符合FHS標準的。/usr中的文件應該是只讀的,其他主機相關的,可變的文件應該保存在其他目錄下,比如/var。/usr目錄在嵌入式中可以精減。
9./var目錄
與/usr目錄相反,/var目錄中存放可變的數據,比如spool目錄(mail,news),log文件,臨時文件。
10./proc目錄
這是一個空目錄,常作為proc文件系統的掛接點,proc文件系統是個虛擬的文件系統,它沒有實際的存儲設備,裡面的目錄,文件都是由內核
臨時生成的,用來表示系統的運行狀態,也可以操作其中的文件控制系統。
11./mnt目錄
用於臨時掛載某個文件系統的掛接點,通常是空目錄,也可以在裡面創建一引起空的子目錄,比如/mnt/cdram /mnt/hda1 。用來臨時掛載光碟、移動存儲設備等。
12. /tmp目錄
用於存放臨時文件,通常是空目錄,一些需要生成臨時文件的程序用到的/tmp目錄下,所以/tmp目錄必須存在並可以訪問。
那我們利用Busybox製作根文件系統就是創建這上面的這些目錄,和這些目錄下面的各種文件。
對於嵌入式Linux系統的根文件系統來說,一般可能沒有上面所列出的那麼復雜,比如嵌入式系統通常都不是針對多用戶的,所以/home這個目錄在一般嵌入式Linux中可能就很少用到,而/boot這個目錄則取決於你所使用的BootLoader是否能夠重新獲得內核映象從你的根文件系統在內核啟動之前。一般說來,只有/bin,/dev,/etc,/lib,/proc,/var,/usr這些需要的,而其他都是可選的。
根文件系統一直以來都是所有類Unix操作系統的一個重要組成部分,也可以認為是嵌入式Linux系統區別於其他一些傳統嵌入式操作系統的重要特徵,它給 Linux帶來了許多強大和靈活的功能,同時也帶來了一些復雜性。我們需要清楚的了解根文件系統的基本結構,以及細心的選擇所需要的系統庫、內核模塊和應用程序等,並配置好各種初始化腳本文件,以及選擇合適的文件系統類型並把它放到實際的存儲設備的合適位置,下面是幾中比較常用的文件系統。
❸ Linux根文件系統基本包括哪些內容
通常情況下,Linux內核啟動後期,會尋找並掛載根文件系統。根文件系統可以存在於磁碟上,也可以是存在於內存中的映像,其中包含了Linux系統正常運行所必須的庫和程序等等,按照一定的目錄結構存放。Linux根文件系統基本包括如下內容:
基本的目錄結構:/bin、/sbin、/dev、/etc、/lib、/var、/proc、/sys、/tmp等;整個根文件系統都是掛在根目錄(/)下,FHS對頂層目錄的要求和說明如下表所列。
基本程序運行所需的庫文件,如glibc等;
基本的系統配置文件,如inittab、rc等;
必要的設備文件,如/dev/ttyS0、/dev/console等;
基本應用程序,如sh、ls、cd、mv等。
你可以去【周立功】那邊了解一下的,蠻多信息的。
❹ gap文件系統主要記錄有哪些內容
路徑、名稱、大小、許可權、時間。Gap文件系統主要記錄有文件和文件夾的路徑、名稱、大小、許可權、時間戳等信息,是一種日誌文件系統,會在文件和文件夾的元數據中記錄這些信息,以便用戶可以通過這些信息來查看和追蹤文件的變更情況。
❺ 程序員必備知識(操作系統5-文件系統)
本篇與之前的第三篇的內存管理知識點有相似的地方
對於運行的進程來說,內存就像一個紙箱子, 僅僅是一個暫存數據的地方, 而且空間有限。如果我們想要進程結束之後,數據依然能夠保存下來,就不能只保存在內存里,而是應該保存在 外部存儲 中。就像圖書館這種地方,不僅空間大,而且能夠永久保存。
我們最常用的外部存儲就是 硬碟 ,數據是以文件的形式保存在硬碟上的。為了管理這些文件,我們在規劃文件系統的時候,需要考慮到以下幾點。
第一點,文件系統要有嚴格的組織形式,使得文件能夠 以塊為單位進行存儲 。這就像圖書館里,我們會給設置一排排書架,然後再把書架分成一個個小格子,有的項目存放的資料非常多,一個格子放不下,就需要多個格子來進行存放。我們把這個區域稱為存放原始資料的 倉庫區 。
第二點,文件系統中也要有 索引區 ,用來方便查找一個文件分成的多個塊都存放在了什麼位置。這就好比,圖書館的書太多了,為了方便查找,我們需要專門設置一排書架,這裡面會寫清楚整個檔案庫有哪些資料,資料在哪個架子的哪個格子上。這樣找資料的時候就不用跑遍整個檔案庫,在這個書架上找到後,直奔目標書架就可以了。
第三點,如果文件系統中有的文件是熱點文件,近期經常被讀取和寫入,文件系統應該有 緩存層 。這就相當於圖書館裡面的熱門圖書區,這裡面的書都是暢銷書或者是常常被借還的圖書。因為借還的次數比較多,那就沒必要每次有人還了之後,還放回遙遠的貨架,我們可以專門開辟一個區域, 放置這些借還頻次高的圖書。這樣借還的效率就會提高。
第四點,文件應該用 文件夾 的形式組織起來,方便管理和查詢。這就像在圖書館裡面,你可以給這些資料分門別類,比如分成計算機類.文學類.歷史類等等。這樣你也容易管理,項目組借閱的時候只要在某個類別中去找就可以了。
在文件系統中,每個文件都有一個名字,這樣我們訪問一個文件,希望通過它的名字就可以找到。文件名就是一個普通的文本。 當然文件名會經常沖突,不同用戶取相同的名字的情況還是會經常出現的。
要想把很多的文件有序地組織起來,我們就需要把它們成為 目錄 或者文件夾。這樣,一個文件夾里可以包含文件夾,也可以包含文件,這樣就形成了一種 樹形結構 。而我們可以將不同的用戶放在不同的用戶目錄下,就可以一定程度上避免了命名的沖突問題。
第五點,Linux 內核要在自己的內存裡面維護一套數據結構,來保存哪些文件被哪些進程打開和使用 。這就好比,圖書館里會有個圖書管理系統,記錄哪些書被借閱了,被誰借閱了,借閱了多久,什麼時候歸還。
文件系統是操作系統中負責管理持久數據的子系統,說簡單點,就是負責把用戶的文件存到磁碟硬體中,因為即使計算機斷電了,磁碟里的數據並不會丟失,所以可以持久化的保存文件。
文件系統的基本數據單位是 文件 ,它的目的是對磁碟上的文件進行組織管理,那組織的方式不同,就會形成不同的文件系統。
Linux最經典的一句話是:「一切皆文件」,不僅普通的文件和目錄,就連塊設備、管道、socket 等,也都是統一交給文件系統管理的。
Linux文件系統會為每個文件分配兩個數據結構: 索引節點(index node) 和 目錄項(directory entry) ,它們主要用來記錄文件的元信息和目錄層次結構。
●索引節點,也就是inode, 用來記錄文件的元信息,比如inode編號、文件大小訪問許可權、創建時間、修改時間、 數據在磁碟的位置 等等。 索引節點是文件的唯一標識 ,它們之間一一對應, 也同樣都會被 存儲在硬碟 中,所以索引節點同樣佔用磁碟空間。
●目錄項,也就是dentry, 用來記錄文件的名字、索引節點指針以及與其他目錄項的層級關聯關系。多個目錄項關聯起來,就會形成 目錄結構 ,但它與索引節點不同的是,目錄項是由內核維護的一個數據結構,不存放於磁碟,而是 緩存在內存 。
由於索引節點唯一標識一個文件,而目錄項記錄著文件的名,所以目錄項和索引節點的關系是多對一,也就是說,一個文件可以有多個別字。比如,硬鏈接的實現就是多個目錄項中的索引節點指向同一個文件。
注意,目錄也是文件,也是用索引節點唯一標識,和普通文件不同的是,普通文件在磁碟裡面保存的是文件數據,而目錄文件在磁碟裡面保存子目錄或文件。
(PS:目錄項和目錄不是一個東西!你也不是一個東西(^_=), 雖然名字很相近,但目錄是個文件。持久化存儲在磁碟,而目錄項是內核一個數據結構,緩存在內存。
如果查詢目錄頻繁從磁碟讀,效率會很低,所以內核會把已經讀過的目錄用目錄項這個數據結構緩存在內存,下次再次讀到相同的目錄時,只需從內存讀就可以,大大提高了 文件系統的效率。
目錄項這個數據結構不只是表示目錄,也是可以表示文件的。)
磁碟讀寫的最小單位是 扇區 ,扇區的大小隻有512B大小,很明顯,如果每次讀寫都以這么小為單位,那這讀寫的效率會非常低。
所以,文件系統把多個扇區組成了一個 邏輯塊 ,每次讀寫的最小單位就是邏輯塊(數據塊) , Linux中的邏輯塊大小為4KB,也就是一次性讀寫 8個扇區,這將大大提高了磁碟的讀寫的效率。
以上就是索引節點、目錄項以及文件數據的關系,下面這個圖就很好的展示了它們之間的關系:
索引節點是存儲在硬碟上的數據,那麼為了加速文件的訪問,通常會把索引節點載入到內存中。
另外,磁碟進行格式化的時候,會被分成三個存儲區域,分別是超級塊、索引節點區和數據塊區。
●超級塊,用來存儲文件系統的詳細信息,比如塊個數、塊大小、空閑塊等等。
●索引節點區,用來存儲索引節點;
●數據塊區,用來存儲文件或目錄數據;
我們不可能把超級塊和索引節點區全部載入到內存,這樣內存肯定撐不住,所以只有當需要使用的時候,才將其載入進內存,它們載入進內存的時機是不同的.
●超級塊:當文件系統掛載時進入內存;
●索引節點區:當文件被訪問時進入內存;
文件系統的種類眾多,而操作系統希望 對用戶提供一個統一的介面 ,於是在用戶層與文件系統層引入了中間層,這個中間層就稱為 虛擬文件系統(Virtual File System, VFS) 。
VFS定義了一組所有文件系統都支持的數據結構和標准介面,這樣程序員不需要了解文件系統的工作原理,只需要了解VFS提供的統一介面即可。
在Linux文件系統中,用戶空間、系統調用、虛擬機文件系統、緩存、文件系統以及存儲之間的關系如下圖:
Linux支持的文件系統也不少,根據存儲位置的不同,可以把文件系統分為三類:
●磁碟的文件系統,它是直接把數據存儲在磁碟中,比如Ext 2/3/4. XFS 等都是這類文件系統。
●內存的文件系統,這類文件系統的數據不是存儲在硬碟的,而是佔用內存空間,我們經常用到的/proc 和/sys文件系統都屬於這一類,讀寫這類文件,實際上是讀寫內核中相關的數據。
●網路的文件系統,用來訪問其他計算機主機數據的文件系統,比如NFS. SMB等等。
文件系統首先要先掛載到某個目錄才可以正常使用,比如Linux系統在啟動時,會把文件系統掛載到根目錄。
在操作系統的輔助之下,磁碟中的數據在計算機中都會呈現為易讀的形式,並且我們不需要關心數據到底是如何存放在磁碟中,存放在磁碟的哪個地方等等問題,這些全部都是由操作系統完成的。
那麼,文件數據在磁碟中究竟是怎麼樣的呢?我們來一探究竟!
磁碟中的存儲單元會被劃分為一個個的「 塊 」,也被稱為 扇區 ,扇區的大小一般都為512byte.這說明即使一塊數據不足512byte,那麼它也要佔用512byte的磁碟空間。
而幾乎所有的文件系統都會把文件分割成固定大小的塊來存儲,通常一個塊的大小為4K。如果磁碟中的扇區為512byte,而文件系統的塊大小為4K,那麼文件系統的存儲單元就為8個扇區。這也是前面提到的一個問題,文件大小和佔用空間之間有什麼區別?文件大小是文件實際的大小,而佔用空間則是因為即使它的實際大小沒有達到那麼大,但是這部分空間實際也被佔用,其他文件數據無法使用這部分的空間。所以我們 寫入1byte的數據到文本中,但是它佔用的空間也會是4K。
這里要注意在Windows下的NTFS文件系統中,如果一開始文件數據小於 1K,那麼則不會分配磁碟塊來存儲,而是存在一個文件表中。但是一旦文件數據大於1K,那麼不管以後文件的大小,都會分配以4K為單位的磁碟空間來存儲。
與內存管理一樣,為了方便對磁碟的管理,文件的邏輯地址也被分為一個個的文件塊。於是文件的邏輯地址就是(邏輯塊號,塊內地址)。用戶通過邏輯地址來操作文件,操作系統負責完成邏輯地址與物理地址的映射。
不同的文件系統為文件分配磁碟空間會有不同的方式,這些方式各自都有優缺點。
連續分配要求每個文件在磁碟上有一組連續的塊,該分配方式較為簡單。
通過上圖可以看到,文件的邏輯塊號的順序是與物理塊號相同的,這樣就可以實現隨機存取了,只要知道了第一個邏輯塊的物理地址, 那麼就可以快速訪問到其他邏輯塊的物理地址。那麼操作系統如何完成邏輯塊與物理塊之間的映射呢?實際上,文件都是存放在目錄下的,而目錄是一種有結構文件, 所以在文件目錄的記錄中會存放目錄下所有文件的信息,每一個文件或者目錄都是一個記錄。 而這些信息就包括文件的起始塊號和佔有塊號的數量。
那麼操作系統如何完成邏輯塊與物理塊之間的映射呢? (邏輯塊號, 塊內地址) -> (物理塊號, 塊內地址),只需要知道邏輯塊號對應的物理塊號即可,塊內地址不變。
用戶訪問一個文件的內容,操作系統通過文件的標識符找到目錄項FCB, 物理塊號=起始塊號+邏輯塊號。 當然,還需要檢查邏輯塊號是否合法,是否超過長度等。因為可以根據邏輯塊號直接算出物理塊號,所以連續分配支持 順序訪問和隨機訪問 。
因為讀/寫文件是需要移動磁頭的,如果訪問兩個相隔很遠的磁碟塊,移動磁頭的時間就會變長。使用連續分配來作為文件的分配方式,會使文件的磁碟塊相鄰,所以文件的讀/寫速度最快。
連續空間存放的方式雖然讀寫效率高,但是有 磁碟空間碎片 和 文件長度不易擴展 的缺陷。
如下圖,如果文件B被刪除,磁碟上就留下一塊空缺,這時,如果新來的文件小於其中的一個空缺,我們就可以將其放在相應空缺里。但如果該文件的大小大於所
有的空缺,但卻小於空缺大小之和,則雖然磁碟上有足夠的空缺,但該文件還是不能存放。當然了,我們可以通過將現有文件進行挪動來騰出空間以容納新的文件,但是這個在磁碟挪動文件是非常耗時,所以這種方式不太現實。
另外一個缺陷是文件長度擴展不方便,例如上圖中的文件A要想擴大一下,需要更多的磁碟空間,唯一的辦法就只能是挪動的方式,前面也說了,這種方式效率是非常低的。
那麼有沒有更好的方式來解決上面的問題呢?答案當然有,既然連續空間存放的方式不太行,那麼我們就改變存放的方式,使用非連續空間存放方式來解決這些缺陷。
非連續空間存放方式分為 鏈表方式 和 索引方式 。
鏈式分配採取離散分配的方式,可以為文件分配離散的磁碟塊。它有兩種分配方式:顯示鏈接和隱式鏈接。
隱式鏈接是只目錄項中只會記錄文件所佔磁碟塊中的第一塊的地址和最後一塊磁碟塊的地址, 然後通過在每一個磁碟塊中存放一個指向下一 磁碟塊的指針, 從而可以根據指針找到下一塊磁碟塊。如果需要分配新的磁碟塊,則使用最後一塊磁碟塊中的指針指向新的磁碟塊,然後修改新的磁碟塊為最後的磁碟塊。
我們來思考一個問題, 採用隱式鏈接如何將實現邏輯塊號轉換為物理塊號呢?
用戶給出需要訪問的邏輯塊號i,操作系統需要找到所需訪問文件的目錄項FCB.從目錄項中可以知道文件的起始塊號,然後將邏輯塊號0的數據讀入內存,由此知道1號邏輯塊的物理塊號,然後再讀入1號邏輯塊的數據進內存,此次類推,最終可以找到用戶所需訪問的邏輯塊號i。訪問邏輯塊號i,總共需要i+ 1次磁碟1/0操作。
得出結論: 隱式鏈接分配只能順序訪問,不支持隨機訪問,查找效率低 。
我們來思考另外一個問題,採用隱式鏈接是否方便文件拓展?
我們知道目錄項中存有結束塊號的物理地址,所以我們如果要拓展文件,只需要將新分配的磁碟塊掛載到結束塊號的後面即可,修改結束塊號的指針指向新分配的磁碟塊,然後修改目錄項。
得出結論: 隱式鏈接分配很方便文件拓展。所有空閑磁碟塊都可以被利用到,無碎片問題,存儲利用率高。
顯示鏈接是把用於鏈接各個物理塊的指針顯式地存放在一張表中,該表稱為文件分配表(FAT, File Allocation Table)。
由於查找記錄的過程是在內存中進行的,因而不僅顯著地 提高了檢索速度 ,而且 大大減少了訪問磁碟的次數 。但也正是整個表都存放在內存中的關系,它的主要的缺點是 不適 用於大磁碟 。
比如,對於200GB的磁碟和1KB大小的塊,這張表需要有2億項,每一項對應於這2億個磁碟塊中的一個塊,每項如果需要4個位元組,那這張表要佔用800MB內存,很顯然FAT方案對於大磁碟而言不太合適。
一直都在,加油!(*゜Д゜)σ凸←自爆按鈕
鏈表的方式解決了連續分配的磁碟碎片和文件動態打展的問題,但是不能有效支持直接訪問(FAT除外) ,索引的方式可以解決這個問題。
索引的實現是為每個文件創建一個 索引數據塊 ,裡面存放的 是指向文件數據塊的指針列表 ,說白了就像書的目錄一樣,要找哪個章節的內容,看目錄查就可以。
另外, 文件頭需要包含指向索引數據塊的指針 ,這樣就可以通過文件頭知道索引數據塊的位置,再通過索弓|數據塊里的索引信息找到對應的數據塊。
創建文件時,索引塊的所有指針都設為空。當首次寫入第i塊時,先從空閑空間中取得一個塊, 再將其地址寫到索引塊的第i個條目。
索引的方式優點在於:
●文件的創建、增大、縮小很方便;
●不會有碎片的問題;
●支持順序讀寫和隨機讀寫;
由於索引數據也是存放在磁碟塊的,如果文件很小,明明只需一塊就可以存放的下,但還是需要額外分配一塊來存放索引數據,所以缺陷之一就是存儲索引帶來的開銷。
如果文件很大,大到一個索引數據塊放不下索引信息,這時又要如何處理大文件的存放呢?我們可以通過組合的方式,來處理大文件的存儲。
先來看看 鏈表+索引 的組合,這種組合稱為 鏈式索引塊 ,它的實現方式是在 索引數據塊留出一個存放下一個索引數據塊的指針 ,於是當一個索引數據塊的索引信息用完了,就可以通過指針的方式,找到下一個索引數據塊的信息。那這種方式也會出現前面提到的鏈表方式的問題,萬一某個指針損壞了,後面的數據也就會無法讀取了。
還有另外一種組合方式是 索引+索引 的方式,這種組合稱為多級索引塊,實現方式是通過一個索引塊來存放多個索引數據塊,一層套一層索引, 像極了俄羅斯套娃是吧๑乛◡乛๑
前面說到的文件的存儲是針對已經被佔用的數據塊組織和管理,接下來的問題是,如果我要保存一個數據塊, 我應該放在硬碟上的哪個位置呢?難道需要將所有的塊掃描一遍,找個空的地方隨便放嗎?
那這種方式效率就太低了,所以針對磁碟的空閑空間也是要引入管理的機制,接下來介紹幾種常見的方法:
●空閑表法
●空閑鏈表法
●點陣圖法
空閑表法
空閑表法就是為所有空閑空間建立一張表,表內容包括空閑區的第一個塊號和該空閑區的塊個數,注意,這個方式是連續分配的。如下圖:
當請求分配磁碟空間時,系統依次掃描空閑表裡的內容,直到找到一個合適的空閑區域為止。當用戶撤銷一個文件時,系統回收文件空間。這時,也需順序掃描空閑表,尋找一個空閑表條目並將釋放空間的第一個物理塊號及它佔用的塊數填到這個條目中。
這種方法僅當有少量的空閑區時才有較好的效果。因為,如果存儲空間中有著大量的小的空閑區,則空閑表變得很大,這樣查詢效率會很低。另外,這種分配技術適用於建立連續文件。
空閑鏈表法
我們也可以使用鏈表的方式來管理空閑空間,每一個空閑塊里有一個指針指向下一個空閑塊,這樣也能很方便的找到空閑塊並管理起來。如下圖:
當創建文件需要一塊或幾塊時,就從鏈頭上依次取下一塊或幾塊。反之,當回收空間時,把這些空閑塊依次接到鏈頭上。
這種技術只要在主存中保存一個指針, 令它指向第一個空閑塊。其特點是簡單,但不能隨機訪問,工作效率低,因為每當在鏈上增加或移動空閑塊時需要做很多1/0操作,同時數據塊的指針消耗了一定的存儲空間。
空閑表法和空閑鏈表法都不適合用於大型文件系統,因為這會使空閑表或空閑鏈表太大。
點陣圖法
點陣圖是利用二進制的一位來表示磁碟中一個盤塊的使用情況,磁碟上所有的盤塊都有一個二進制位與之對應。
當值為0時,表示對應的盤塊空閑,值為1時,表示對應的盤塊已分配。它形式如下:
在Linux文件系統就採用了點陣圖的方式來管理空閑空間,不僅用於數據空閑塊的管理,還用於inode空閑塊的管理,因為inode也是存儲在磁碟的,自然也要有對其管理。
前面提到Linux是用點陣圖的方式管理空閑空間,用戶在創建一個新文件時, Linux 內核會通過inode的點陣圖找到空閑可用的inode,並進行分配。要存儲數據時,會通過塊的點陣圖找到空閑的塊,並分配,但仔細計算一下還是有問題的。
數據塊的點陣圖是放在磁碟塊里的,假設是放在一個塊里,一個塊4K,每位表示一個數據塊,共可以表示4 * 1024 * 8 = 2^15個空閑塊,由於1個數據塊是4K大小,那麼最大可以表示的空間為2^15 * 4 * 1024 = 2^27個byte,也就是128M。
也就是說按照上面的結構,如果採用(一個塊的點陣圖+ 一系列的塊),外加一(個塊的inode的點陣圖+一系列的inode)的結構能表示的最大空間也就128M,
這太少了,現在很多文件都比這個大。
在Linux文件系統,把這個結構稱為一個 塊組 ,那麼有N多的塊組,就能夠表示N大的文件。
最終,整個文件系統格式就是下面這個樣子。
最前面的第一個塊是引導塊,在系統啟動時用於啟用引導,接著後面就是一個一個連續的塊組了,塊組的內容如下:
● 超級塊 ,包含的是文件系統的重要信息,比如inode總個數、塊總個數、每個塊組的inode個數、每個塊組的塊個數等等。
● 塊組描述符 ,包含文件系統中各個塊組的狀態,比如塊組中空閑塊和inode的數目等,每個塊組都包含了文件系統中「所有塊組的組描述符信息」。
● 數據點陣圖和inode點陣圖 ,用於表示對應的數據塊或inode是空閑的,還是被使用中。
● inode 列表 ,包含了塊組中所有的inode, inode 用於保存文件系統中與各個文件和目錄相關的所有元數據。
● 數據塊 ,包含文件的有用數據。
你可以會發現每個塊組里有很多重復的信息,比如 超級塊和塊組描述符表,這兩個都是全局信息,而且非常的重要 ,這么做是有兩個原因:
●如果系統崩潰破壞了超級塊或塊組描述符,有關文件系統結構和內容的所有信息都會丟失。如果有冗餘的副本,該信息是可能恢復的。
●通過使文件和管理數據盡可能接近,減少了磁頭尋道和旋轉,這可以提高文件系統的性能。
不過,Ext2 的後續版本採用了稀疏技術。該做法是,超級塊和塊組描述符表不再存儲到文件系統的每個塊組中,而是只寫入到塊組0、塊組1和其他ID可以表示為3、5、7的冪的塊組中。
在前面,我們知道了一個普通文件是如何存儲的,但還有一個特殊的文件,經常用到的目錄,它是如何保存的呢?
基於Linux 一切切皆文件的設計思想,目錄其實也是個文件,你甚至可以通過vim打開它,它也有inode, inode 裡面也是指向一些塊。
和普通文件不同的是, 普通文件的塊裡面保存的是文件數據,而目錄文件的塊裡面保存的是目錄裡面一項一項的文件信息 。
在目錄文件的塊中,最簡單的保存格式就是 列表 ,就是一項一項地將目錄下的文件信息(如文件名、文件inode.文件類型等)列在表裡。
列表中每一項就代表該目錄下的文件的文件名和對應的inode,通過這個inode,就可以找到真正的文件。
通常,第一項是「則」,表示當前目錄,第二項是.,表示上一級目錄, 接下來就是一項一項的文件名和inode。
如果一個目錄有超級多的文件,我們要想在這個目錄下找文件,按照列表一項一項的找,效率就不高了。
於是,保存目錄的格式改成 哈希表 ,對文件名進行哈希計算,把哈希值保存起來,如果我們要查找一個目錄下面的文件名,可以通過名稱取哈希。如果哈希能夠匹配上,就說明這個文件的信息在相應的塊裡面。
Linux系統的ext文件系統就是採用了哈希表,來保存目錄的內容,這種方法的優點是查找非常迅速,插入和刪除也較簡單,不過需要一些預備措施來避免哈希沖突。
目錄查詢是通過在磁碟上反復搜索完成,需要不斷地進行/0操作,開銷較大。所以,為了減少/0操作,把當前使用的文件目錄緩存在內存,以後要使用該文件時只要在內存中操作,從而降低了磁碟操作次數,提高了文件系統的訪問速度。
感謝您的閱讀,希望您能攝取到知識!加油!沖沖沖!(發現光,追隨光,成為光,散發光!)我是程序員耶耶!有緣再見。<-biubiu-⊂(`ω´∩)
❻ 操作系統的文件系統由哪五部分組成的
文件系統由三部分組成:
1、文件系統的介面,對對象操縱和管理的軟體集合;
2、對象;
3、屬性。
文件系統介紹:
文件系統是操作系統用於明確存儲設備(常見的是磁碟,也有基於NAND Flash的固態硬碟)或分區上的文件的方法和數據結構,即在存儲設備上組織文件的方法讓游。
文件管理系統簡稱文件系統,是操作系統中負責管理和存儲文件信息的軟體機構。
是虛擬DOS命令提示符,而不是真正的DOS
真正的DOS是一個獨立的操作系統,而且是單任務操作的,靠命令來操作控制軟體和硬體資源
(1)終端:用戶進入網路所用的設備,如電傳打字機、鍵盤顯示器、計算機等。在區域網中,終端一般由微機擔任,叫工作站,用戶通過工作站共享網上資源。
(2)主機:有於進行數據分析處理和網路控制的計算機系統,其中包括外部設備、操作系統及其它軟體。在區域網中,主機一般由較高檔的計算機(如486和586機)擔任,叫伺服器,它應具有豐富的資源,如大容量硬碟、足夠的內存和各種軟體等。
(3)通信處理機:在接有終端的通信線路和主機之間設置的通信控制處理機器,分擔數據交換和各種通信的控制和管理。在區域網中,一般不設通訊處理機,直接由主機承擔通信的控制和管理任務。
(4)本地線路:指把終端與節點蔌主機連接起來的線路,其中包括集中器或多路器等。它是一種低速線路,費用和效率均較低。
UI
用戶界面
桌面其實是主文件夾中的一個子目錄。
Windows的在Administrator文件夾裡面有個桌面的文件夾,自己看看。
Linux的位置一般在/home/用戶名/Desk下。
個人的理解是這樣的!
進程的組成:靜態描述: 是由程序,數據和進程式控制制塊(PCB)組成 PCB的作用: 1 PCB中包含進程的描述信息,控制信息及資源信息,是進程動態特徵的集中反映 2 創建一個進程時將首先創建其對應的PCB,進程完成後蠢滑祥則釋放其PCB,進程即消亡 3 系統根據P...
有時候出現水平或者垂直滾動條是不一定的,是根據窗口中的內容來決定的.內容的多少來決定是否需要水平滾動條或者是垂直滾動條,或者兩者都有.
即動力元件、執行元件、控制元件、無件和液壓油。
計算機系統包括硬體系統和軟體系統,硬體系統由中央處理器、內存儲器,外部存儲器、出入設備、輸出設備組成
WINDOWS是由美國微軟推出由發展而來的
windows95之前windows版本需DOS支持
windows95windows98由w4.0或w4.01等支持,
所以它主要包括三大部分
引導部分,資源管理部分,圖形界面
引導部分主要負責計算機的啟動與硬體連接工作及一些原DOS內容,支持一些服務程序
資源管理部分,各種資源的處理分配包括網路資源
圖形界面是讓大多數人省力的工作有一個友好的界面
❼ 在操作系統中,文件系統的主要作用是【 】。
文件系統的功能包括:管理和調度文件的存儲空間,提供文件的邏輯結構、物理結構和存儲方法;實現文件從標識到實際地址的映射,實現文件的控制操作和存取操作,實現文件信息的共享並提供可靠的文件保密和保護措施,提供文件的安全措施。
文件的邏輯結構是依照文件的內容的邏輯關系組織文件結構。文件的邏輯結構可以分為流式文件和記錄式文件。
流式文件:文件中的數據是一串字元流,沒有結構。
記錄文件:由若干邏輯記錄組成,每條記錄又由相同的數據項組成,數據項的長度可以是確定的,也可以是不確定的。
主要缺陷:數據關聯差,數據不一致,冗餘性。
(7)文件系統主要內容擴展閱讀
從系統角度來看,文件系統對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶不再使用時撤銷文件等。
在Linux中普通文件和目錄文件保存在稱為塊物理設備的磁碟或者磁帶上。一套Linux系統支持若干物理盤,每個物理盤可定義一個或者多個文件系統。(類比於微機磁碟分區)。每個文件系統由邏輯塊的序列組成,一個邏輯盤空間一般劃分為幾個用途各不相同的部分,即引導塊、超級塊、inode區以及數據區等。