文件系统层级结构标准(FHS)
参考资料: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)的更多相关文章
- fhs文件系统层级结构
文件系统:操作系统用于明确存储设备或分区上的文件的方法和数据结构:层次化管理文件的结构就是文件系统: linux层次化文件结构,倒树状结构文件结构 FHS filesystem hie ...
- Linux系统层级结构标准
Linux Foundation有一套标准规范: FHS: Filesystem Hierarchy[‘haɪərɑːkɪ] Standard(文件系统层级标准)目前最新的标准是2.3版本:http: ...
- Linux文件系统的层级结构
Linux文件系统的层级结构 文件结构 倒置的树状结构 :Linux的哲学思想是一切皆文件,把几乎所有资源统统抽象为文件形式:包括硬件设备,甚至通信接口等 根目录 :linux的文件起始均从唯一的 ...
- 【Linux相识相知】计算机的组成、linux发行版和哲学思想、基础命令和目录结构(FHS)
从今天开始,Frank将开始在博客上记录自己学习linux的点点滴滴,F初来乍到,还望各位大佬多多指教.本次博客的主要内容如下: 计算机基础:简要的描述了计算机的组成及其功能: linux初识:介绍了 ...
- ROS-2 : ROS系统层级结构
一.ROS文件系统层级 ROS的文件和文件夹按如下层级来组织:
- Android文件系统的结构
Android 4.2.2 版本的文件系统 内核版本为 3.0.31 版本号为JDQ39 factory//估计是存放网络通信协议的登录密钥的|-- bluetooth|-- hdcp.keys|-- ...
- 4.Linux文件系统层次体系标准
这是不完整的linux文件系统层次体系标准,不是所有Linux发行版都根据这个标准,但大多数都是: 目录 评论 / 根目录,万物起源. /bin 包含系统启动和运行所必须的二进制程序. /boot 包 ...
- iOS-获取UIView的全部层级结构
在iOS中获取UIView的全部层级结构 应用场景 在实际 iOS 开发中,非常多时候都须要知道某个 UI 控件中包括哪些子控件,而且分清楚它们的层级结构和自个的 frame 以及 bounds ,以 ...
- 在iOS中获取UIView的所有层级结构 相关
在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便 ...
随机推荐
- CSS3 实现的一个简单的"动态主菜单" 示例[转]
其实这个示例蛮无聊的 很简单 也没什么实际的用处. 主要是展示了 CSS3 如何实现动画效果. 写这个主要是想看一看 完成这样的效果 我到底要写多少代码. 同时和我熟悉的java做个比较. 比较结果不 ...
- sql server 查询本年的每个月的数据
一.以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据CreateDate字段判断,计算总和,查询语句如下: end) as '1月', end) as '2月', end) as ...
- spin_lock & mutex_lock的区别? 【转】
转自:http://blog.csdn.net/wilsonboliu/article/details/19190861 本文由该问题引入到内核锁的讨论,归纳如下 为什么需要内核锁? 多核处理器下 ...
- nginx 的多域名多https转发设置方法【转】
version: 1.1(fixed) 修正一些错误基本环境:/etc/nginx/nginx.conf #保持/etc/nginx/ssl/ #ssl认证文件/etc/nginx/site-a ...
- 在Mac上搭建ReactNative开发环境
1.安装Homebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件. /usr/bin/ruby -e "$(curl -fsSL https://raw.g ...
- Linux下获取和设置IP
在Linux下获取关于IP和网关的操作:重点是对struct ifreq 的操作. 那么进入目录/usr/include/net/if.h下看查找struct ifreq结构体. /* Interfa ...
- linux创建新用户
服务器只用root账号会有风险,最好是每个人使用一个账号. 1. 添加用户名 adduser linuxidc 2. 给这个用户名设置新密码 passwd linuxidc 3.授权 个人用户的权限只 ...
- PV操作2011
- makefile特殊符号介绍
http://blog.chinaunix.net/uid-20564848-id-217918.html makefile下$(wildcard $^),$^,$@,$?,$<,$(@D),$ ...
- 洛谷P3367并查集
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...