因为利用 Linux 来开发产品或 distribution 的团队实在太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰。
所以,后来就有了 Filesystem Hierarchy Standard(FHS)标准的出炉了。 根据 FHS 的官方文件指出,其主要目的是希望让用户可以了解到数据通常放置于哪个目录下。也就是说,FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。

FHS 依据文件系统使用的频繁与否与是否用户随意改动,而将目录定义成四种交互作用的形态:

  可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。

  不可分享的:自己机器上面运行的设备文件或者是与程序有关的 socket 文件等,由于仅与自身机器有关,所以不适合分享给其他主机。

  不变的:有些数据是不会经常变动的,只会随着系统版本而变动。例如函数库、说明文件、系统管理员所管理的主机服务配置文件等。

  可变动的:经常改变的数据,例如登录文件、用户文件等。

根目录(/)

根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机、还原、系统修复等操作有关。

因此 FHS 标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较好,根目录所在的文件系统也比较不容易发生问题。

执行文件目录(/bin)

系统有很多放置执行文件的目录,但 /bin 比较特殊。因为 /bin 放置的是在单用户维护模式下还能被操作的命令。在 /bin 下面的命令可以被 root 与一般账号所使用,主要有 cat,chmod,chown,date,mv,mkdir,cp,bash 等常用的命令。

开机文件目录(/boot)

这个目录主要放置开机会使用到的文件,包括 Linux 内核文件以及开机菜单与开机所需配置文件等。

驱动设备目录(/dev)

在 Linux 系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中的。你只要通过访问这个目录下面的某个文件,就等于访问某个设备。比较重要的文件有 /dev/null,/dev/zero,/dev/tty 等。

配置文件目录(/etc)

系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的起始文件等。一般来说,这个目录下的各个文件属性是可以让一般用户查阅的,但只有 root 有权利修改。比较重要的文件有 /etc/init.d,/etc/inittab,/etc/sysconfig 等。

用户主文件夹(/home)

这是系统默认的用户主文件夹(home directory)。在你创建一个一般用户账号时,默认的用户主文件夹都会规范到这里来。~ 代表当前用户的主文件夹

系统函数库(/lib)

系统的函数库非常多,而 /lib 放置的则是在开机时会用到的函数库,以及在 /bin 或 /sbin 下面的命令会调用的函数库而已。

* 你可以把函数库想象成是“外挂”,某些命令必须要有这些“外挂”才能够顺利完成程序的执行之意。

媒体设备暂挂区(/media)

media 是“媒体”的英文,顾名思义,这个 /media 下面放置的就是可删除的设备。包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有 /media/floppy,/media/cdrom 等。

额外设备暂挂区(/mnt)

如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。在比较早的时候,这个目录的用途与 /media 相同。只是有了 /media 之后,这个目录就被用来暂时挂载用了。

第三方软件安装目录(/opt)

这个目录是用于安装第三方应用程序的,可以由用户自己指定安装位置。当需要卸载第三方应用程序时,可以直接删除安装目录,而不影响系统其它任何设置。

管理员主文件夹(/root)

系统管理员(root)的主文件夹。之所以放在这里,是因为如果进入单用户维护模式而仅挂载根目录时,该目录就能够拥有root的主文件夹,所以我们会希望root的主文件夹与根目录放置在同一个分区中。

重要系统执行文件(/sbin)

Linux 有非常多的命令是来设置系统环境的,这些命令只有 root 才能够利用来“设置”系统,其他用户最多只能用来“查询”而已。放在 /sbin 下面的为开机过程中所需的,里面包括了开机、修复、还原系统所需要的命令。

服务数据存放目录(/srv)

srv 可以视为“service”的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。常见的服务例如 WWW、FTP 等。举例来说,WWW 服务需要的网页数据就可以放置在 /srv/www/ 里。

临时文件存放目录(/tmp)

这是让一般用户或者是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够访问,所以你需要定期清理一下。当然,重要数据不可放置在此目录,因为系统会不定期将 /tmp 目录下的数据全部删除

丢失内容修复目录(/lost+found)

这个目录是使用标准的 ext2/ext3 文件系统格式才会产生的一个目录,目的相当于文件系统发生错误时,将一些丢失的片段放置到这个目录下。这个目录通常会在分区的最顶层存在。

虚拟文件系统目录(/proc)

这个目录本身是一个虚拟文件系统(virtual filesystem)。它放置的数据都是在内存当中,例如系统内核、进程、外部设备以及网络状态等。因为这个目录下的数据都是在内存当中的,所以本身并不占任何硬盘空间

虚拟文件系统目录(/sys)

这个目录其实跟 /proc 非常类似,也是一个虚拟的文件系统,主要也是记录与内核相关的信息。包括目前已加载的内核模块与内核检测到的硬件设备信息等。这个目录同样不占硬盘容量。

系统软件资源目录(/usr)

很多小白都会误以为 /usr 是 user 的缩写,其实 usr 是 Unix Software Resource 的缩写,也就是 “UNIX 操作系统软件资源” 所放置的目录,而不是用户的数据,这点需要注意。

FHS 建议所有软件开发者应该将他们的数据合理地分别放置到这个目录下的子目录,而不要自行新建该软件的独立目录。

  /usr/bin/:绝大部分的用户可使用命令都放在这里

  /usr/include/:C/C++等程序语言的头文件(header)与包含文件(include)放置处

  /usr/lib/:包含各应用软件的函数库、目标文件以及一些不被一般用户惯用的执行文件或脚本

  /usr/local/:系统管理员在本机自行安装下载的软件建议安装到此目录

  /usr/sbin/:非系统正常运行所需的系统命令

  /usr/share/:放置共享文件的地方

  /usr/src/:一般源码建议放置到这里

