基本組織原則
在UNIX系統(tǒng)設(shè)計(jì)的時(shí)候,有一個(gè)文件布局的基本原則,按照各文件在系統(tǒng)中的所在的作用,可以劃分為公有/私有和只讀/可寫(xiě)這兩類(lèi)四個(gè)屬性。Linux也是基于UNIX的所以也遵循這個(gè)原則。
一般來(lái)說(shuō):
- 不一定必須由本地系統(tǒng)提供的文件都可以看作公有的
- 必須由本地系統(tǒng)提供的文件則可以看作是私有的
- 能夠被保存在只讀存儲(chǔ)設(shè)備上的文件都可以被認(rèn)為是只讀的
- 反之那些必須要保存在可讀寫(xiě)設(shè)備上的文件就是可寫(xiě)的
現(xiàn)在看來(lái)有些不必要,但是在以前大量的本地存儲(chǔ)是非常昂貴的,而讓遠(yuǎn)端的一個(gè)設(shè)備來(lái)存儲(chǔ)大家公用的一些程序是那時(shí)候的一個(gè)解決方案。(在linux系統(tǒng)中任何設(shè)備都能夠以文件的形式掛在到根目錄下,這使得非本地存儲(chǔ)設(shè)備通過(guò)某種網(wǎng)絡(luò)協(xié)議掛在到本地根目錄下)。但是只是公有的肯定無(wú)法解決所有問(wèn)題,畢竟本機(jī)的設(shè)備與其他設(shè)備還是有些不同的,他們還由許多專(zhuān)屬的文件也不能提供給他人,則就需要私人文件了。
所以在FHS(linux基金會(huì)定義的linux文件系統(tǒng)層級(jí)標(biāo)準(zhǔn))中規(guī)定了 /usr目錄為公有的, /var目錄為私有的。
根文件系統(tǒng)
根目錄在linux下表示為/,所有其他目錄都掛載在根目錄下。盡管他們可能不再同一個(gè)硬盤(pán)上,甚至/sys和/proc這些在內(nèi)存中的數(shù)據(jù)。
根目錄下必須的目錄有以下幾個(gè):
| 名稱(chēng) | 功能 |
|---|---|
| bin | 重要的可執(zhí)行文件,shell命令 |
| boot | 引導(dǎo)器配置文件、內(nèi)核等 |
| dev | 設(shè)備文件 |
| etc | 系統(tǒng)專(zhuān)用配置文件 |
| lib | 重要的共享庫(kù)和內(nèi)核模塊 |
| media | 可移動(dòng)設(shè)備掛接點(diǎn) |
| opt | 附加應(yīng)用軟件包 |
| run | 與當(dāng)前運(yùn)行進(jìn)程有關(guān)的數(shù)據(jù) |
| sbin | 重要的系統(tǒng)可執(zhí)行文件 |
| srv | 本系統(tǒng)提供的用于服務(wù)器的數(shù)據(jù) |
| tmp | 臨時(shí)文件 |
| usr | 文件系統(tǒng)的第二層,公有文件的放置地 |
| var | 可變數(shù)據(jù) |
可選的目錄:
| 名稱(chēng) | 功能 |
|---|---|
| home | 用戶(hù)家目錄 |
| lib64 | 64位系統(tǒng)特有的 |
| root | root用戶(hù)家目錄 |
/bin目錄
其下包含了用戶(hù)命令文件,提供給所有用戶(hù)和腳本程序使用。在很多發(fā)行版本中這個(gè)是一個(gè)指向/usr/bin的符號(hào)鏈接。某種意義上也是對(duì)FHS的支持,也是對(duì)linux文件系統(tǒng)組織原則的遵守(命令文件肯定是公有的) 。使用pacman安裝軟件默認(rèn)的可執(zhí)行程序也在該目錄下(實(shí)際上是/usr/bin目錄,不過(guò)/bin是一個(gè)指向/usr/bin的符號(hào)鏈接)
其中必須的內(nèi)容如下:
| 命令 | 說(shuō)明 |
|---|---|
| cat | 連接多個(gè)文件并將內(nèi)容輸出至標(biāo)準(zhǔn)輸出 |
| chgrp | 改變文件所屬組 |
| chmod | 改變文件的訪(fǎng)問(wèn)權(quán)限 |
| chown | 改變文件所屬用戶(hù)和組 |
| cp | 復(fù)制文件 |
| date | 打印或設(shè)置系統(tǒng)日期和時(shí)間 |
| dd | 轉(zhuǎn)換并復(fù)制文件 |
| df | 查看文件系統(tǒng)磁盤(pán)空間使用情況 |
| dmesg | 打印或控制內(nèi)核的消息緩沖 |
| echo | 顯示一行文本 |
| false | 不做任何事情,表示不成功 |
| hostname | 顯示或設(shè)置系統(tǒng)的主機(jī)名 |
| kill | 向進(jìn)程發(fā)送信號(hào) |
| ln | 創(chuàng)建文件鏈接 |
| login | 開(kāi)始系統(tǒng)上的一個(gè)會(huì)話(huà) |
| ls | 列出目錄內(nèi)容 |
| mkdir | 創(chuàng)建目錄 |
| mknod | 創(chuàng)建塊或字符設(shè)備的專(zhuān)用文件 |
| more | 分頁(yè)顯示文本 |
| mount | 掛載一個(gè)文件系統(tǒng) |
| mv | 移動(dòng)或改名 |
| ps | 查看系統(tǒng)進(jìn)程狀態(tài) |
| pwd | 打印當(dāng)前工作目錄名 |
| rm | 刪除文件或目錄 |
| rmdir | 刪除空目錄 |
| sed | 一個(gè)流式文本編輯器 |
| sh | Bourne shell |
| stty | 改變或打印終端行設(shè)置 |
| su | 改變用戶(hù)標(biāo)識(shí) |
| sync | 刷新文件系統(tǒng)緩存 |
| true | 不做任何事情,表示成功 |
| umount | 卸載文件系統(tǒng) |
| uname | 打印系統(tǒng)信息 |
可選命令:
| 命令 | 功能 |
|---|---|
| csh | 著名的C shell,可能是一個(gè)/bin/tcsh的符號(hào)鏈接 |
| ed | ed文本編輯器 |
| tar | 打包工具 |
| cpio | 打包工具 |
| gzip | 壓縮工具 |
| gunzip | 壓縮工具,如果有一定是指向 gzip 的鏈接 |
| zcat | 壓縮工具,同上 |
| netstat | 網(wǎng)絡(luò)統(tǒng)計(jì)工具 |
| ping | 網(wǎng)絡(luò)測(cè)試工具 |
/boot目錄
該目錄包含了Linux啟動(dòng)過(guò)程所需要的所有內(nèi)容。更專(zhuān)業(yè)的說(shuō)法是,該目錄下保存的數(shù)據(jù)用于內(nèi)核開(kāi)始執(zhí)行用戶(hù)級(jí)程序之前使用的東西。例如引導(dǎo)加載器、內(nèi)核鏡像等。操作系統(tǒng)的內(nèi)核可以直接放到根目錄下也可以放到/boot目錄下。一個(gè)通常的做法是讓/root目錄占用一個(gè)單獨(dú)的磁盤(pán)分區(qū)而與根分區(qū)分離。這樣能更進(jìn)一步減少根分區(qū),保護(hù)啟動(dòng)分區(qū)(完全只讀),來(lái)提高系統(tǒng)的安全性。
/dev目錄
這是設(shè)備文件或?qū)S形募姆胖梦恢谩?/p>
/etc目錄
/etc包含了系統(tǒng)特有的配置文件,所謂配置文件就是用于控制程序運(yùn)行的本地文件。它絕大多數(shù)情況下是只讀私有的文件,而且可編輯。這里的只讀與可編輯并不是矛盾的,可編輯是指人們可以直接看懂的文本文件,只讀也是相對(duì)的對(duì)于普通用戶(hù)是只讀的,對(duì)于root并不是,而且在系統(tǒng)的運(yùn)行中確實(shí)很少動(dòng)這些文件。
需要放置到/etc目錄下的目錄:
| 名稱(chēng) | 功能 |
|---|---|
| opt | /opt目錄下各軟件的配置文件 |
| rc.d | init進(jìn)程的配置文件 |
| X11 | X window系統(tǒng)的配置文件,可選 |
| sgml | SGML的配置文件,可選 |
| xml | XML的配置文件,可選 |
需要放置在/etc目錄下的文件:
| 名稱(chēng) | 功能 |
|---|---|
| csh.login | C shell登陸的全局初始化文件 |
| exports | NFS文件系統(tǒng)的訪(fǎng)問(wèn)控制列表 |
| fstab | 文件系統(tǒng)的靜態(tài)信息,系統(tǒng)初始化時(shí)需要掛載多個(gè)文件系統(tǒng)時(shí)需要 |
| ftpusers | FTP守護(hù)進(jìn)程的用戶(hù)訪(fǎng)問(wèn)控制列表 |
| gateways | routed的網(wǎng)關(guān)列表 |
| gettydefs | getty程序的配置文件 |
| group | 用戶(hù)組列表文件 |
| host.conf | 決定如何解析域名 |
| hosts | 主機(jī)名靜態(tài)信息 |
| hosts.allow | 允許訪(fǎng)問(wèn)本機(jī)的IP地址列表 |
| hosts.deny | 禁止訪(fǎng)問(wèn)本機(jī)的IP地址列表 |
| hosts.equiv | 信任主機(jī)列表,作用于rlogin rsh rep |
| hosts.lpd | 信任主機(jī)列表,作用于lpd |
| inetd.conf | inetd守護(hù)進(jìn)程的配置文件 |
| inittab | init程序的配置文件 |
| issue | 登陸提示符上面的消息和標(biāo)識(shí)文件 |
| ld.so.conf | 搜索共享庫(kù)的目錄列表文件 |
| motd | 本機(jī)的標(biāo)識(shí)信息 |
| mtab | 文件系統(tǒng)的動(dòng)態(tài)信息 |
| mtools.conf | mtools程序配置文件 |
| networks | 網(wǎng)絡(luò)名稱(chēng)的靜態(tài)信息 |
| passwd | 用戶(hù)密碼文件 |
| printcap | ldp打印機(jī)的性能數(shù)據(jù)庫(kù) |
| profile | sh shell登陸的全局初始化文件 |
| protocols | 網(wǎng)絡(luò)協(xié)議定義文件 |
| resolv.conf | DNS域名解析的配置文件 |
| rpc | RPC協(xié)議定義文件 |
| securetty | root登陸的TTY訪(fǎng)問(wèn)控制文件 |
| services | 記錄網(wǎng)絡(luò)服務(wù)名和他們對(duì)應(yīng)使用的端口號(hào)及協(xié)議 |
| shells | 可使用的登陸shell路徑名 |
| syslog.conf | syslogd守護(hù)進(jìn)程的配置文件 |
/home目錄
該目錄是用戶(hù)專(zhuān)有目錄,每個(gè)用戶(hù)都會(huì)在/home目錄下有其對(duì)應(yīng)的子目錄,而且這個(gè)子目錄一般與他的用戶(hù)名相同。沒(méi)有任何程序會(huì)依賴(lài)于這個(gè)目錄。
同一個(gè)程序,不同的用戶(hù)有不同的配置方式,這些用戶(hù)獨(dú)有的配置文件就保存在它的home目錄中,一般以.開(kāi)頭的隱藏文件。如果某個(gè)程序需要?jiǎng)?chuàng)建多個(gè)配置文件,它會(huì)在用戶(hù)的home目錄下創(chuàng)建一個(gè)隱藏文件夾來(lái)保存。
一個(gè)用戶(hù)對(duì)其擁有的home目錄有絕對(duì)的控制權(quán),可以作任何事情,不僅僅是保存自己的文件,還能夠安裝軟件,甚至在home目錄下模擬整套linux文件的系統(tǒng)布局。
/lib目錄
/lib目錄里存放著必備的共享庫(kù)和內(nèi)核模塊。在系統(tǒng)啟動(dòng)階段和運(yùn)行根文件系統(tǒng)上的各種命令時(shí),都需要用到這些共享庫(kù),所以必須與根文件系統(tǒng)放在一起。如果時(shí)64位系統(tǒng),這個(gè)目錄的部分功能會(huì)轉(zhuǎn)移到/lib64目錄下。而內(nèi)核模塊只會(huì)使用/lib目錄。
/media目錄
該目錄用于掛載軟盤(pán)、U盤(pán)、光盤(pán)等可移動(dòng)設(shè)備,不同的子目錄用于掛載不同類(lèi)型的設(shè)備,而具體的目錄名就是具體的設(shè)備類(lèi)型。曾經(jīng)出現(xiàn)過(guò)很多其他其他名稱(chēng)的掛載點(diǎn),例如/cdrom /mnt /mnt/cdrom等,但是現(xiàn)在統(tǒng)一規(guī)定到了/media中。雖然你還可以繼續(xù)掛載到/mnt中,但是這與規(guī)范不符,/mnt現(xiàn)在只是臨時(shí)掛載點(diǎn)。
/mnt目錄
該目錄是讓系統(tǒng)管理員臨時(shí)掛載某個(gè)文件系統(tǒng)的,此目錄的內(nèi)容屬于局部問(wèn)題,不應(yīng)該影響任何程序的運(yùn)行。千萬(wàn)不要安裝什么程序,畢竟一個(gè)臨時(shí)目錄在系統(tǒng)不需要它的時(shí)候會(huì)被其他東西占用。
/opt目錄
這個(gè)是系統(tǒng)附加軟件包的安裝目錄。每個(gè)軟件包會(huì)在/opt下?lián)碛幸粋€(gè)自己的目錄,那里面存放著它所有的可執(zhí)行程序和靜態(tài)數(shù)據(jù)。這個(gè)專(zhuān)有目錄名應(yīng)該與去程序名一樣。這樣用戶(hù)就可以很好的管理他們了。
例如我們安裝了google-chrome,就是安裝在這里/opt/google/chrome目錄下,而/usr/bin中的google-chrome是鏈接到該目錄下的符號(hào)鏈接。
我們來(lái)說(shuō)明下linux的軟件安裝目錄:
/usr:系統(tǒng)級(jí)的安裝目錄,可以理解為C;//Windows/ 我們通過(guò)pacman通常默認(rèn)就是安裝在這個(gè)目錄
/usr/local:用戶(hù)級(jí)別的程序目錄,可以理解為Program File/ 用戶(hù)自己編譯的軟件默認(rèn)安裝在這個(gè)目錄下
/opt 用戶(hù)級(jí)的程序目錄,可以理解為D:/Software 通常放置一些第三方大型軟件或游戲
root目錄
root帳號(hào)的家目錄。
/sbin目錄
必備的系統(tǒng)軟件存放處。用于系統(tǒng)維護(hù)的軟件和某些只限r(nóng)oot用戶(hù)使用的命令存儲(chǔ)該目錄下。主要是存儲(chǔ)系統(tǒng)啟動(dòng)、恢復(fù)、還原以及修復(fù)過(guò)程中必備的系統(tǒng)工具,也是對(duì)/bin的補(bǔ)充。
必須出現(xiàn)在/sbin目錄的命令:
| 名稱(chēng) | 功能 |
|---|---|
| shutdown | 關(guān)機(jī)命令 |
| fastboot | 快速重新啟動(dòng)系統(tǒng) |
| fasthalt | 快速停止系統(tǒng)運(yùn)行 |
| fdisk | 磁盤(pán)分區(qū)維護(hù)工具 |
| halt | 停止系統(tǒng)運(yùn)行 |
| ifconfig | 網(wǎng)口配置工具 |
| init | 系統(tǒng)初始化進(jìn)程,內(nèi)核調(diào)用的第一個(gè)用戶(hù)進(jìn)程 |
| mkfs | 創(chuàng)建文件系統(tǒng) |
| mkswap | 格式化交換分區(qū) |
| reboot | 重新啟動(dòng) |
| route | IP路由表維護(hù)工具 |
| swapon | 開(kāi)啟頁(yè)交換 |
/srv目錄
服務(wù)進(jìn)程所需數(shù)據(jù)。某些服務(wù)進(jìn)程啟動(dòng)后,他們需要讀取的數(shù)據(jù)會(huì)放在/srv目錄中,提供/srv目錄一方面為了方便用戶(hù)找到特地服務(wù)的數(shù)據(jù)文件,另一方面也是位某些服務(wù)放置他們的執(zhí)行腳本、只讀或可寫(xiě)數(shù)據(jù)提供一個(gè)合適的地方。
目前并沒(méi)有規(guī)范/srv子目錄的命名方法。有一種方式是按照協(xié)議構(gòu)造如ftp rsync www cvs等。
/tmp目錄
/tmp目錄必須能夠被任何程序、任何用戶(hù)訪(fǎng)問(wèn),它存放臨時(shí)文件。任何程序都不用對(duì)/tmp目錄下任何文件或目錄負(fù)責(zé),盡管如此,還是建議在系統(tǒng)重新啟動(dòng)后清除/tmp目錄下的內(nèi)容。
/usr目錄
/usr目錄是整個(gè)文件系統(tǒng)的第二個(gè)主要區(qū)段。它即是共有的也是只讀的。這意味著/usr可以共享在多種主機(jī)之間,但不能寫(xiě)入。任何主機(jī)專(zhuān)有的或隨時(shí)間變化的信息只能存放在其他地方,即使大型軟件包,也不得占用/usr下的一個(gè)獨(dú)立子目錄。
/usr下的必備子目錄:
| 名稱(chēng) | 功能 |
|---|---|
| bin | 大部分用戶(hù)命令 |
| include | C程序頭文件目錄 |
| lib | 程序庫(kù) |
| local | 用戶(hù)自行安裝的程序存放目錄 |
| sbin | 非重要的系統(tǒng)程序 |
| share | 體系結(jié)構(gòu)獨(dú)立數(shù)據(jù) |
| tmp | 一個(gè)到/var/tmp的符號(hào)鏈接,為了保持與老系統(tǒng)的兼容 |
可選目錄:
| 名稱(chēng) | 功能 |
|---|---|
| games | 游戲目錄 |
| src | 源代碼 |
/usr/bin目錄
系統(tǒng)中絕大多數(shù)的命令放在此處。在manjaro中,包括根目錄的/bin也是它的符號(hào)鏈接。系統(tǒng)默認(rèn)的可執(zhí)行文件安裝目錄就在此處,任何第三方程序包括安裝在/opt和/usr/local/bin中的可執(zhí)行文件都可以在此處放置一個(gè)符號(hào)鏈接指向其可執(zhí)行文件。
/usr/include目錄
系統(tǒng)內(nèi)所有通用的C語(yǔ)言頭文件都放在此處。
/usr/lib目錄
其中保存了庫(kù)和目標(biāo)文件,他們都是二進(jìn)制文件。不被用戶(hù)和shell直接執(zhí)行,應(yīng)用程序可以在這里創(chuàng)建獨(dú)立的子目錄。在centos中/lib是指向這里的符號(hào)鏈接
/usr/local目錄
/usr/local是整個(gè)文件系統(tǒng)的第三個(gè)主要區(qū)段。是供系統(tǒng)管理員安裝局域性軟件使用的。它保證了當(dāng)系統(tǒng)更新時(shí)不會(huì)把他們覆蓋掉。
其中包括的目錄:
| 名稱(chēng) | 作用 |
|---|---|
| bin | 局域性可執(zhí)行文件 |
| etc | 局域性軟件的配置文件目錄 |
| include | 局域性C頭文件 |
| lib | 局域性程序庫(kù) |
| man | 局域性在線(xiàn)指南 |
| sbin | 局域性系統(tǒng)管理命令 |
| share | 局域性體系結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù) |
| src | 局域性源代碼文件 |
默認(rèn)情況下不會(huì)在有其他的子目錄了,/usr/local/etc也可能符號(hào)鏈接到/etc/local,這更適合用于將所有配置文件放置在/etc下的這一個(gè)原則。
可以看出,該目錄下有完整的結(jié)構(gòu),所以可以看出在linux系統(tǒng)中,/是第一個(gè)主要區(qū)段是整個(gè)文件系統(tǒng)的根其下也定義了bin etc lib sbin等,/usr是第二個(gè)主要區(qū)段是全局性的也定義了bin etc lib sbin等。而/usr/local是第三個(gè)主要區(qū)段定義了局域性數(shù)據(jù)其下也有bin etc lib sbin等。
/usr/sbin目錄
系統(tǒng)管理軟件的可執(zhí)行程序。雖然根據(jù)層級(jí) /sbin是必須的系統(tǒng)管理命令,/usr/sbin是非必要但重要的系統(tǒng)管理命令,/usr/local/sbin是局域性的系統(tǒng)管理命令。但是實(shí)際上 /sbin是一個(gè)符號(hào)鏈接到/usr/sbin。同理還有/bin和/lib等。
/usr/share目錄
這里存放著所有體系結(jié)構(gòu)無(wú)關(guān)的數(shù)據(jù)文件,它的內(nèi)容可以共享給運(yùn)行在任何體系結(jié)構(gòu)下的操作系統(tǒng)。例如某個(gè)站點(diǎn)可能由i386 arm等體系結(jié)構(gòu)平臺(tái)構(gòu)成,但是他們可能共同維護(hù)唯一一個(gè)掛載到某處的/usr/share目錄。需要注意的是,雖然/usr/share可以共享于不同體系結(jié)構(gòu)之間,但是其必須運(yùn)行相同的操作系統(tǒng)。其下最重要的目錄是man目錄。
/usr/share/man目錄介紹:
這個(gè)目錄是專(zhuān)門(mén)聯(lián)機(jī)幫助而準(zhǔn)備的。它包含了/和/usr下大部分程序的幫助信息。
其路徑位: 語(yǔ)言(en fr it zh_CN等)/man1~8/.gz壓縮文件
man1 公共可用的命令或軟件的指南
man2 所有系統(tǒng)調(diào)用的說(shuō)明
man3 庫(kù)函數(shù)的說(shuō)明信息
man4 特種文件的說(shuō)明 如/dev目錄下的設(shè)備文件和提供網(wǎng)絡(luò)協(xié)議支持的內(nèi)核接口等
man5 大部分?jǐn)?shù)據(jù)文件的格式說(shuō)明
man6 游戲演示程序等一些不太重要的程序說(shuō)明文檔
man7 其他類(lèi)型的在線(xiàn)幫助信息
man8 系統(tǒng)維護(hù)程序文檔保存在這里
/var目錄
該目錄包含著系統(tǒng)中絕大多數(shù)的隨時(shí)變化著的數(shù)據(jù),比如系統(tǒng)日志等。/var下的某些內(nèi)容是無(wú)法共享的,比如/var/logs /var/lock /var/run等。某些是可以共享的比如/var/mail /var/cache/man /var/spool/news等
/var的創(chuàng)建就是為了從/usr中剝離可寫(xiě)數(shù)據(jù),以便可以以只讀方式掛載/usr目錄。
/var目錄下必須具備的內(nèi)容:
| 名稱(chēng) | 功能 |
|---|---|
| cache | 應(yīng)用程序的緩存數(shù)據(jù) |
| lib | 可變狀態(tài)信息 |
| local | /usr/local的可變數(shù)據(jù) |
| lock | 鎖文件 |
| log | 日志文件于目錄 |
| opt | /opt的可變數(shù)據(jù) |
| run | 與當(dāng)前運(yùn)行進(jìn)程有關(guān)的數(shù)據(jù) |
| spool | spool應(yīng)用程序 |
| tmp | 系統(tǒng)重新啟動(dòng)期間起到保護(hù)作用的臨時(shí)文件 |
/var目錄下可選內(nèi)容:
| 名稱(chēng) | 功能 |
|---|---|
| account | 記錄進(jìn)程的運(yùn)行情況 |
| games | 游戲的可變數(shù)據(jù) |
| 用戶(hù)的郵件 | |
| yp | 網(wǎng)路信息服務(wù)NIS數(shù)據(jù)庫(kù)文件 |