Linux 文件系统的层次化结构
FHS,Filesystem Hierarchy Standard,文件系统层次化标准。这是一个推荐标准,可以从 http://www.pathname.com/fhs/ 获取。
本文不讨论 FHS,因为它是针对 Unix 发行版提供的一个推荐方案。本文旨在描述 Linux 常见的文件系统层次化结构。
用于存放程序和数据的目录结构
虽然不讨论 FHS,但我们仍然需要知道设计文件系统层次化结构的一些准则,以理解现有结构的设计思路。
- 对于系统正常运行来说,一个软件包是否是必要的、基本的?
- 一个命令是否应该仅由管理员使用?
- 一个软件包可能分为“给用户使用的”、“给开发者使用的”和“自己内部的”三部分内容
- 一个软件包可能来自于“包管理器”、“不受包管理器管理的第三方”或是“本地编译”
- 区分“基本无需修改的静态数据文件”和“随着使用而时刻变化的动态数据文件”
[ / ]
我们知道 / 是文件系统的根目录。在根目录下有:
| 目录 | 用途 | 例子 |
|---|---|---|
/boot |
引导程序所需的静态数据 | |
/bin |
基本的用户命令 | /bin/ls |
/sbin |
基本的系统命令 | /sbin/shutdown |
/lib |
链接库和内核模块 | /lib/ld-linux.so.2 |
/opt |
存放第三方的软件包 | |
/etc |
配置文件 | /etc/hostname |
/tmp |
临时文件 | |
/run |
与进程相关的数据 | /run/xxx.pid /run/xxx.sock |
/var |
动态数据 | |
/usr |
常规内容 | |
/root |
root 用户的主目录 | |
/home |
存放其他用户的主目录 | /home/alice |
/bin /sbin 这里使用“命令”一词,是因为这里的可执行文件都是能够直接运行的。系统命令是指那些应该仅由管理员使用的命令。
/lib 可能有一系列变体,里面有对应于特定体系结构的库,如 /lib64/ld-linux-x86-64.so.2。
/opt 里推荐使用这样的目录结构:
/opt/<package>/
bin
include
lib
doc
man
额外地,不推荐把软件包的配置文件(etc)和动态数据(var)放在这里,而是分别放置在 /etc/opt/<package> /var/opt/<package>。
[ /var ]
/var 里大致会有:
| 目录 | 用途 | 例子 |
|---|---|---|
log |
日志文件 | |
run |
与进程相关的数据 | |
lock |
本地锁 | |
tmp |
临时文件 | |
cache |
缓存数据 | |
lib |
持久化的状态数据 | |
spool |
假脱机代理的数据 | |
backups |
备份数据 | |
crash |
系统崩溃转储信息 | |
opt |
来自 /opt 软件包的可变数据 |
|
local |
来自/usr/local 软件包的可变数据 |
/run 跟 /var/run 一般并无二致,而且通常其中一个会符号链接到另一个。
/tmp 跟 /var/tmp 区别在于一般 /tmp 里面的文件会在系统重启后被自动清空,而 /var/tmp 不这样。
[ /usr ]
/usr 下存放那些并非系统最基本的常规内容。它包括:
| 目录 | 用途 | 例子 |
|---|---|---|
bin |
用户命令 | /usr/bin/vim |
sbin |
系统命令 | /usr/sbin/useradd |
lib<qual> |
链接库和软件包私有的静态数据文件 | /usr/lib/X11 |
share |
软件包共享的静态数据文件 | |
include |
C 头文件 | /usr/include/stdio.h |
src |
软件包源码 | /usr/src/linux-headers-common |
local |
本地定制的内容 |
各 Linux 发行版提供的软件包管理器一般会将它所管理的各种软件的内容置于 /usr 下。
注意到,这里没有 etc 和 var,Linux 希望归属于 /usr 的软件包的配置文件和动态数据被统一收纳在 /etc /var 内。
[ /usr/local ]
/usr/local 默认是空的,用于存放那些系统管理员自定义的内容。这些软件包不受系统和软件包管理器管理,也不会随着系统升级而被覆盖。它包括:
| 目录 | 用途 |
|---|---|
bin |
用户命令 |
sbin |
系统命令 |
lib<qual> |
链接库和软件包私有的静态数据 |
share |
软件包共享的静态数据 |
etc |
软件包配置 |
var |
动态数据 |
include |
C 头文件 |
src |
软件包源码 |
注意到这里有 etc var,因为你可能会不希望自定义的软件包的配置和动态数据跟系统自带的混在一起。
还有一些特殊用途的目录
/srv 用于存放系统提供的各种服务的数据,如 /srv/ftp 或 /srv/project-1/http。Ubuntu 上并未使用它,而 Manjaro 使用了。
/lost+found 用于存放文件系统修复时找回的部分文件,这些文件被文件系统修复程序 fsck 发现,但是丢失了引用。
/usr/games /usr/local/games 用于存储与游戏相关的内容。
与设备相关的目录结构
对于访问设备、挂载额外的文件系统,在根目录下有:
| 目录 | 用途 | 例子 |
|---|---|---|
/dev |
存放设备的文件抽象 | /dev/null |
/mnt |
存放额外的挂载点 | |
/proc |
Linux 内核状态的文件抽象 |
在现在看来 /media /mnt 之间的界限没有那么明显,但很久之前的人们是希望区分他们的:
/mnt只包含临时的挂载点,在不影响现有系统的情况下存取文件/media包含可移动设备的挂载点。如/media/cdrom0
Ubuntu 使用了 /media 而 Manjaro 则使用 /mnt,但是内容没有本质区别。
文件系统层次化结构与挂载点
理想的情况下,系统管理员可以在不同的挂载点挂载文件系统的不同部分,灵活地启用不同的功能,并给予不同的访问权限。
一些可能的切分如下:
//usr/usr/local/opt/etc/etc/opt/var/var/opt/run/tmp/home
举例来说,系统管理员在配置完 /usr 下的软件包后,可以以只读模式挂载 /usr 来保证其安全和稳定。
原文链接 https://blog.xupu.name/p/2018-11-linux-filesystem-hierarchy/
Linux 文件系统的层次化结构的更多相关文章
- Linux文件系统的层级结构
Linux文件系统的层级结构 文件结构 倒置的树状结构 :Linux的哲学思想是一切皆文件,把几乎所有资源统统抽象为文件形式:包括硬件设备,甚至通信接口等 根目录 :linux的文件起始均从唯一的 ...
- Linux文件系统的目录结构详解
Linux文件系统的目录结构详解 一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...
- Linux文件系统的目录结构
Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...
- Linux文件系统的基本结构
Linux文件系统结构 通过下面两张图片来认识一下Linux文件系统的结构. 当前工作目录 实践: 文件名称 这些规则不仅适用于文件,也适用于文件夹. 实践: ls命令 ls命令表示列出当前工作目录的 ...
- Linux 学习手记(2):Linux文件系统的基本结构
Linux 文件系统概况 Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录“/”中.如图所示(每个目录的作用可以参考:Linux目录结构说明): Linux系统严格区分大小写 ...
- 理解与学习linux 文件系统的目录结构
1. linux文件系统的结构 linux文件系统是以一种树形结构存在,Linux的文件系统的入口就是/,所有的目录.文件.设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者. 2. ...
- Linux 文件系统的目录结构
http://www.jb51.net/LINUXjishu/151820.htmlLinux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些 ...
- Linux 文件系统的基本结构
Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录/中. Linux系统严格区分大小写所以在Linux中:一个名为“A”的文件夹和一个名为“a”的文件夹是不同的两个文件夹,这点 ...
- Linux 文件系统和目录结构
1. Linux 文件系统 2. linux 目录结构 3. 磁盘分区.文件系统和目录的关系 1. Linux 文件系统 Linux 支持多种的文件系统种类,除了 linux 通常使用的 ext 系列 ...
随机推荐
- Java校验8位字符串是否为正确的日期格式
import java.text.ParseException; import java.text.SimpleDateFormat; /** * 校验8位字符串是否为正确的日期格式 * @autho ...
- POJ 3122 Pie( 二分搜索 )
链接:传送门 题意:一个小朋友开生日派对邀请了 F 个朋友,排队上有 N 个 底面半径为 ri ,高度为 1 的派,这 F 个朋友非常不友好,非得"平分"这些派,每个人都不想拿到若 ...
- [读书笔记] R语言实战 (三) 图形初阶
创建图形,保存图形,修改特征:标题,坐标轴,标签,颜色,线条,符号,文本标注. 1. 一个简单的例子 #输出到图形到pdf文件 pdf("mygrapg.pdf") attach( ...
- MHA 主从切换过程及日志分析
本文主要在MHA 切换日志的角度分析MHA切换的过.MHA故障切换过程如下图所示 第一部分:开启MHA 监控 通过分析日志,得到以下步骤: 1.读取MHA manager 节点的配置文件,并检查配置文 ...
- Golang-and-package-version-managment
参考文章 学习Golang之后对golang中的版本管理,包管理等机制一直没有很好的琢磨,偶然想起还是觉得很有必要进行归纳,包管理使用起来简单,无非就是install,uninstall,list等, ...
- vue解决跨域问题
vue解决跨域问题 vue跨域解决方法和小总结 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow ...
- JS中的Set 与去重
-----------------------Set 与去重----------------------- ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值.Se ...
- Android自己定义百度地图缩放图标
自己定义实现Android百度地图的缩放图标,须要自己定义一个缩放控件,实现效果例如以下: 这里的缩放效果,实现了点击button能够对地图的放大缩小,通过手势放大与缩小也控制缩放图标的可用状态.详细 ...
- HDU 4323 Contest 3
编辑距离,经典的了.动态规划枚举即过. #include <iostream> #include <cstdio> #include <string.h> #inc ...
- Activity嵌套多个Fragment实现横竖屏切换
一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...