多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[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标准目录树架构示意图