1 文件系统层次结构标准
本篇文章为维基百科中关于FHS的译文,原文见
-
wiki:https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
-
ubuntu:http://manpages.ubuntu.com/manpages/precise/en/man7/hier.7.html
由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下载
1.1 FHS 简介
- 开发者 Linux基金会
- 初始版本 1994年2月14日
- 最新版本 3.0 (2015年6月3日)
- 网站 Linux基金会官网
文件系统层次结构标准 (FHS) 定义了在类Unix系统中的目录结构和目录内容。它由Linux基金会维护,最新版为2015年六月三日发布的3.0版,仅用于Linux的各类发行版中。
1.2 目录结构
在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 重启时会被保存的临时数据
1.3 FHS 约定
大多数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
1.4 历史
当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系统中有存储位置的命令为外部命令
,没有存储位置的为内部命令
,可理解为内部命令嵌入在linux的shell中,所以看不到。type来判断到底为内部命令还是外部命令
type <command>
- 获取帮助的途径
- help命令
内部命令的帮助文档 。使用help的格式为 help 命令字就可以
[root@model Documents]# help cd
- "--help"选项
大多数外部命令都可以使用--help来获取帮助,如果这个命令没有--help选项,则会显示简单的命令 格式 命令字 --help
date --help //日期帮助
- Man命令
man passwd
- Info命令
info passwd
LINUX 常用命令分类
- 网络
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用户管理
- 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