Unix文件是以位元組序列組成的信息載體(container),內核不解釋文件的內容。 Linux文件系統中的文件是數據的集合,文件系統不僅包含著文件中的數據而且還有系統的結構,所有Linux用戶和程式看到的文件、目錄、軟鏈接及文件保護信息等都存儲在其中。 Linux最早的文件系統是Minux,但是專 ...
Unix文件是以位元組序列組成的信息載體(container),內核不解釋文件的內容。
Linux文件系統中的文件是數據的集合,文件系統不僅包含著文件中的數據而且還有系統的結構,所有Linux用戶和程式看到的文件、目錄、軟鏈接及文件保護信息等都存儲在其中。
Linux最早的文件系統是Minux,但是專門為Linux設計的文件系統---擴展文件系統第二版(EXT2)被設計 出來並添加到Linux中,這對Linux產生了重大影響。
Linux常用的文件系統
-
ext2:ext2的升級版本ext3是Linux預設的文件系統
-
swap:作為交換分區來使用,在安裝Linux系統時必須要建立
-
vfat:相容Windows操作系統,主要是FAT16、FAT32
-
NFS:網路文件系統,是Linux的獨到之處,方便在區域網中實現文件的共用,可以實現多台主機共用一臺主機的文件系統
硬鏈接和軟鏈接
命令格式:
$ ln P1 P2
用來創建一個新的硬鏈接,即為由路徑P1標識的文件創建一個路徑名為P2的硬鏈接。
硬鏈接有兩方面的限制
-
不允許用戶給目錄創建硬鏈接。因為這可能把目錄樹變成環形樹,從而就不可能通過名字定位一個文件。
-
只有在同一文件系統中的文件之間才能創建鏈接。這帶來比較大的限制,因為現代Unix系統中可能包含多種文件系統,這些文件系統位於不同的磁碟和/或分區,用戶也無法知道它們之間的物理劃分。
軟鏈接(soft link)[也稱符號鏈接(symbolic link)]
符號鏈接是短文件,這些文件包含有另一個文件的任意一個路徑名。路徑名可以指向位於任意一個文件系統的任意文件或目錄,甚至可以指向一個不存在的文件。
命令格式:
$ ln -s P1 P2
創建一個路徑名為P2的新軟鏈接,P2指向路徑名P1。
Linux目錄結構
Linux的文件系統採用階層式的樹狀目錄結構,在該結構中的最上層是根目錄“/”,然後再根目錄下再建立其它的目錄。
文件或目錄名由除“/”和空字元“\0”之外的任意ASCII字元序列組成(一些操作系統允許以多種自負表示文件名,例如:Unicode)。大多數文件系統對文件名的長度都有限制,通常不能超過255個字元。
Linux中無論操作系統管理幾個磁碟分區,這樣的目錄樹只有一個。從結構上講,個磁碟分區上的樹型目錄不一定是併列的。
常用目錄的作用
-
/ 根目錄
-
/bin 命令保存目錄(普通用戶就可以讀取的命令)
-
/boot 啟動目錄,啟動相關文件
-
/dev 設備文件保存目錄
-
/etc 配置文件保存目錄
-
/home 普通用戶的家目錄
-
/lib 系統庫保存目錄
-
/mnt 系統掛載目錄
-
/media 掛載目錄
-
/root 超級用戶的家目錄
-
/tmp 臨時目錄
-
/sbin 命令保存目錄(超級用戶才能使用的目錄)
-
/proc 直接寫入記憶體的
-
/sys
-
/usr 系統軟體資源目錄
/usr/bin 系統命令(普通用戶)
/usr/sbin 系統命令(超級用戶)
/usr/include:標準頭文件
/usr/src:內核源代碼 -
/var 系統相關文檔內容
根目錄下的bin和sbin,usr目錄下的bin和sbin,這四個目錄都是用來保存系統命令的。
proc和sys目錄不能直接操作,這兩個目錄保存的是記憶體的過載點。
Linux文件類型
-
普通文件:通常是流式文件。
[root@AmorLei tmp]# ls -lh yan.test -rw-r--r-- 1 root root 13 Sep 22 15:05 yan.test
-
目錄文件:用於表示和管理系統中的全部文件
[root@AmorLei tmp]# ls -lh drwxr-xr-x 2 root root 4.0K Sep 26 12:20 yanlei
-
鏈接文件:用於不同目錄下的文件的共用
[root@AmorLei tmp]# ls -lh yan.softlink lrwxrwxrwx 1 root root 8 Sep 26 12:26 yan.softlink -> yan.test
-
設備文件:包括塊設備文件和字元設備文件
b代表區塊(block)設備,c代表字元(character)設備
[root@AmorLei /]# ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 Sep 15 20:35 /dev/tty
-
管道(pipe,FIFO)文件:提供進程間通信的一種方式
-
套接字(socket)文件:該文件類型與網路通信有關
[root@AmorLei /]# ls -lh /var/lib/mysql/mysql.sock srwxrwxrwx 1 mysql mysql 0 Sep 26 12:20 /var/lib/mysql/mysql.sock
文件描述符與索引節點
Unix對文件的內容和描述文件的信息給出了清楚的區分。除了設備文件和特殊文件系統文件外,每個文件都由字元序列組成。
文件系統處理文件需要的所有信息包含在一個名為索引節點(inode)的數據結構中。每個文件都有自己的索引節點,文件系統用索引節點來標識文件。
文件系統至少提供POSIX標準中指定的如下屬性:
-
文件類型
-
與文件相關的硬鏈接個數
-
以位元組為單位的文件長度
-
設備標識符
-
在文件系統中表示文件的索引節點號
-
文件擁有者的UID
-
文件的用戶組ID
-
幾個時間戳,表示索引節點狀態的改變的時間、最後訪問時間即最後修改時間
-
訪問許可權和文件模式
訪問許可權和文件模式
文件的潛在用戶分為三種類型
-
作為文件所有者的用戶
-
同組用戶,不包括所有者
-
所有剩下的用戶(其他)
有三種類型的訪問許可權---讀、寫、執行,每組用戶都有這三種許可權。
分區
在Windows操作系統中,是先將物理地址分開,再在分區上建立目錄。在Windows操作系統中,所有路徑都是從盤符開始,如C:\Program file。
Linux正好相反,是先有目錄,再將物理地址映射到目錄中。在Linux操作系統中,所有路徑都是從根目錄開始。Linux預設分為3個分區,分別是boot分區、swap分區和根分區。
掛載
Linux下的分區需要掛載到目錄後才能使用,掛載的意義就是把磁碟分區的內容放在某個目錄下。這個把目錄和分區對應的過程叫做掛載(Mount)而這個掛載在文件樹中的位置就是掛載點。
當要使用某個設備時,例如要讀取硬碟中的一個格式化好的分區、光碟或軟體等設備時,必須先把這些設備對應到某個目錄上,而這個目錄就稱為“掛載點(mount point)”,這樣才可以讀取這些設備,將物理分區細節屏蔽掉,用戶只有統一的邏輯概念,所有的東西都是文件。
參考資料:
深入理解Linux內核 Daniel P.Bovet & Marco Cesati