参考资料:FHS

简介

FHS目前发展到3.0版本,发布于2015年6月3日,由Linux基金会在负责维护。它规定了Linux的文件层级结构,使得各Linux发行版、软件开发商知道应该将哪些文件放在哪些目录下,也方便了用户去查找。

根文件系统:/

根文件系统用于引导、还原(restore)、恢复(recovery)、和/或修复(repair)系统。
根文件系统要在合理范围内设计得尽可能的小巧。
禁止在根文件系统下创建文件或者目录。

根下必须存在的目录

/bin

binary
必要的二进制命令程序。
一般是包含了系统管理员和普通用户都可以执行的命令。不可以包含子目录。

/boot

此目录包含了引导操作系统时候的需要的任何文件,不包括引导时候不需要的配置文件以及映射安装器(map installer)。因此boot目录中存储的数据是在内核开始执行用户空间程序之前就会被用到。这可能会包含主引导扇区和扇区映射文件。
如果某个程序需要被引导装载程序用于引导某个文件的话,那么它必须被放置在/sbin目录下。在引导时非必须的引导装载程序所使用的配置文件必须被放置在/etc目录下。
操作系统内核必须被放置在/或者/boot目录下。
某些特定的架构可能会在/boot目录下有自己特有的要求,比如放一些自己专属的文件等。

/dev

device
用于放置特殊或者设备文件;设备文件有分为字符设备(键盘等)和块设备(硬盘等)。
如果在/dev目录中的设备需要手工创建的话,那么/dev目录下必须有MAKEDEV命令用于创建设备。可能还会包含MAKEDEV.local文件用于本地设备。
如有必要,MAKEDEV必须有能力在系统上创建所有可能被发现的设备,而不仅仅针对某个特定的发行版上所能发现的设备。

/etc

etc目录用于存放配置文件。它是一个层级结构。配置文件是用于控制程序的行为的本地文件;它必须是静态的并且不可以是可执行的二进制程序。
一般建议将配置文件放置在/etc的子目录下,例如/etc/nginx/或者/etc/ssh/,而不是直接放置在/etc目录下。

/lib

library
包含了/bin和/sbin所需要的共享库以及内核模块。
在/lib目录下至少可以看到以下某一种文件名模式(它们可以是文件或者字符链接):

  • libc.so.*:动态链接的C库。
  • ld*:执行时链接器/装载器。
    如果相关的子系统有安装的话,那么可能还会存在modules目录,用于存放可加载的内核模块。

/media

此目录下的子目录用于便携式媒体的挂载点,例如软盘(/media/floppy)、光盘(/media/cdrom)、刻录机(/media/cdrecorder)和zip驱动(/media/zip)。

/mnt

mount
系统管理员临时挂载的的文件系统。此目录的内容是本地问题,不应该影响任何在运行的程序。

/opt

optional
用于存放应用程序软件包的插件。
被安装在/opt目录中的软件包,必须将其静态文件放置在单独的/opt/或者/opt/目录树下。表示软件包的名称,例如mysql;表示提供商在LANANA注册的名称。
在CentOS 7中,这个目录基本是空的。CentOS系列基本不会使用到此目录,不太需要关注。

/run

运行中的进程相关的数据,主要用于存放进程的PID文件。PID文件的文件名必须是.pid的格式,例如crond的PID文件是/run/crond.pid。
/run目录所提供的功能,以前是由/var/run所提供的。由于向后兼容性的存在,应用程序使用/var/run也是允许的。但是不可以两个都使用。在CentOS 7上,/var/run --> ../run。
普通用户不应该对/run目录具备写的权限。

/sbin

系统管理员所使用的二进制程序,存放于/sbin、/usr/sbin和/usr/local/sbin。
此目录下不可以有子目录。

/src

为系统服务所提供的数据。
在CentOS 7上,此目录是空的。

/tmp

临时文件

/usr

/usr目录是仅次于根目录的第二大层级结构。它是共享的、只读的。意味着它在FHS兼容的主机间是应该被共享的并且不可以被写入。任何主机特定的或者随时间变化的数据应该被存储在其他的地方。
多数软件包不可以直接使用/usr下的子目录。
以下目录是必须的:

  • bin:大多数用户二进制程序。
  • lib:库文件。
  • local:本地的一个层级结构,在主安装之后是空的。
  • sbin:非关键的系统二进制程序。
  • share:架构独立的数据。man手册即位于此目录下/usr/share/man/。

/var

/var目录包含变化的数据文件。包含spool目录和文件,管理性的和日志数据,以及短暂的临时的文件。
/var目录的某些部分无法在系统间共享。例如,/var/log、/var/lock和/var/run。其他部分是可以共享的,尤其是/var/mail、/var/cache/man、/var/cache/fonts和/var/spool/news。
这里说明的/var是为了使得可以只读挂载/usr。任何事物一旦在系统操作的时候被写入/usr,那么就一定会存在于/var中(与安装和软件维护完全不同)。
如果/var不是一个独立的分区的话,那么更倾向于将/var移出根分区,放入/usr分区(通常这么做是为了减小根分区的空间或者当根分区剩余空间不足的时候)。无论如何,不可以将/var链接至/usr,这样会使得/var和/usr难以独立存在,而且有可能会造成命名冲突。取而代之的是,可以将/var链接至/usr/var。
应用程序通常不应该在/var的子目录下创建目录。这类的目录应该当且仅当具备一些系统范围的牵连,并与FHS邮件列表协商只有,才可以添加。

/var/lib