常态可变动文件目录(/var)

该目录主要针对常态性可变动文件,包括缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file、run file),或者例如MySQL数据库的文件等。

如果 /usr 是安装时会占用较大硬盘容量的目录,那么 /var 就是在系统运行后才会渐渐占用硬盘容量的目录。

  /var/cache/:应用程序本身运行过程中会产生的一些暂存文件

  /var/lib/:程序本身执行的过程中,需要使用到的数据文件放置的目录

  /var/lock/:目录下的文件资源一次只能被一个应用程序所使用

  /var/log/:放置登录文件的目录

  /var/mail/:放置个人电子邮件信箱的目录

  /var/run/:某些程序或服务启动后的PID目录

  /var/spool/:放置排队等待其他应用程程序使用的数据

Linux 标准目录结构 FHS ——原文链接https://www.cnblogs.com/woider/p/6618295.html的更多相关文章

  1. Linux 标准目录结构 FHS

    因为利用 Linux 来开发产品或 distribution 的团队实在太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰.所以,后来就有了 Filesystem H ...

  2. Linux 标准目录结构

    初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...

  3. 【转】Linux 标准目录结构

    初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...

  4. linux标准目录结构

    初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...

  5. 【转】 Linux下目录结构

    装完Linux,首先需要弄清Linux 标准目录结构 / root — 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home — 存储普通用户的个人文件 ftp — 用户 ...

  6. linux 标准目录

    转自 http://www.weixuehao.com/archives/492 装完Linux,首先需要弄清Linux 标准目录结构 / root -?启动Linux时使用的一些核心文件.如操作系统 ...

  7. Linux 的目录结构

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/cbbf47b0-f ...

  8. Linux之目录结构解析

    /    /bin 存放[二进制可执行命令]目录,与usr/bin相比,它是系统性的.主要放置一些系统的必备执行档.例如:cat.cp.chmod df.dmesg.gzip.kill.ls. mkd ...

  9. 从零单排Linux – 3 – 目录结构

    从零单排Linux – 3 – 目录结构 1.FHS标准(filesystem hierarchy standard) why? –> 为了规范,还有为了linux的发展 重点 –> 规范 ...

  10. python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)

    昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...

随机推荐

  1. TOF和结构光

    文章目录 TOF和结构光 一.ToF 二.结构光 三.测量距离.分辨率.开发周期的对比 TOF和结构光 一.ToF ToF(Time of Flight)飞行时间 字面理解就是通过光的飞行时间来计算距 ...

  2. YOLO4论文中文版

    文章目录 YOLO4论文中文版 摘要 1.介绍 2.相关工作 2.1.目标检测模型 2.2.Bag of freebies 2.3.Bag of specials 3.方法 3.1.架构选择 3.2. ...

  3. 深入理解python虚拟机:黑科技的幕后英雄——描述器

    深入理解python虚拟机:黑科技的幕后英雄--描述器 在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使用但是却很少在意的黑科技--描述器,在本篇文章当中主要分析描述器的原理,以及介绍使用描述 ...

  4. 【开源游戏】Legends-Of-Heroes 基于ET 7.2的双端C#(.net7 + Unity3d)多人在线英雄联盟风格的球球大作战游戏。

    Legends-Of-Heroes 一个LOL风格的球球大作战游戏,基于ET7.2,使用状态同步  Main 基于C#双端框架[ET7.2],同步到ET主干详情请看日志.(https://github ...

  5. 2021-01-11:linux中,如何看内存的使用情况呢?

    福哥答案2021-01-11: 1.free:查看内存占用情况,会直接返回,常用参数 -M.-G 是以MB或GB为单位返回结果.2.sar:定时检测系统资源占用情况,-r 参数是内存资源,一般用法 s ...

  6. Alist云盘视频加密助手:支持云盘视频文件加密与在线播放,不用再担心视频文件被和谐了!

    在当前娱乐资源丰富的时代,人们每天都在接触各种视频资源.然而,网盘限速.版权审核.视频分级.少儿不宜等问题经常让人感到困扰.如何在保护隐私的前提下,让视频存储和分享变得更加便捷.安全呢?分享一款实用的 ...

  7. Hadoop的核心配置文件

    1. core-site.xml:该配置文件包含了Hadoop通用配置,例如Hadoop的文件系统和I/O设置.Hadoop日志目录.Hadoop缓存设置等. 2. hdfs-site.xml:该配置 ...

  8. spring-boot集成mybatis真的很简单吗?

    在日常的后端开发中,使用mybatis作为DAO层的持久框架已经是惯例.但很多时候都是在别人搭好的框架中进行开发,对怎么搭建环境是一知半解,今天就来实践下. 一.集成分哪些步骤 来看下集成mybati ...

  9. OSPF 多区域配置实验

    实验拓扑 实验需求 按照图示配置 IP 地址和loopback 接口 按照图示分区域配置 OSPF ,实现全网互通 为了路由结构稳定,要求路由器使用环回口作为 Router-id 在AR3上配置静默接 ...

  10. 高精度减法(模板yxc)

    #include <bits/stdc++.h> using namespace std; bool cmp(vector<int> &A, vector<int ...