Linux文件系統(一)文件系統基本概念

感謝地心引力 2022-01-08 06:06:48 阅读数:532

linux 文件 文件 基本概念 基本

Linux支持許多種文件系統,從日志型文件系統到集群文件系統和加密文件系統。

在LINUX系統中有一個重要的概念:一切都是文件。 其實這是UNIX哲學的一個體現,而Linux是重寫UNIX而來,所以這個概念也就傳承了下來。在UNIX系統中,把一切資源都看作是文件,包括硬件設備。UNIX系統把每個硬件都看成是一個文件,通常稱為設備文件,這樣用戶就可以用讀寫文件的方式實現對硬件的訪問。

1.文件系統概述

文件系統是對一個存儲設備上的數據和元數據進行組織的機制,其目的是易於實現數據的查詢和存取。不同的操作系統具有不同的文件系統,一個操作系統可能無法兼容所有的文件系統。Linux文件系統接口實現為分層的體系結構,從而將用戶接口層、文件系統實現和操作存儲設備的驅動程序分開。

要透徹理解文件系統,需要明確以下幾個名詞:

  1. 存儲介質
    用以存儲數據的物理設備,如軟盤、硬盤、光盤、磁帶、網絡存儲設備等。
  2. 磁盤的分割
    對於容量較大的存儲介質來說,通常是硬盤。在使用時,需要合理地規劃分區。常用的Linux磁盤分割工具有fdisk、cfdisk、parted等。此外,還有PQ等第三方工具。
  3. 創建文件系統
    創建新的文件系統是一個過程,通常成為初始化或格式化,整個過程是針對存儲介質進行的。一般情况下,操作系統都有自己相應的工具。創建文件系統是在分割磁盤空間的基礎上進行的。
  4. 掛載
    在Linux或Unix系統中,沒有磁盤分區的邏輯概念(如C盤、D盤等),仍和一個種類的文件系統被創建後,都需要掛載到某個特定的目錄才能使用,這個過程相當於激活一個文件系統,使它能够使用。

    Windows的文件系統掛載使用其內部機制完成,用戶基本無法探知其過程。而Linux使用mount工具對文件系統進行掛載。掛載文件系統時,需要明確掛載點。在創建文件系統後,操作系統會提示將此文件系統掛載至哪個比特置,這個比特置就是掛載點,通常選擇“/”即根目錄。掛載點的實質是一個空的目錄。

2.文件系統的類型

文件系統有多種類型,不同操作系統采用不同的文件系統,對其他的文件系統的支持程度也不相同。

Linux的文件系統主要有ext\ext2、ext3、ext4、reiserfs 等

(1)ext系列

文件系統 介紹 特點 優勢
ext 第一代擴展文件系統,一種文件系統,於1992年4月發錶,是為linux核心所做的第一個文件系統。采用Unix文件系統(UFS)的元數據結構,以克服MINIX文件系統性能不佳的問題。 它是在linux上,第一個利用虛擬文件系統實現出的文件系統 克服MINIX文件系統性能不佳的問題
ext2 第二代擴展文件系統是LINUX內核所用的文件系統。它開始由Rémy Card設計,用以代替ext,於1993年1月加入linux核心支持之中。ext2 的經典實現為LINUX內核中的ext2fs文件系統驅動,最大可支持2TB的文件系統,至linux核心2.6版時,擴展到可支持32TB。 在ext2文件系統中,文件由inode(包含有文件的所有信息)進行唯一標識。一個文件可能對應多個文件名,只有在所有文件名都被删除後,該文件才會被删除。此外,同一文件在磁盤中存放和被打開時所對應的inode是不同的,並由內核負責同步。 文件系統高效穩定
ext3 EXT3是第三代擴展文件系統(英語:Third extended filesystem,縮寫為ext3),是一個日志文件系統,常用於Linux操作系統。 Ext3文件系統是直接從Ext2文件系統發展而來,目前ext3文件系統已經非常穩定可靠。它完全兼容ext2文件系統。用戶可以平滑地過渡到一個日志功能健全的文件系統中來。 1、高可用性:系統使用了ext3文件系統後,即使在非正常關機後,系統也不需要檢查文件系統。 2、數據的完整性:避免了意外宕機對文件系統的破壞。 3、文件系統的速度:因為ext3的日志功能對磁盤的驅動器讀寫頭進行了優化。所以,文件系統的讀寫性能較之Ext2文件系統並來說,性能並沒有降低。 4、數據轉換 :“由ext2文件系統轉換成ext3文件系統非常容易。 5、多種日志模式
ext4 EXT4是第四代擴展文件系統(英語:Fourth extended filesystem,縮寫為 ext4)是Linux系統下的日志文件系統,是ext3文件系統的後繼版本。Ext4是由Ext3的維護者Theodore Tso領導的開發團隊實現的,並引入到Linux2.6.19內核中。 Ext4是Ext3的改進版,修改了Ext3中部分重要的數據結構,而不僅僅像Ext3對Ext2那樣,只是增加了一個日志功能而已。Ext4可以提供更佳的性能和可靠性,還有更為豐富的功能 1.與Ext3兼容:執行若幹條命令,就能從Ext3在線遷移到Ext4,而無須重新格式化磁盤或重新安裝系統。 2.更大的文件系統和更大的文件:較之Ext3目前所支持的最大16TB文件系統和最大2TB文件,Ext4分別支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系統,以及16TB 的文件。 3.無限數量的子目錄:Ext3目前只支持32,000個子目錄,而Ext4支持無限數量的子目錄。 4.Extents:Ext4引入了現代文件系統中流行的extents概念,每個 extent 為一組連續的數據塊,相比Ext3采用間接塊映射,提高了不少效率。 5.多塊分配:Ext4 的多塊分配器“multiblock allocator”(mballoc) 支持一次調用分配多個數據塊。 *6.延遲分配 7.快速 fsck 8.日志校驗 9.“無日志”(No Journaling)模式 10.在線碎片整理 11.inode 相關特性:較之Ext3默認的inode大小128字節,ext4默認inode大小為256字節

