[TOC]
## 簡介
` `當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。文件系統在Linux下看上去就象樹形結構,所以我們可以把文件系統的結構形象的稱為 樹形結構。
?` `文件系統的是用來組織和排列文件存取的,所以它是可見的,在Linux中,我們可以通過ls等工具來查看其結構,在Linux系統中,我們見到的都是樹形結構;比如操作系統安裝在一個文件系統中,它表現為由/ 起始的樹形結構。linux文件系統的最頂端是/,我們稱/為Linux的root,也就是 Linux操作系統的文件系統。Linux的文件系統的入口就是/,所有的目錄、文件、設備都在/之下,/就是Linux文件系統的組織者,也是最上級的領導者。
` `由于linux是開放源代碼,各大公司和團體根據linux的核心代碼做各自的操作,編程。這樣就造成在根下的目錄的不同。這樣就造成個人不能使用他人的linux系統的PC。因為你根本不知道一些基本的配置,文件在哪里。。。這就造成了混亂。這就是FHS(Filesystem Hierarchy Standard )機構誕生的原因。該機構是linux愛好者自發的組成的一個團體,主要是是對linux做一些基本的要求,不至于是操作者換一臺主機就成了linux的‘文盲’。
`? `根據FHS(http://www.pathname.com/fhs/)的官方文件指出, 他們的主要目的是希望讓使用者可以了解到已安裝軟件通常放置于那個目錄下, 所以他們希望獨立的軟件開發商、操作系統制作者、以及想要維護系統的用戶,都能夠遵循FHS的標準。 也就是說,FHS的重點在于規范每個特定的目錄下應該要放置什么樣子的數據而已。 這樣做好處非常多,因為Linux操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。
` `事實上,FHS是根據過去的經驗一直再持續的改版的,FHS依據文件系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種交互作用的形態,用表格來說有點像底下這樣:
| | 可分享的\(shareable\) | 不可分享的\(unshareable\) |
|------------------|-------------------------|----------------------|
| 不變的\(static\) | /usr \(軟件放置處\) | /etc \(配置文件\) |
| | /opt \(第三方協力軟件\) | /boot \(開機與核心檔\) |
| 可變動的\(variable\) | /var/mail \(使用者郵件信箱\) | /var/run \(程序相關\) |
| | /var/spool/news \(新聞組\) | /var/lock \(程序相關\) |
**四中類型:**
**1.可分享的:**
` `可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;
**2.不可分享的:**
` `自己機器上面運作的裝置文件或者是與程序有關的socket文件等, 由于僅與自身機器有關,所以當然就不適合分享給其他主機了。
**3.不變的:**
` `有些數據是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;
**4.可變動的:**
` `經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等。
```
事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什么數據而已,分別是底下這三個目錄的定義:
/ (root, 根目錄):與開機系統有關;
/usr (unix software resource):與軟件安裝/執行有關;
/var (variable):與系統運作過程有關。
```
## 一. 根目錄 (/) 的意義與內容
` `根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的, 同時根目錄也與開機/還原/系統修復等動作有關。 由于系統開機時需要特定的開機軟件、核心文件、開機所需程序、 函式庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。 因為根目錄是這么的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分區, 因為越大的分區內你會放入越多的數據,如此一來根目錄所在分區就可能會有較多發生錯誤的機會。
` `因此FHS標準建議:根目錄(/)所在分區應該越小越好, 且應用程序所安裝的軟件最好不要與根目錄放在同一個分區內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。說白了,就是根目錄和Windows的C盤一個樣。
目錄 | 應放置檔案內容
--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/bin | 系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat,chmod\(修改權限\), chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot | 主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。
/dev | 在Linux系統上,任何裝置與周邊設備都是以檔案的型態存在于這個目錄當中。 只要通過存取這個目錄下的某個檔案,就等于存取某個裝置。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp\*, / dev/hd\*, /dev/sd\*等等
/etc | 系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、各種服務的啟始檔等等。 一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是只有root有權力修改。 FHS建議不要放置可執行檔\(binary\)在這個目錄中。 比較重要的檔案有:/etc/inittab, /etc/init\.d/, /etc/modprobe\.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目錄有:/etc/init\.d/ :所有服務的預設啟動script都是放在這里的,例如要啟動或者關閉iptables的話: /etc/init\.d/iptables start、/etc/init\.d/ iptables stop /etc/xinetd\.d/ :這就是所謂的super daemon管理的各項服務的設定檔目錄。 /etc/X11/ :與X Window有關的各種設定檔都在這里,尤其是xorg\.conf或XF86Config這兩個X Server的設定檔。
/home | 這是系統預設的使用者家目錄\(home directory\)。 在你新增一個一般使用者帳號時,預設的使用者家目錄都會規范到這里來。比較重要的是,家目錄有兩種代號: ~ :代表當前使用者的家目錄,而 ~guest:則代表用戶名為guest的家目錄。
/lib | 系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 。 什么是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執行之意。 尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模組\(驅動程式\)。
/media | media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。 包括軟碟、光碟、DVD等等裝置都暫時掛載于此。 常見的檔名有:/media/floppy, /media/cdrom等等。
/mnt | 如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。 只是有了/media之后,這個目錄就用來暫時掛載用了。
/opt | 這個是給第三方協力軟體放置的目錄 。 什么是第三方協力軟體啊?舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了。 另外,如果妳想要自行安裝額外的軟體\(非原本的distribution提供的\),那么也能夠將你的軟體安裝到這里來。 不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下。
/root | 系統管理員\(root\)的家目錄。 之所以放在這里,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分區中。
/sbin | Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他使用者最多只能用來查詢而已。放在/sbin底下的為開機過程中所需要的,里面包括了開機、修復、還原系統所需要的指令。至于某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至于本機自行安裝的軟體所產生的系統執行檔\(system binary\),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srv | srv可以視為service的縮寫,是一些網路服務啟動之后,這些服務所需要取用的資料目錄。 常見的服務例如WWW, FTP等等。 舉例來說,WWW伺服器需要的網頁資料就可以放置在/srv/www/里面。呵呵,看來平時我們編寫的代碼應該放到這里了。
/tmp | 這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊。 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除。
` `事實上FHS針對根目錄所定義的標準就僅限于上表,不過仍舊有些目錄也需要我們了解一下,具體如下:
目錄 | 應放置文件內容
--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/lost\+found | 這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在于當檔案系統發生錯誤時,將一些遺失的片段放置到這個目錄下。 這個目錄通常會在分割槽的最頂層存在,例如你加裝一個硬盤于/disk中,那在這個系統下就會自動產生一個這樣的目錄/disk/lost\+found
/proc | 這個目錄本身是一個虛擬文件系統\(virtual filesystem\)喔。 他放置的資料都是在內存當中,例如系統核心、行程資訊\(process\)(是進程嗎?)、周邊裝置的狀態及網絡狀態等等。因為這個目錄下的資料都是在記憶體(內存)當中,所以本身不占任何硬盤空間。比較重要的檔案(目錄)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/\*等等。呵呵,是虛擬內存嗎\[guest\]?
/sys | 這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統,主要也是記錄與核心相關的資訊。 包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等。 這個目錄同樣不占硬盤容量。
` ` 除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分區則是在開機完成之后才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分區去。
` `那哪些目錄不可與根目錄分開呢?有底下這些:
1. etc:配置文件
3. /bin:重要執行檔
5. /dev:所需要的設備文件
7. /lib:執行檔所需的函式庫與核心所需的模塊
9. /sbin:重要的系統執行文件
` `這五個目錄不可與根目錄分開在不同的分區。
## 二. /usr 的意義與內容
` `依據FHS的基本定義,/usr里面放置的數據屬于可分享的與不可變動的(shareable, static), 如果你知道如何透過網絡進行分區的掛載(例如在服務器篇會談到的NFS服務器),那么/usr確實可以分享給局域網絡內的其他主機來使用喔。
` `/usr不是user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是Unix操作系統軟件資源所放置的目錄,而不是用戶的數據啦。這點要注意。 FHS建議所有軟件開發者,應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。
` `因為是所有系統默認的軟件(distribution發布者提供的軟件)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的C:\\Windows\\ + C:\\Program files\\這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會占用最多的硬盤容量。 一般來說,/usr的次目錄建議有底下這些:
目錄 | 應放置文件內容
---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/usr/X11R6/ | 為X Window System重要數據所放置的目錄,之所以取名為X11R6是因為最后的X版本為第11版,且該版的第6次釋出之意。
/usr/bin/ | 絕大部分的用戶可使用指令都放在這里。請注意到他與/bin的不同之處。\(是否與開機過程有關\)
/usr/include/ | c/c\+\+等程序語言的檔頭\(header\)與包含檔\(include\)放置處,當我們以tarball方式 \(\*\.tar\.gz 的方式安裝軟件\)安裝某些數據時,會使用到里頭的許多包含檔。
/usr/lib/ | 包含各應用軟件的函式庫、目標文件\(object file\),以及不被一般使用者慣用的執行檔或腳本\(script\)。 某些軟件會提供一些特殊的指令來進行服務器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86\_64的Linux系統, 那可能會有/usr/lib64/目錄產生
/usr/local/ | 統管理員在本機自行安裝自己下載的軟件\(非distribution默認提供者\),建議安裝到此目錄, 這樣會比較便于管理。舉例來說,你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版, 此時你可以將新版軟件安裝于/usr/local/目錄下,可與原先的舊版軟件有分別啦。 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib\.\.\.的次目錄
/usr/sbin/ | 非系統正常運作所需要的系統指令。最常見的就是某些網絡服務器軟件的服務指令\(daemon\)
/usr/share/ | 放置共享文件的地方,在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據, 因為幾乎都是文本文件嘛。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助文件 /usr/share/doc:軟件雜項的文件說明 /usr/share/zoneinfo:與時區有關的時區文件
/usr/src/ | 一般原始碼建議放置到這里,src有source的意思。至于核心原始碼則建議放置到/usr/src/linux/目錄下。
## 三. ?/var 的意義與內容
` `如果/usr是安裝時會占用較大硬盤容量的目錄,那么/var就是在系統運作后才會漸漸占用硬盤容量的目錄。 因為/var目錄主要針對常態性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運作所產生的文件, 包括程序文件(lock file, run file),或者例如MySQL數據庫的文件等等。常見的次目錄有:
目錄 | 應放置文件內容
-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/var/cache/ | 應用程序本身運作過程中會產生的一些暫存檔
/var/lib/ | 程序本身執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟件應該要有各自的目錄。 舉例來說,MySQL的數據庫放置到/var/lib/mysql/而rpm的數據庫則放到/var/lib/rpm去
/var/lock/ | 某些裝置或者是文件資源一次只能被一個應用程序所使用,如果同時有兩個程序使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖\(lock\),以確保該裝置只會給單一軟件所使用。 舉例來說,刻錄機正在刻錄一塊光盤,你想一下,會不會有兩個人同時在使用一個刻錄機燒片? 如果兩個人同時刻錄,那片子寫入的是誰的數據?所以當第一個人在刻錄時該刻錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定\(就是前一個人用完了\)才能夠繼續使用
/var/log/ | 非常重要。這是登錄文件放置的目錄。里面比較重要的文件如/var/log/messages, /var/log/wtmp\(記錄登入者的信息\)等。
/var/mail/ | 放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為鏈接文件。
/var/run/ | 某些程序或者是服務啟動后,會將他們的PID放置在這個目錄下
/var/spool/ | 這個目錄通常放置一些隊列數據,所謂的“隊列”就是排隊等待其他程序使用的數據。 這些數據被使用后通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件后該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出后就被刪除。如果是工作排程數據\(crontab\),就會被放置到/var/spool/cron/目錄中。
` `由于FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的文件或目錄數據, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。
- 0 工具
- 0.1 圖片無損放大
- 1 deepin系統
- 1.1 deepin系統安裝
- 1.2 deepin創建desktop文件
- 1.3 瀏覽器運行虛擬機
- 1.4 linux的百度網盤突然打不
- 1.5 deepin安裝后個人配置
- 1.5.1 安裝公式編輯器AxMath
- 1.5.2 Deepin標題欄太高的解決辦法(自定義高度)
- 1.5.3 linux下配置VS Code的標題欄風格
- 1.5.4 安裝腳本解釋器fish
- 1.6 關于軟件安裝
- 1.6.1 rpm和deb包想換轉換的方法
- 1.7 deepin開機自啟的設置方法
- 2 tiny core系統
- 2.1 安裝系統到硬盤
- 2.2 系統軟件安裝介紹
- 2.3 安裝控制臺計算器bc
- 2.4 關機保存的方法
- 2.5 linux文件結構說明
- 2.6 為tinycore配置ssh
- 3 使用Linux中的一些技巧
- 3.1 軟連接的使用
- 3.2 LInux下解壓
- 3.3 刪除操作
- 3.4 Zenity-在命令行和Shell腳本中創建圖形(GTK +)對話框
- 3.4.1 列表框
- 3.4.2 口令對話框
- 3.4.3 消息對話框
- 3.4.3.1 信息對話框
- 3.4.3.2 錯誤框
- 3.4.3.3 問題對話框
- 3.4.3.4 警告對話框
- 3.4.4 范圍對話框(滑條)
- 3.4.5 文件選擇對話框
- 3.4.6 表單對話框
- 3.4.7 文本信息框
- 3.4.8 進度框
- 3.4.9 文本輸入框
- 3.4.10 通知區域圖標
- 3.4.11 日歷對話框
- 3.4.12 顏色對話框
- 3.4.13 上述對話框測試文件
- 3.4.14 使用C++調用zenity
- 3.5 Linux whereis、find和locate命令
- 3.6 字體下載
- 3.7 使用Electron 創建跨平臺的應用程序
- 3.8 shell的使用
- 3.8.1 $$,$?等表示什么
- 3.8.2 shell隨機產生某一個范圍內的整數
- 3.8.3 寫shel腳本的一些使用操作
- 3.8.4 linux shell操作二進制文件
- 3.8.5 shell中的一些實用技巧
- 3.8.5.1 列出當前路徑下的所有文件夾
- 3.8.5.2 列出當前路徑下所有文件
- 3.8.5.3 獲取當前虛擬終端的大小
- 3.8.5.4 判斷輸入字符串是否為數字
- 3.8.5.5 bash中的數學運算
- 3.8.5.6 按照文件創建時間順序列出文件
- 3.8.5.7 echo輸出含空格不換行的設置方法
- 3.8.5.8 find 遞歸/不遞歸 查找子目錄的方法
- 3.8.5.9 echo顯示顏色設置
- 3.8.5.10 bash中使用${}字符操作方法
- 3.8.5.11 ls查找目錄,文件,軟連接等的方法
- 3.8.5.12 檢測某個程序是否在運行
- 3.8.5.13 bash/shell 解析命令行參數工具:getopts/getopt
- 3.8.5.14 獲取腳本的絕對路徑
- 3.8.6 使用bash寫的腳本管理腳本
- 3.9 Linux創建自定義命令
- 3.10 deepin掛載遠程文件夾到本地
- 3.11 linux root用戶添加用戶
- 3.12 實用腳本或者命令
- 3.12.1 命令行 將ppt轉換為 pdf
- 3.12.2 deepin上實現自定義命令
- 4 slitaz系統
- 4.1 系統安裝
- 4.2 安裝軟件命令tazpkg
- 4.3 使用說明
- 4.4 用 tazlito 構建 livecd自制linux系統
- 4.5 英文顯示支持設置方法
- 4.6 配置ssh
- 5 busybox的編譯使用
- 5.1 busybox介紹
- 5.2 busybox編譯使用
- 6 配置自己的linux
- 6.1 在deepin上編譯linux內核
- 7 每天一個linux命令
- 7.1 文件管理類
- 7.1.1 cat--接文件并打印到標準輸出設備上
- 7.1.2 chattr--改變文件屬性
- 7.1.3 chgrp--變更文件或目錄的所屬群組
- 7.1.4 chmod --控制文件如何被他人所調
- 7.1.5 chown命令--指定文件的擁有者改為指定的用戶或組
- 7.1.6 grep命令--用于查找文件里符合條件的字符串
- 7.1.7 其他
- 7.2 文檔編輯類
- 7.2.1 col--過濾控制字符
- 7.2.2 colrm--濾掉指定的行
- 7.2.3 comm --比較兩個已排過序的文件
- 7.2.4 awk--一種處理文本文件的語言,是一個強大的文本分析工具
- 7.2.5 sed命令
- 7.3 文件傳輸類
- 7.3.1 prm--將一個工作由打印機貯列中移除
- 7.4 磁盤管理類
- 7.4.1 cd--切換當前工作目錄至 dirName(目錄參數)。
- 7.4.2 df--顯示目前在Linux系統上的文件系統的磁盤使用情況統計
- 7.4.3 dirs--顯示目錄記錄
- 7.4.5 du--顯示目錄或文件的大小
- 8 其他系統
- 8.1 Alpine Liunx
- 8.1.2 簡介
- 8.1.2 本地安裝
- 8.1.3 apk軟件包管理
- 8.1.4 配置ssh