[Linux]Filesystem Hierarchy Standard/文件系统层次结构标准(FHS for Linux)
阅读原文时间:2023年07月15日阅读:2

1 文件系统层次结构标准

本篇文章为维基百科中关于FHS的译文,原文见

由spawpaw@hotmail.com翻译,转载需注明出处

原文备份:http://blog.csdn.net/qq_29753285/article/details/69790931

本文更新地址:http://blog.csdn.net/qq_29753285/article/details/69791332

(csdn解析markdown有点问题..有点影响阅读…)

像这类解释性的文章还是建议大家看原文。

Filesystem Hierarchy Standard (FHS)由linux基金会维护,

目前(2017-4-9),FHS的最新版本为3.0,可从http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf下载

  • 开发者 Linux基金会
  • 初始版本 1994年2月14日
  • 最新版本 3.0 (2015年6月3日)
  • 网站 Linux基金会官网

文件系统层次结构标准 (FHS) 定义了在类Unix系统中的目录结构和目录内容。它由Linux基金会维护,最新版为2015年六月三日发布的3.0版,仅用于Linux的各类发行版中。

在FHS中,所有的(包括存储于不同物理/虚拟设备中的)文件和目录都存在于根目录 / 下。其中,部分目录仅当特定系统(如X Window)安装后才会存在。