(這裏參考了:參考)

(2)Reiserfs

reiserfs文件系統是最早用於Linux的日志文件系統之一。支持大文件,支持反删除。

3. Ubuntu文件系統的結構

(1)概述

Ubuntu 16.04使用的文件系統是ext3,而Ubuntu18.04已經采用ext4文件系統,可以更加輕松地掛載windows系統的文件,實現資源共享。

與其他linux發行版本類似,Ubuntu支持長文件名和目錄名。文件名的最大長度是255個字符(characters),文件路徑的最大長度是4096字符(characters), 即可以包含16級的最大文件長度的路徑。

 1 #ifndef _LINUX_LIMITS_H
2 #define _LINUX_LIMITS_H
3
4 #define NR_OPEN 1024
5
6 #define NGROUPS_MAX 65536 /* supplemental group IDs are available */
7 #define ARG_MAX 131072 /* # bytes of args + environ for exec() */
8 #define LINK_MAX 127 /* # links a file may have */
9 #define MAX_CANON 255 /* size of the canonical input queue */
10 #define MAX_INPUT 255 /* size of the type-ahead buffer */
11 #define NAME_MAX 255 /* # 文件名最大字符數 */
12 #define PATH_MAX 4096 /* # 相對路徑名最大字符數 */
13 #define PIPE_BUF 4096 /* # bytes in atomic write to a pipe */
14 #define XATTR_NAME_MAX 255 /* # chars in an extended attribute name */
15 #define XATTR_SIZE_MAX 65536 /* size of an extended attribute value (64k) */
16 #define XATTR_LIST_MAX 65536 /* size of extended attribute namelist (64k) */
17
18 #define RTSIG_MAX 32
19
20 #endif

字符指的是ASCII字符,如果是漢字或者其他語言,則需要視編碼而定

(2)路徑

“/”錶示系統的頂級目錄,即根目錄。系統中的所有數據文件以及硬件資源都是以文件或目錄的形式出現,並並且掛載於根目錄之下。

從根目錄開始的路徑成為絕對路徑,如“/usr/bin/vim”,不以“/”開頭的路徑則為相對路徑,錶示文件與當前目錄的相對關系。

(3)主要文件夾及其作用

以我虛擬機裏面的Ubuntu16.04系統為例,這裏顯示了系統根目錄下所有的文件及文件夾信息。

在這裏插入圖片描述

各個文件夾的基本功能不同,它們存儲了不同類型的文件,具體如下

/bin/

存儲二進制可執行文件。

/sbin/

許多系統命令的存儲比特置。

/root/

根用戶的主目錄。

/home/

普通用戶的主目錄,在此目錄下,每個用戶擁有一個以用戶名命名的文件夾。

/boot/

存放Ubuntu內核和系統啟動文件。

/mnt/

通常包括系統引導後被掛載的文件系統的掛載點。

/dev/

存儲設備文件,包括計算機的所有外部設備,硬盤、鼠標、鍵盤等。

/etc/

存放系統管理所需的配置文件和目錄。

/lib/

存放各種程序所需要的的共享庫文件,這些庫文件主要為/bin/和/sbin/目錄下的命令文件服務。而/usr/bin/存放更多用於普通用戶的庫文件。

/lost+found/

一般為空,一般是隱藏文件夾。系統非法關機後,會存放一些相關文件。

/var/

存放許多不斷變化的文件,例如日志文件。

/usr/

包括u系統用戶相關的文件和目錄,如應用程序以及支持它們的庫文件。

/media/

存放Ubuntu系統自動掛載的設備文件,比如我插一個U盤:
在這裏插入圖片描述

/proc/

一個虛擬目錄,不實際存儲在磁盤上。它是內存的映射,包括系統信息和進程信息。

/tmp/

存儲用戶和系統的臨時文件,為任何用戶都提供讀寫權限。

/initrd/

用來在計算機啟動時掛載initrd.img映像文件的目錄,以及載入所需設備模塊的目錄。

/opt/

作為可選文件和程序的存放目錄,主要被第三方開發者用來建議安裝和卸載它們的軟件。比如我安裝的ROS就在此目錄之下。

/srv/

存儲系統提供的服務數據。

/sys/

系統設備和文件層次結構,並向用戶程序提供詳細的內核數據信息。

在Linux環境下,只要是可執行文件並且具有可執行權限就可以執行,而不敢文件名的後綴是什麼。

版权声明:本文为[感謝地心引力]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080606474734.html