Linux中的文件是什么?它的文件系統(tǒng)又是什么?那些配置文件又在哪里?我下載好的程序保存在哪里了?在 Linux 中文件系統(tǒng)是標(biāo)準(zhǔn)結(jié)構(gòu)的嗎?好了,上圖簡(jiǎn)明地闡釋了Linux的文件系統(tǒng)的層次關(guān)系。當(dāng)你苦于尋找配置文件或者二進(jìn)制文件的時(shí)候,這便顯得十分有用了。我在下方添加了一些解釋以及例子,不過“篇幅較長(zhǎng),可以有空再看”。
另外一種情況便是當(dāng)你在系統(tǒng)中獲取配置以及二進(jìn)制文件時(shí),出現(xiàn)了不一致性問題,如果你是在一個(gè)大型組織中,或者只是一個(gè)終端用戶,這也有可能會(huì)破壞你的系統(tǒng)(比如,二進(jìn)制文件運(yùn)行在舊的庫文件上了)。若然你在你的Linux系統(tǒng)上做安全審計(jì)的話,你將會(huì)發(fā)現(xiàn)它很容易遭到各種攻擊。所以,保持一個(gè)清潔的操作系統(tǒng)(無論是Windows還是Linux)都顯得十分重要。
Linux的文件是什么?
對(duì)于UNIX系統(tǒng)來說(同樣適用于Linux),以下便是對(duì)文件簡(jiǎn)單的描述:
在UNIX系統(tǒng)中,一切皆為文件;若非文件,則為進(jìn)程
這種定義是比較正確的,因?yàn)橛行┨厥獾奈募粌H僅是普通文件(比如命名管道和套接字),不過為了讓事情變的簡(jiǎn)單,“一切皆為文件”也是一個(gè)可以讓人接受的說法。Linux系統(tǒng)也像UNIX系統(tǒng)一樣,將文件和目錄視如同物,因?yàn)槟夸浿皇且粋€(gè)包含了其他文件名的文件而已。程序、服務(wù)、文本、圖片等等,都是文件。對(duì)于系統(tǒng)來說,輸入和輸出設(shè)備,基本上所有的設(shè)備,都被當(dāng)做是文件。
題圖版本歷史:
-
Version 2.0 – 17-06-2015
-
– Improved: 添加標(biāo)題以及版本歷史
-
– Improved: 添加/srv,/meida和/proc
-
– Improved: 更新了反映當(dāng)前的Linux文件系統(tǒng)的描述
-
– Fixed: 多處的打印錯(cuò)誤
-
– Fixed: 外觀和顏色
-
Version 1.0 – 14-02-2015
-
– Created: 基本的圖表
-
– Note: 摒棄更低的版本
下載鏈接
以下是大圖的下載地址。如果你需要其他格式,請(qǐng)跟原作者聯(lián)系,他會(huì)嘗試制作并且上傳到某個(gè)地方以供下載
注意: PDF格式文件是打印的最好選擇,因?yàn)樗嬞|(zhì)很高。
Linux 文件系統(tǒng)描述
為了有序地管理那些文件,人們習(xí)慣把這些文件當(dāng)做是硬盤上的有序的樹狀結(jié)構(gòu),正如我們熟悉的'MS-DOS'(磁盤操作系統(tǒng))就是一個(gè)例子。大的分枝包括更多的分枝,分枝的末梢是樹的葉子或者普通的文件。現(xiàn)在我們將會(huì)以這樹形圖為例,但晚點(diǎn)我們會(huì)發(fā)現(xiàn)為什么這不是一個(gè)完全準(zhǔn)確的一幅圖。
目錄 |
描述 |
/ |
主層次 的根,也是整個(gè)文件系統(tǒng)層次結(jié)構(gòu)的根目錄 |
/bin |
存放在單用戶模式可用的必要命令二進(jìn)制文件,所有用戶都可用,如 cat、ls、cp等等 |
/boot |
存放引導(dǎo)加載程序文件,例如kernels、initrd等 |
/dev |
存放必要的設(shè)備文件,例如/dev/null |
/etc |
存放主機(jī)特定的系統(tǒng)級(jí)配置文件。其實(shí)這里有個(gè)關(guān)于它名字本身意義上的的爭(zhēng)議。在貝爾實(shí)驗(yàn)室的UNIX實(shí)施文檔的早期版本中,/etc表示是“其他(etcetera)目錄”,因?yàn)閺臍v史上看,這個(gè)目錄是存放各種不屬于其他目錄的文件(然而,文件系統(tǒng)目錄標(biāo)準(zhǔn) FSH 限定 /etc 用于存放靜態(tài)配置文件,這里不該存有二進(jìn)制文件)。早期文檔出版后,這個(gè)目錄名又重新定義成不同的形式。近期的解釋中包含著諸如“可編輯文本配置”或者“額外的工具箱”這樣的重定義 |
/etc/opt |
存儲(chǔ)著新增包的配置文件 /opt/ . |
/etc/sgml |
存放配置文件,比如 catalogs,用于那些處理SGML(譯者注:標(biāo)準(zhǔn)通用標(biāo)記語言)的軟件的配置文件 |
/etc/X11 |
X Window 系統(tǒng)11版本的的配置文件 |
/etc/xml |
配置文件,比如catalogs,用于那些處理XML(譯者注:可擴(kuò)展標(biāo)記語言)的軟件的配置文件 |
/home |
用戶的主目錄,包括保存的文件,個(gè)人配置,等等 |
/lib |
/bin/ 和 /sbin/ 中的二進(jìn)制文件的必需的庫文件 |
/lib<架構(gòu)位數(shù)> |
備用格式的必要的庫文件。 這樣的目錄是可選的,但如果他們存在的話肯定是有需要用到它們的程序 |
/media |
可移動(dòng)的多媒體(如CD-ROMs)的掛載點(diǎn)。(出現(xiàn)于 FHS-2.3) |
/mnt |
臨時(shí)掛載的文件系統(tǒng) |
/opt |
可選的應(yīng)用程序軟件包 |
/proc |
以文件形式提供進(jìn)程以及內(nèi)核信息的虛擬文件系統(tǒng),在Linux中,對(duì)應(yīng)進(jìn)程文件系統(tǒng)(procfs )的掛載點(diǎn) |
/root |
根用戶的主目錄 |
/sbin |
必要的系統(tǒng)級(jí)二進(jìn)制文件,比如, init, ip, mount |
/srv |
系統(tǒng)提供的站點(diǎn)特定數(shù)據(jù) |
/tmp |
臨時(shí)文件 (另見 /var/tmp ). 通常在系統(tǒng)重啟后刪除 |
/usr |
二級(jí)層級(jí)存儲(chǔ)用戶的只讀數(shù)據(jù); 包含(多)用戶主要的公共文件以及應(yīng)用程序 |
/usr/bin |
非必要的命令二進(jìn)制文件 (在單用戶模式中不需要用到的);用于所有用戶 |
/usr/include |
標(biāo)準(zhǔn)的包含文件 |
/usr/lib |
庫文件,用于/usr/bin/ 和 /usr/sbin/ 中的二進(jìn)制文件 |
/usr/lib<架構(gòu)位數(shù)> |
備用格式庫(可選的) |
/usr/local |
三級(jí)層次 用于本地?cái)?shù)據(jù),具體到該主機(jī)上的。通常會(huì)有下一個(gè)子目錄, 比如, bin/ ,lib/ , share/ . |
/usr/local/sbin |
非必要系統(tǒng)的二進(jìn)制文件,比如用于不同網(wǎng)絡(luò)服務(wù)的守護(hù)進(jìn)程 |
/usr/share |
架構(gòu)無關(guān)的 (共享) 數(shù)據(jù). |
/usr/src |
源代碼,比如內(nèi)核源文件以及與它相關(guān)的頭文件 |
/usr/X11R6 |
X Window系統(tǒng),版本號(hào):11,發(fā)行版本:6 |
/var |
各式各樣的(Variable)文件,一些隨著系統(tǒng)常規(guī)操作而持續(xù)改變的文件就放在這里,比如日志文件,脫機(jī)文件,還有臨時(shí)的電子郵件文件 |
/var/cache |
應(yīng)用程序緩存數(shù)據(jù). 這些數(shù)據(jù)是由耗時(shí)的I/O(輸入/輸出)的或者是運(yùn)算本地生成的結(jié)果。這些應(yīng)用程序是可以重新生成或者恢復(fù)數(shù)據(jù)的。當(dāng)沒有數(shù)據(jù)丟失的時(shí)候,可以刪除緩存文件 |
/var/lib |
狀態(tài)信息。這些信息隨著程序的運(yùn)行而不停地改變,比如,數(shù)據(jù)庫,軟件包系統(tǒng)的元數(shù)據(jù)等等 |
/var/lock |
鎖文件。這些文件用于跟蹤正在使用的資源 |
/var/log |
日志文件。包含各種日志。 |
/var/mail |
內(nèi)含用戶郵箱的相關(guān)文件 |
/var/opt |
來自附加包的各種數(shù)據(jù)都會(huì)存儲(chǔ)在 /var/opt/ . |
/var/run |
存放當(dāng)前系統(tǒng)上次啟動(dòng)以來的相關(guān)信息,例如當(dāng)前登入的用戶以及當(dāng)前運(yùn)行的daemons(守護(hù)進(jìn)程). |
/var/spool |
該spool主要用于存放將要被處理的任務(wù),比如打印隊(duì)列以及郵件外發(fā)隊(duì)列 |
/var/mail |
過時(shí)的位置,用于放置用戶郵箱文件 |
/var/tmp |
存放重啟后保留的臨時(shí)文件 |
Linux的文件類型
大多數(shù)文件僅僅是普通文件,他們被稱為regular 文件;他們包含普通數(shù)據(jù),比如,文本、可執(zhí)行文件、或者程序、程序的輸入或輸出等等
雖然你可以認(rèn)為“在Linux中,一切你看到的皆為文件”這個(gè)觀點(diǎn)相當(dāng)保險(xiǎn),但這里仍有著一些例外。
-
目錄 :由其他文件組成的文件
-
特殊文件 :用于輸入和輸出的途徑。大多數(shù)特殊文件都儲(chǔ)存在/dev 中,我們將會(huì)在后面討論這個(gè)問題。
-
鏈接文件 :讓文件或者目錄出現(xiàn)在系統(tǒng)文件樹結(jié)構(gòu)上多個(gè)地方的機(jī)制。我們將詳細(xì)地討論這個(gè)鏈接文件。
-
(域)套接字 :特殊的文件類型,和TCP/IP協(xié)議中的套接字有點(diǎn)像,提供進(jìn)程間網(wǎng)絡(luò)通訊,并受文件系統(tǒng)的訪問控制機(jī)制保護(hù)。
-
命名管道 : 或多或少有點(diǎn)像sockets(套接字),提供一個(gè)進(jìn)程間的通信機(jī)制,而不用網(wǎng)絡(luò)套接字協(xié)議。
現(xiàn)實(shí)中的文件系統(tǒng)
對(duì)于大多數(shù)用戶和常規(guī)系統(tǒng)管理任務(wù)而言,“文件和目錄是一個(gè)有序的類樹結(jié)構(gòu)”是可以接受的。然而,對(duì)于電腦而言,它是不會(huì)理解什么是樹,或者什么是樹結(jié)構(gòu)。
每個(gè)分區(qū)都有它自己的文件系統(tǒng)。想象一下,如果把那些文件系統(tǒng)想成一個(gè)整體,我們可以構(gòu)思一個(gè)關(guān)于整個(gè)系統(tǒng)的樹結(jié)構(gòu),不過這并沒有這么簡(jiǎn)單。在文件系統(tǒng)中,一個(gè)文件代表著一個(gè)inode (索引節(jié)點(diǎn)),這是一種包含著構(gòu)建文件的實(shí)際數(shù)據(jù)信息的序列號(hào):這些數(shù)據(jù)表示文件是屬于誰的,還有它在硬盤中的位置。
每個(gè)分區(qū)都有一套屬于他們自己的inode,在一個(gè)系統(tǒng)的不同分區(qū)中,可以存在有相同inode的文件。
每個(gè)inode都表示著一種在硬盤上的數(shù)據(jù)結(jié)構(gòu),保存著文件的屬性,包括文件數(shù)據(jù)的物理地址。當(dāng)硬盤被格式化并用來存儲(chǔ)數(shù)據(jù)時(shí)(通常發(fā)生在初始系統(tǒng)安裝過程,或者是在一個(gè)已經(jīng)存在的系統(tǒng)中添加額外的硬盤),每個(gè)分區(qū)都會(huì)創(chuàng)建固定數(shù)量的inode。這個(gè)值表示這個(gè)分區(qū)能夠同時(shí)存儲(chǔ)各類文件的最大數(shù)量。我們通常用一個(gè)inode去映射2-8k的數(shù)據(jù)塊。當(dāng)一個(gè)新的文件生成后,它就會(huì)獲得一個(gè)空閑的inode。在這個(gè)inode里面存儲(chǔ)著以下信息:
唯一不在inode的信息是文件名和目錄。它們存儲(chǔ)在特殊的目錄文件。通過比較文件名和inode的數(shù)目,系統(tǒng)能夠構(gòu)造出一個(gè)便于用戶理解的樹結(jié)構(gòu)。用戶可以通過ls -i查看inode的數(shù)目。在硬盤上,inodes有他們獨(dú)立的空間。
|