[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标准目录树架构示意图](https://box.kancloud.cn/2ce318034ee3e7ca4daf11cf2b2d438e_2548x2628.jpg)
:-: 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-学习资源