linux基礎(chǔ)學(xué)習(xí)(2)-文件組織結(jié)構(gòu)

基本組織原則

在UNIX系統(tǒng)設(shè)計(jì)的時(shí)候,有一個(gè)文件布局的基本原則,按照各文件在系統(tǒng)中的所在的作用,可以劃分為公有/私有和只讀/可寫(xiě)這兩類(lèi)四個(gè)屬性。Linux也是基于UNIX的所以也遵循這個(gè)原則。
一般來(lái)說(shuō):

  1. 不一定必須由本地系統(tǒng)提供的文件都可以看作公有的
  2. 必須由本地系統(tǒng)提供的文件則可以看作是私有的
  3. 能夠被保存在只讀存儲(chǔ)設(shè)備上的文件都可以被認(rèn)為是只讀的
  4. 反之那些必須要保存在可讀寫(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ù)
mail 用戶(hù)的郵件
yp 網(wǎng)路信息服務(wù)NIS數(shù)據(jù)庫(kù)文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容