文件是什么?
存儲空間內存儲的有邊界的一段流式數據,對數據可以做到按名存取。
眾多文件是如何有效的組織起來?
1. 平面化
把眾多文件放在一起。當想查找某個文件時,需要遍歷所有文件,當文件數目足夠多的時候,查找一個文件將會非常慢,效率極低。
2. 層級結構化
根據后續查找文件的篩選條件進行分類,逐層放置,通常要查找一個文件,只需要從最高層級開始,逐層進行查找,最后在底層層級的存儲單元內進行文件遍歷,極大的提升了文件查找效率。
總結
從上述兩種管理方式的對比來看,針對于海量文件的管理來講,層級結構化管理,無疑是最適合的方式,Linux也采用了這種文件管理理念。
FHS(Filesystem Hierarchy Standard):文件系統層級結構標準
為了規范各Linux發行版的文件系統層級結構設定,FHS出現了,對目錄層級結構做出了如下定義:
目錄 | 目錄存在的目的
—— | ———————
/bin | 所有用戶可用的基本命令程序文件
/sbin | 供系統管理使用的工具程序
/boot | 引導加載器必須用到的各靜態文件:kernel, initramfs(initrd), grub等
/dev | 存儲特殊文件或設備文件(包括字符設備、塊設備)
/etc | 系統程序的靜態配置文件,只能是靜態的,不存放二進制可執行文件
/home | 普通用戶的家目錄的集中位置
/lib | 為系統啟動或根文件系統上的應用程序(/bin,/sbin等)提供共享庫,以及為內核提供內核模塊(/lib/modules目錄)
/lib64 | 64位系統特有的存放64位共享庫的路徑
/media | 便攜式設備掛載點,例如:cdrom, floppy等
/mnt | 其他文件系統的臨時掛載點
/opt | 附加應用程序的安裝位置
/root | root用戶的家目錄
/srv | 當前主機為服務提供的數據
/tmp | 為那些會產生臨時文件的程序提供的用于存儲臨時文件的目錄,可供所有用戶執行寫入操作,有特殊權限
/usr | 全局共享的只讀數據路徑,自己本身是一個層級結構
/var | 存儲經常發生變化的數據的目錄,自己本身是一個層級結構
/proc | 虛擬文件系統,為內核和進程存儲其相關信息,多為內核參數,例如:net.ipv4.ip_forward,虛擬為/proc/sys/net/ipv4/ip_forward
/sys | sysfs虛擬文件系統提供了一種比proc更為理想的訪問內核數據的途徑,其主要作用在于為管理Linux設備提供了一種統一模型的接口
設備文件包含字符設備和塊設備,其中
設備名 | 意義
———— | ———
字符設備 | 線性設備,有次序的,以字符為單位,比如鍵盤
塊設備 | 隨機訪問設備,可以實現隨機訪問,被分為指定大小的數據塊,比如磁盤
/lib目錄下的共享庫文件中
庫名類型 | 意義
———— | —–
libc.so.* | C語言的動態鏈接庫
ld* | 運行時鏈接器或加載器
modules | 存放內核模塊的目錄
/usr目錄層級結構
目錄 | 目錄存在的目的 | 是否必選
—— | ——————— | ————
bin | 大多數用戶命令 | 是
include | C程序用到的頭文件 | 是
lib | 庫文件 | 是
local | 讓系統管理員安裝本地應用程序,也通常用于安裝第三方應用程序,也是一個層級目錄 | 是
sbin | 非系統自身運行和維護需要用到的管理命令 | 是
share | 與架構無關的數據,例如命令幫助文件,命令自帶說明文件 | 是
X11R6 | X Windows程序的安裝位置,11是版本,6是發行號 | 否
games | 游戲和有關教育的二進制程序文件 | 否
lib64 | 其他可選庫文件 | 否
src | 源碼 | 否
/usr/local目錄層級結構
目錄 | 目錄存在的目的
—— | ———————
bin | 本地二進制程序文件
etc | 本地程序文件的配置文件存放目錄
games | 本地游戲程序文件
include | 本地C語言程序頭文件
lib | 本地庫文件
man | 本地在線幫助文檔
sbin | 本地系統程序文件
share | 本地與架構無關的層級目錄
src | 本地源碼
/var目錄層級機構
目錄 | 目錄存在的目的
—— | ———————
cache | 應用緩存數據
lib | 變量狀態信息
local | /usr/local目錄的變量數據
lock | 鎖文件
log | 日志文件和目錄
opt | /opt目錄的變量數據
run | 正在運行進程的相關數據
spool | 應用程序的假脫機數據
tmp | 系統重新啟動時保存的臨時文件
/sys目錄的層級結構
目錄 | 目錄存在的目的
—— | ———————
devices | 這是內核對系統中所有設備的分層次表達模型,也是/sys文件系統管理設備的最重要的目錄結構
dev | 這個目錄下維護一個按字符設備和塊設備的主次號碼(major.minor)連接到真實的設備(/sys/devices下)的符號鏈接文件,它是在內核2.6.26首次引入
bus | 這是內核設備按總線類型分層放置的目錄結構,devices中的所有設備都是連接于某種總線之下,在這里的每一種具體總線之下可以找到每一個具體設備的符號鏈接,它也是構成Linux統一設備模型的一部分
class | 這是按照設備功能分類的設備模型,如系統所有輸入設備都會出現在/sys/class/input之下,而不論它們是以何種總線連接到系統,它也是構成Linux統一設備模型的一部分
block | 這里是系統中當前所有的塊設備所在,從2.6.22開始已經標記為過時
firmware | 這里是系統加載固件機制的對用戶控件的接口,關于固件有專用于固件加載的一套API
fs | 這里按照設計是用于描述系統中所有文件系統,包括文件系統本身和按文件系統分類存放的已掛載點,但目前只有fuse, gfs2等少數文件系統支持sysfs接口
kernel | 這里是內核所有可調整參數的位置
module | 這里有系統中所有模塊的信息
power | 這里是系統中電源選項,這個目錄下有幾個屬性文件可以用于控制整個機器的電源狀態,如可以向其中寫入控制命令讓機器關機、重啟等
原創文章,作者:N27_sapbcs,如若轉載,請注明出處:http://www.www58058.com/86313