下表中大部分目录都以相似的功能存在于所有的UNIX系统中。但是,以下的描述仅针对FHS,且对非Linux系统并非权威

  • / 主层次结构的根&&整个文件系统的根目录

    • /bin 所有用户在单用户模式中必须具备的二进制命令文件,如 cat, ls, cp.(重要的二进制 (binary) 应用程序包含二进制文件,系统的所有用户使用的命令都在这个目录下)
    • /boot 启动 (boot loader) 配置文件,包含引导加载程序相关的文件,如 kernels, initrd.
    • /dev 必要的 设备(device) 文件,包含设备文件、终端设备,USB或连接到系统的任何设备,如 /dev/null.你只要通过访问这个目录下的某个文件就相当于访问某个设备. 设备分类字符设备块设备(物理设备、虚拟设备)
    • /etc 特定主机 全系统 的配置文件(配置文件、启动脚本等),包含所有程序所需的配置文件,也包含了用于启动/停止单个程序的启动和关闭shell脚本。一直以来,这个名字本身就有争议。在早期由Bell labs所撰写的UNIX实现文档中,/etc 被当作附加(etcetera)目录,因为历史上这个文件夹用来保存所有不属于其他地方的文件(但FHS限制/etc仅用于保存静态配置文件,不能保存二进制文件)。从早期的文档发布以来,这个文件夹的名字就被人们以不同的方式重新定义。最近的释义包括如”Editable Text Configuration” 或 “Extended Tool Chest”词源
      • /etc/opt  保存在/opt/中的插件包的配置文件
      • /etc/sgml  处理SGML的程序(如catalogs)的配置文件
      • /etc/X11  X Window System, version 11 的配置文件
      • /etc/xml  处理xml的程序(如catalogs)的配置文件
    • /home 本地用户主 (home) 目录,所有用户用home目录来存储他们的个人文件、个人设置等
    • /lib 系统库 (libraries) 文件(ldd?跟踪依赖库),包含支持位于/bin和/sbin下的二进制文件的库文件。即 /bin//sbin/ 中必须的依赖库
    • /lib Alternate format essential libraries. Such directories are optional, but if they exist, they have some requirements.
    • /media 挂载(可移动介质)热插拔介质 (media),诸如 CD-ROMs数码相机等挂载点,用于挂载可移动设备的临时目录。 (在FHS-2.3中出现).
    • /mnt 临时挂载的文件系统。临时安装目录,系统管理员可以挂载文件系统:mount -t type [-o options] device dir
    • /opt 可选的、提供第三方应用程序的安装目录。
    • /proc 将进程和内核信息以文件形式呈现的虚拟文件系统。在Linux中,与procfs mount(进程文件系统)对应。即:特殊的动态目录,用以维护系统信息和状态,包括当前运行中进程 (processes) 信息;包含系统进程的相关信息,是一个虚拟的文件系统,包含有关正在运行的进程的信息,系统资源以文本信息形式存在。
    • /root root用户的用户主目录
    • /run 运行时变量数据:从本次启动到现在的系统信息。如当前登陆的用户和正在运行的守护进程。挂载临时文件系统,文件和目录没有存储在磁盘上,而只存储在内存中。它们表示保存在内存(或基于磁盘的交换空间)中的数据,它看起来像是一个已挂载的文件系统,这个可以使其更易于访问和管理
    • /sbin 必备的系统可执行文件,如fsck, init, route.即:重要的系统二进制 (system binaries) 文件 也是包含的二进制可执行文件。在这个目录下的linux命令通常都是由系统管理员使用的,对系统进行维护。即 /sbin一般存放root用户的管理类程序;/bin一般用户都可以使用的命令
    • /srv 本系统提供的特定站点的数据,存放着一些软件服务启动后所需要的程序。如web服务器提供的数据和脚本,FTP服务器提供的数据,VCS的仓库
    • /sys 包含连接到本台计算机的设备信息.即 系统 (system) 文件,其实跟/proc非常的相似,也是一个虚拟的文件系统主要也是记录与内核相关的信息
    • /tmp 临时文件(和/var/tmp相同). 通常在重启后清空,并且受到严格的大小限制。 即 临时(temporary)文件包含系统和用户创建的临时文件。当系统重启时,这个目录下的文件将都被删除
    • /usr UNIX SOFTWARE RESOURCE包含绝大部分用户都能访问的应用程序和文件,包含二进制文件,库文件、文档和二级程序的源代码。即: 只读用户数据的次要层次,包含大部分(多)用户功能和应用。
      • /usr/bin    所有用户的非必要的二进制可执行文件(在单用户模式中不需要)
      • /usr/include  Standard include files.
      • /usr/lib     /usr/bin/ 和 /usr/sbin/ 中的二进制文件的依赖库
      • /usr/lib Alternate format libraries (optional).
      • /usr/local    仅针对当前主机的 本地数据的第三个层次。一般包含其他的子目录,如 bin/, lib/, share/
      • /usr/sbin    非必须的系统二进制文件,如多种网络服务的守护进程
      • /usr/share   结构独立(共享)的数据
      • /usr/src    源代码,如 内核的源代码和它的头文件
      • /usr/X11R6   X Window System, Version 11, Release 6 (up to FHS-2.3, optional).
    • /var Variable files:各种在系统运行中,内容会不停改变的文件。经常变化的(variable)文件,在这个目录下可以找到内容可能增长的文件。如:日志文件、数据库、spool files,和临时的电子邮件文件。
      • /var/cache 应用缓存数据。这类文件由于耗时的I/O或计算而被生成在本地。应用必须能够重新生成或转储这些文件,以保证这些数据被删除时不会造成数据丢失。(意思就是这些东西删了不会造成不良后果)
      • /var/lib   状态信息。程序运行时会改变的持久化数据,如 数据库,packaging system metadata, etc.
      • /var/lock  Lock files. 追踪当前正在使用的资源的文件.
      • /var/log  Log files. 各种日志.
      • /var/mail  Mailbox files. 在某些发行版中,这些文件被放在已经不推荐使用的/var/spool/mail 目录中.
      • /var/opt  来自保存在/opt 中的插件包的可变数据。
      • /var/run  Run-time variable data. 这个目录包含描述系统的自启动以来的系统信息数据。在 FHS 3.0中, /var/run 被 /run 替代。系统不应该在使用/var/run 或者提供/var/run 到 /run 的符号连接,防止出现兼容性倒退
      • /var/spool Spool for tasks waiting to be processed, e.g., print queues and outgoing mail queue.
        • /var/spool/mail 不建议使用的用户邮箱位置,见/var/mail
      • /var/tmp 重启时会被保存的临时数据

大多数Linux发行版遵循文件系统层次结构标准(FHS),并且为保持FHS约定发布了相关政策。GoboLinux 和 NixOS 提供了有意不遵循FHS约定的实现

有些基本遵循这个标准的发行版在部分方面有些违背,如

  • 现代Linux发行版将/sys 作为可以被连接到此系统的设备修改和保存的虚拟文件系统(sysfs,相当于/proc),但是许多UNIX和类UNIX系统使用/sys 作为指向 kernel source tree 的符号连接
  • 许多现代UNIX系统(像FreeBSD ,通过它的端口系统)安装第三方包至/usr/local 然而却将本应是操作系统的代码放在/usr 中
  • 一些Linux发行版不再区分/lib 与/usr/lib,并且将lib 作为指向 /usr/lib 的软连接
  • 一些Linux发行版不再区分 /bin 与 /usr/bin 和/sbin 与/usr/sbin 。他们将 /bin 作为指向 /usr/bin 的软连接, 将/sbin 作为指向/usr/sbin 的软连接

