[TOC]
* * * * *
## Linux目錄配置標準:FHS
FHS:Filesystem Hierarchy Standard
[【官方網站】](http://www.pathname.com/fhs/)
FHS的重點在于規范每個特定的目錄下應該要放置什么樣的數據。針對目錄樹架構僅定義3層目錄
* `/`--root
* `/usr`--Unix Software Resource
* `/var`--Varialbe
FHS依據文件系統使用的頻繁程度和是否允許用戶隨意改動,將目錄定義為4種交互作用形態。
| | 可分享的(shareable) | 不可分享的(unshareable) |
| --- | --- | --- |
| 不變的 (static) | /usr (軟件放置處) | /etc (配置文件) |
| | /opt(第三方軟件) | /boot (開機與內核文件) |
| 可變動的(variable) | /var/mail (用戶郵件信箱) | /var/run(程序相關) |
| | /var/spool/news(新聞組) | /var/lock (程序相關) |
### 1 `/`--root(根目錄,與開機、系統有關)
根目錄的作用
* 由根目錄衍生其他目錄;
* 放置系統開機時,所需的特定開機軟件、內核文件、程序、函數庫等文件、數據
* 放置系統錯誤時,修復文件系統所需的程序。
所有開機、還原、系統修復等操作都與根目錄有關,根目錄是整個Linux系統最重要的一個目錄。
FHS建議:
* 根目錄所在分區應越小越好,
* 應用程序所安裝的軟件最好不要與根目錄放在同一個分區里。
如此,不但性能較好,根目錄所在的文件系統也不容易發生問題。
FHS定義根目錄下的子目錄
| 目錄 | 應放置文件內容 |
| --- | --- |
| **`/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`** | Linux系統的主要配置文件幾乎都放置在這個目錄,例如:人員的賬號密碼文件、各種服務的起始文件等。一般來說,這個目錄下的各文件屬性是可以讓一般用戶查閱的,但是只有`root`有權利修改。比較重要的文件有:`/etc/inittab`, `/etc/init.d`, `/etc/modprobe.conf`, `/etc/x11/`, `/etc/fstab`, `/etc/sysconfig/`等。還有以下重要的目錄<br> <strong>`/etc/init.d`</strong>:所有服務的默認啟動腳本都放在這里。例如:要啟動或關閉iptables的話:`/etc/init.d/iptables start`、`/etc/init.d/iptables stop` <br> <strong> `/etc/xinetd.d` </strong>:`super daemon`管理的各項服務的配置文件目錄 <br> <strong>`/etc/x11/`</strong>:與X Window有關的各種配置文件,尤其是`Xorg.conf`和`XServer`的配置文件 |
| /home | Linux系統默認的用戶主文件夾(home directory)。在系統創建的一般用戶賬號,默認的用戶主文件夾都在這個目錄。主文件夾有2種代號:<br> <strong>`~`</strong>:代表目前這個用戶的主文件夾 <br> <strong>`~dmtsai`</strong>:代表`dmtsai`的主文件夾 |
| **`/lib`** | Linux系統開機時會用到的函數庫、/bin和/sbin下面的命令會調用的函數庫。特別重要的是`/lib/modules/`目錄,該目錄會放置內核相關的模塊(驅動程序) |
| /media | 放置Linux系統中可刪除的設備,光盤、DVD等。常見的文件名:`/media/cdrom`等 |
| /mnt | 放置需要暫時掛載到系統的某些額外設備。 |
| /opt | 放置第三方軟件的目錄。 |
| /root | 系統管理員`root`的主文件夾。放在這里的目的是為了在單用戶維護模式僅僅掛載根目錄時,該目錄就能夠擁有root的主文件夾。這樣就把root的主文件夾與根目錄放置在同一個硬盤分區中。 |
| **`/sbin`** | 放置Linux系統開機過程中需要設置系統環境的命令。包括了開機、修復、還原系統所需要的命令。這些命令只有`root`才能用來‘設置’系統,其他用戶最多只能用來‘查詢’。 |
| /srv | 可視為‘service’的縮寫,是一些網絡服務啟動后,這些服務所需要取用的數據目錄。常見的網絡服務如www、FTP等 。例如:www服務需要的網頁數據就可以放在`/srv/www/`里面。 |
| /tmp | 放置一般用戶或正在執行的程序臨時文件的目錄。這個目錄任何人都可以訪問,所以系統需要定期清理,重要的數據也不可放置在此目錄 |
>[warning] 上述著重標注的5個與開機過程相關的目錄必須放在根目錄下
> 1. **`/etc`**,配置文件
> 2. **`/bin`**,重要執行文件
> 3. **`/dev`**,所需要的設備文件
> 4. **`/lib`**,執行文件所需的函數庫與內核所需的模塊
> 5. **`/sbin`**,重要的系統執行文件
根目錄下重要的其他3個目錄
| 目錄 | 應放置文件內容 |
| --- | --- |
| /lost+found | 這是使用標準`ext2/ext3`文件系統格式才會產生的一個目錄,目的在于當文件系統發生錯誤時,將一些丟失的片段放在這個目錄下。這個目錄通常會在分區的最頂層存在。例如:如果加載一塊硬盤于`/disk`中,在這個系統下就會自動產生一個`/disk/lost+found`目錄 |
| /proc | 這個目錄本身是一個虛擬文件系統(Virtual FileSystem)。在這個目錄下的數據都是在內存中(如系統內核、進程(process)、外部設備的狀態、網絡狀態等),所以這個目錄不占用任何硬盤空間。比較重要的文件有:<br>`/proc/cupinfo`, `/proc/dma`, `/proc/interrupts`, `/proc/ioports`, `/proc/net*`等 |
| /sys | 這個目錄跟上述/proc類似,也是一個虛擬文件系統,不占用任何硬盤空間。主要記錄與內核相關的信息(目前已加載的內核模塊、內核檢測到的硬件設備信息等)。 |
### 2 `/usr`--(UNIX Software Resource,與軟件安裝/執行有關)
`usr`是“UNIX Software Resource”的縮寫,不是“user”的縮寫,`/usr`的作用:
* 放置可分享的不可變動的(shareable,static)數據。可以通過網絡進行分區的掛載(例如:NFS服務器)后,實現通過局域網分享給網內其他主機使用。
* 軟件開發者將軟件的數據合理放置在這個目錄及其子目錄。避免自行創建軟件的獨立目錄。
* 放置系統默認軟件(distribution發布者提供的軟件)。類似windows系統的`C:\Windows`,`C:\Program files`目錄的綜合體。
`/usr`是系統剛安裝完畢會占用最多磁盤容量的目錄。
`/usr`的子目錄
| 目錄 | 應放置文件內容 |
| --- | --- |
| /usr/X11R6 | 放置X Windows系統(第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默認提供的),便于管理。該目錄下也是具有bin,etc,include,lib等子目錄的。 |
| /usr/sbin/ | 放置非系統正常運行所需要的系統命令。最常見的就是某些網絡服務器軟件的服務命令(`daemon`) |
| /usr/share/ | 放置共享文件(幾乎都是文本文件)的地方,不分硬件架構都可讀取。在此目錄下常見還有:<br> "/usr/share/man/":放置在線幫助文件 <br> "/usr/share/doc/":放置軟件雜項的說明文件 <br> "/usr/share/zoneinfo/":放置與時區有關的時區文件 |
| /usr/src/ | 放置軟件源代碼(src:source)。系統內核源碼則建議放置于`/usr/src/linux/` |
### 3 `/var`--(Variable,與系統運作過程有關)
`/var`的作用:
* 放置常態性變動的文件,如緩存(cache)、登錄文件(log file)等。
* 放置軟件運行時產生的文件,如程序文件(lock file, run file)、MySQL的數據庫文件等。
`/var`是系統運行后才逐漸占用磁盤容量的目錄。
`/var`的子目錄
| 目錄 | 應放置文件內容 |
| --- | --- |
| /var/cache/ | 應用程序本身運行過程中產生的一些暫存文件。 |
| /var/lib/ | 程序本身執行過程中,需要使用的數據文件。各程序還要有自己的目錄。如:/var/lib/mysql/就是放置MySQL的數據庫文件;/var/lib/rpm/放置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/`中。 |
### 4 目錄樹(directory tree)
目錄樹特性:
* 目錄樹的起點為根目錄(/,root)
* 每一個目錄可以使用本地的文件系統,也可以使用網絡上的文件系統。例如:利用NFS(Network File System)服務器掛載某特定目錄。
* 每一個文件在目錄樹中的文件名(包含完整路徑)都是獨一無二的。
:-: 
:-: FHS標準目錄樹架構示意圖
- WebAPP
- Linux Command
- 入門
- 處理文件
- 查找文件單詞
- 環境
- 聯網
- Linux
- Linux目錄配置標準:FHS
- Linux文件與目錄管理
- Linux賬號管理與ACL權限設置
- Linux系統資源查看
- 軟件包管理
- Bash
- Daemon/Systemd
- ftp
- Apache
- MySQL
- Command
- Replication
- mysqld
- remote access
- remark
- 限制
- PHP
- String
- Array
- Function
- Class
- File
- JAVA
- Protocals
- http
- mqtt
- IDE
- phpDesigner
- eclipse
- vscode
- Notepad++
- WebAPI
- Javasript
- DOM
- BOM
- Event
- Class
- Module
- Ajax
- Fetch
- Promise
- async/await
- Statements and declarations
- Function
- Framwork
- jQurey
- Types
- Promise
- BootStrap
- v4
- ThinkPHP5
- install
- 定時任務
- CodeIgniter
- React.js
- node.js
- npm
- npm-commands
- npm-folder
- package.json
- Docker and private modules
- module
- webpack.js
- install
- configuration
- package.json
- entry
- modules
- plugins
- Code Splitting
- loaders
- libs
- API
- webpack-cli
- Vue.js
- install
- Compile
- VueAPI
- vuex
- vue-router
- vue-devtools
- vue-cli
- vue-loader
- VDOM
- vue-instance
- components
- template
- Single-File Components
- props
- data
- methods
- computed
- watch
- Event-handling
- Render Func
- remark
- 案例學習
- bootstrap-vue
- modal
- fontAwesome
- Hosting Font Awesome Yourself
- using with jquery
- using with Vue.js
- HTML
- CSS
- plugins
- Chart.js
- D3.js
- phpSpreadSheet
- Guzzle
- Cmder
- Git
- git命令
- git流程
- Postman
- Markdown
- Regular Expressions
- PowerDesigner
- 附錄1-學習資源