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 下。

注意到,这里没有 etcvar,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 文件系统的层次化结构的更多相关文章

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

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

  2. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  3. Linux文件系统的目录结构

    Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...

  4. Linux文件系统的基本结构

    Linux文件系统结构 通过下面两张图片来认识一下Linux文件系统的结构. 当前工作目录 实践: 文件名称 这些规则不仅适用于文件,也适用于文件夹. 实践: ls命令 ls命令表示列出当前工作目录的 ...

  5. Linux 学习手记(2):Linux文件系统的基本结构

    Linux 文件系统概况 Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录“/”中.如图所示(每个目录的作用可以参考:Linux目录结构说明): Linux系统严格区分大小写 ...

  6. 理解与学习linux 文件系统的目录结构

    1. linux文件系统的结构 linux文件系统是以一种树形结构存在,Linux的文件系统的入口就是/,所有的目录.文件.设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者. 2. ...

  7. Linux 文件系统的目录结构

    http://www.jb51.net/LINUXjishu/151820.htmlLinux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些 ...

  8. Linux 文件系统的基本结构

    Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录/中. Linux系统严格区分大小写所以在Linux中:一个名为“A”的文件夹和一个名为“a”的文件夹是不同的两个文件夹,这点 ...

  9. Linux 文件系统和目录结构

    1. Linux 文件系统 2. linux 目录结构 3. 磁盘分区.文件系统和目录的关系 1. Linux 文件系统 Linux 支持多种的文件系统种类,除了 linux 通常使用的 ext 系列 ...

随机推荐

  1. css——外部样式

    外部样式 先建立一个css文件,如下: 然后开始写代码,不要加<style> 然后可以在html文件中的<head>内引用:<link rel="stylesh ...

  2. jq——html,text,val和对象访问

    html代码 1.html():获取的是对象内的html代码,类似于innerHTML 2.html(代码):设置html的内容,替换 $("div").html("hh ...

  3. js数组的一些骚操作 (用一行代码实现)

    1.扁平化n维数组 1.终极篇 [1,[2,3]].flat(2) //[1,2,3] [1,[2,3,[4,5]].flat(3) //[1,2,3,4,5] [1[2,3,[4,5[...]].f ...

  4. BZOJ 4864 [BJWC2017]神秘物质 (splay)

    题目大意: 让你维护一个序列,支持: 1.合并两个相邻的数为一个新的数 2.在某个位置插入一个数 3.查询一个区间的任意子区间极差的最大值 4.查询一个区间的任意子区间极差的最小值 前两个操作可以用$ ...

  5. unity 显示、隐藏Android导航栏

    1.下面的返回.home栏可用Screen.fullScreen控制 2.导航栏的显示和隐藏用下面代码控制 private AndroidJavaObject currentActivity { ge ...

  6. MyBatis学习总结(4)——解决字段名与实体类属性名不相同的冲突

    一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...

  7. 循环语句第2种 WHILE ... LOOP END LOOP;

     --------第2种--------   WHILE ... LOOP   END LOOP;    declare    n number(3) :=1;  begin    WHILE n&l ...

  8. ASP.NET-Request对象

    前言:Request对象主要用于获取来自客户端的数据,如用户填入表单的数据.保存在客户端的Cookie等. 一.Request对象概述 1.主要属性  ApplicationPath  获取服务器上a ...

  9. 根据数据库表结构生成java类

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...

  10. 50个Android开发技巧(12 为控件加入圆角边框)

    控件的圆角边框能够使你的App看起来更美观,事实上实现起来也非常easy. (原文地址:http://blog.csdn.net/vector_yi/article/details/24463025) ...