这个目录需要留意。这里的lib并不是library的缩写,并不是表示库文件。这里面存储的是应用程序的状态信息数据。状态信息数据指的是应用程序在运行时会改动的数据,并且属于某个特定的主机。

根下可选的目录

/home

普通用户家目录,它是一个可选的目录,并非每一个发行版都会包含。因此应用程序不应该存放在该目录下。
用户特有的针对某个应用程序的配置文件存放在用户家目录中,文件名以“.”开始(隐藏文件)。如果某个应用程序需要放置的隐藏配置文件不止一个,那么就应该创建一个隐藏目录。隐藏目录里面的配置文件就不需要是隐藏的了。

/lib

一般是lib64,根据操作系统的位数决定是否存在此目录。

/root

root用户家目录

重要的虚拟文件系统

/proc:内核和进程信息虚拟文件系统。

proc文件系统是实际上的用于处理进程和系统信息的标准Linux方法,而不是/dev/kmem和其他类似的方法。我们强烈建议将此目录作为存储和检索进程、内核以及内存信息的目录。

/sys:内核和系统信息虚拟文件系统。

sys文件系统存放的是关于设备、驱动程序和一些内核特性的信息。它的底层结构由当前使用的Linux内核决定,在其他方面没有明确规定。

文件系统层级结构标准(FHS)的更多相关文章

  1. fhs文件系统层级结构

    文件系统:操作系统用于明确存储设备或分区上的文件的方法和数据结构:层次化管理文件的结构就是文件系统: linux层次化文件结构,倒树状结构文件结构        FHS  filesystem hie ...

  2. Linux系统层级结构标准

    Linux Foundation有一套标准规范: FHS: Filesystem Hierarchy[‘haɪərɑːkɪ] Standard(文件系统层级标准)目前最新的标准是2.3版本:http: ...

  3. Linux文件系统的层级结构

    Linux文件系统的层级结构   文件结构 倒置的树状结构 :Linux的哲学思想是一切皆文件,把几乎所有资源统统抽象为文件形式:包括硬件设备,甚至通信接口等 根目录 :linux的文件起始均从唯一的 ...

  4. 【Linux相识相知】计算机的组成、linux发行版和哲学思想、基础命令和目录结构(FHS)

    从今天开始,Frank将开始在博客上记录自己学习linux的点点滴滴,F初来乍到,还望各位大佬多多指教.本次博客的主要内容如下: 计算机基础:简要的描述了计算机的组成及其功能: linux初识:介绍了 ...

  5. ROS-2 : ROS系统层级结构

    一.ROS文件系统层级 ROS的文件和文件夹按如下层级来组织:

  6. Android文件系统的结构

    Android 4.2.2 版本的文件系统 内核版本为 3.0.31 版本号为JDQ39 factory//估计是存放网络通信协议的登录密钥的|-- bluetooth|-- hdcp.keys|-- ...

  7. 4.Linux文件系统层次体系标准

    这是不完整的linux文件系统层次体系标准,不是所有Linux发行版都根据这个标准,但大多数都是: 目录 评论 / 根目录,万物起源. /bin 包含系统启动和运行所必须的二进制程序. /boot 包 ...

  8. iOS-获取UIView的全部层级结构

    在iOS中获取UIView的全部层级结构 应用场景 在实际 iOS 开发中,非常多时候都须要知道某个 UI 控件中包括哪些子控件,而且分清楚它们的层级结构和自个的 frame 以及 bounds ,以 ...

  9. 在iOS中获取UIView的所有层级结构 相关

    在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便 ...

随机推荐

  1. 20155231 2016-2017-2 《Java程序设计》第7周学习总结

    20155231 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 学习目标 了解Lambda语法 了解方法引用 了解Fucntional与Stream API ...

  2. pentaho bi server 配置MySQL数据库

    软件版本: jdk 1.7 MySQL 5.5 biserver-ce-6.1.0.1-196 (选择右下方的所有选项See All Activities) 一.前置环境安装 1.安装jdk(略) 2 ...

  3. Spring4笔记1--Spring概述、IoC

    Spring概述: Spring框架: Spring 由 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration).Web.面向切面编程(AOP,  Aspec ...

  4. 与JavaWeb有关的故事(Web请求与Java IO)

    作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...

  5. Linux 查看内存插槽数、最大容量的方法

    查看内存插槽数: dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 查看最大容量: dmidecode ...

  6. 【转载】ajaxFileUpload 报这错jQuery.handleError is not a function

    今天刚打个一个技术群,里面有人问标题上的问题,嘿,我恰好遇过,现在大家至少也在用jquery1.9以上的版本,ajaxfileupload的版本早就不更新了,大家可以下载看:地址这里,它例子里使用的J ...

  7. 读书笔记 effective C++ Item 33 避免隐藏继承而来的名字

    1. 普通作用域中的隐藏 名字实际上和继承没有关系.有关系的是作用域.我们都知道像下面的代码: int x; // global variable void someFunc() { double x ...

  8. javaScript一些需要注意的细节

    变量声明早于代码运行. 函数声明早于变量声明. this指针代表的是执行当前代码的对象的所有者. JavaScript执行完同步,才能执行异步队列.如:alert,for if while 同步执行, ...

  9. java 局部内部类

    可以在代码块里创建内部类,典型的方法是在一个方法体的里面创建,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是可以访问当前代码块的常量,以及此外围类的所有成员,下面分别对局部内部类和匿名内部 ...

  10. C#socket编程序(一)

    在讲socket编程之前,我们先看一下最常用的一些类和方法,相信这些能让你事半功倍. 一.IP地址操作类 1.IPaddress类 a.在该类中有一个 parse()方法,能够把点分十进制IP地址 转 ...