现代Linux发行版将/run 作为(遵循FHS3.0的)保存不稳定的运行时数据的临时文件系统(tmpfs)。根据FHS2.3,这类数据被保存在/var/run ,但是由于在启动时这个目录并不总是可用,会导致一些问题。所以,这些程序必须借助欺骗的方式,如使用类似 /dev/.udev, /dev/.mdadm, /dev/.systemd 或 /dev/.mount 等并不是用来保存这些数据的设备目录。除其他好处外,这样也会使根目录以只读方式挂载的系统更容易使用。例如,以下是Debian在2013年的Wheezy版本中作出的改变:

/dev/.* → /run/*
/dev/shm → /run/shm
/dev/shm/* → /run/*
/etc/* (writeable files) → /run/*
/lib/init/rw → /run
/var/lock → /run/lock
/var/run → /run
/tmp → /run/tmp

当FHS被以FSSTND (Filesystem Standard的缩写)被创建时,其他UNIX和类UNIX系统已经有了他们自己的标准。

比较典型的例子有 自从 Version 7 Unix (in 1979)发布以来就存在的the hier(7) description of file system layout; the SunOS filesystem(7) 和它的后继 the Solaris filesystem(5)

  • 历史版本

legend

Version

Release Date

Notes

旧版本

1

1994/2/14

FSSTND

旧版本

1.1

1994/10/9

FSSTND

旧版本

1.2

1995/3/28

FSSTND

旧版本

2

1997/10/26

FHS 2.0 直接继承自FSSTND 1.2 。 FSSTND更名为FHS

旧版本

2.1

2000/4/12

FHS

旧版本

2.2

2001/5/23

FHS

仍支持

2.3

2004/1/29

FHS

最新版

3

2015/5/18

FHS

2 文件系统基本信息解读

Linux中常见的文件类型有7种:

chmod [-R] xyz 文件或目录

linux中每个文件或目录都有一组共9个基础权限位,每三位字符被分为一组,他们分别是属主权限位、用户组权限位、其他用户权限位,通过权限位来控制文件属主、用户组以及其他用户的权限。

权限位

说明

r

read可读权限 对应数字是:4

w

write 可写权限 对应数字是:2

x

Execute 可执行权限 对应数字是:1

-

没有任何权限 对应数字是:0

3 延申

  • 内部命令与外部命令:

    在linux系统中有存储位置的命令为外部命令,没有存储位置的为内部命令,可理解为内部命令嵌入在linux的shell中,所以看不到。type来判断到底为内部命令还是外部命令

    type

  • 获取帮助的途径
  1. help命令

    内部命令的帮助文档 。使用help的格式为    help  命令字就可以

    [root@model Documents]# help cd

  2. "--help"选项

    大多数外部命令都可以使用--help来获取帮助,如果这个命令没有--help选项,则会显示简单的命令 格式 命令字 --help

    date --help //日期帮助

  3. Man命令

    man passwd

  4. Info命令

    info passwd

  • 网络

    ifconfig / ping / netstat / lsof

  • 资源监控(内存、磁盘、进程)

    top / free / iostat / vmstat / ps

  • 文件系统 / 文本处理 / 用户管理

    ls / mv / cp / rm /

    chmod / chgrp / chown
    chmod [-R] xyz 文件或目录
    # chmod:更改文件9个属性 如: chmod 635 /opt/bashrc
    chown [-R] 属主名:属组名 文件名
    # chown:更改文件属主,也可以同时更改文件属组 如: chown sdc:mysql /opt/install.log
    chgrp [-R] 属组名文件名
    # chgrp:更改文件属组
    -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

    touch / vi / cat / grep / find
    passwd / useradd

  • 查询

    who / history / which

  • 软件(源)管理

    rpm / yum /

  • Linux用户的分类:

    root用户
    虚拟用户(比如 bin、daemon、adm、ftp、mail等,这类用户都是系统自身拥有的)
    普通用户

注意:在Linux中,操作系统根据UID来判断用户, 而不是用户名!

在Linux,管理员在默认情况下为root账户,UID=0。

普通用户UID默认范围为1-65535。

在centos 6中,系统用户的UID范围为1-499,普通用户为500+。

在centos 7中,系统用户范围为1-999,普通用户为1000+。

  • Linux用户的配置文件主要包括:

    用户信息文件:/etc/passwd
    密码文件:/etc/shadow
    用户组文件:/etc/group
    用户组密码文件:/etc/gshadow

  • 查看Linux用户组

创建用户时,若不特殊指定,则默认以用户名作为对应的用户组。

groups 查看当前登录用户的组内成员
groups gliethttp 查看gliethttp用户所在的组,以及组内成员
whoami 查看当前登录用户名

X 参考文献

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章