文件是什么?
存储空间内存储的有边界的一段流式数据,对数据可以做到按名存取。
众多文件是如何有效的组织起来?
1. 平面化
把众多文件放在一起。当想查找某个文件时,需要遍历所有文件,当文件数目足够多的时候,查找一个文件将会非常慢,效率极低。
2. 层级结构化
根据后续查找文件的筛选条件进行分类,逐层放置,通常要查找一个文件,只需要从最高层级开始,逐层进行查找,最后在底层层级的存储单元内进行文件遍历,极大的提升了文件查找效率。
总结
从上述两种管理方式的对比来看,针对于海量文件的管理来讲,层级结构化管理,无疑是最适合的方式,Linux也采用了这种文件管理理念。
FHS(Filesystem Hierarchy Standard):文件系统层级结构标准
为了规范各Linux发行版的文件系统层级结构设定,FHS出现了,对目录层级结构做出了如下定义:
目录 | 目录存在的目的
—— | ———————
/bin | 所有用户可用的基本命令程序文件
/sbin | 供系统管理使用的工具程序
/boot | 引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等
/dev | 存储特殊文件或设备文件(包括字符设备、块设备)
/etc | 系统程序的静态配置文件,只能是静态的,不存放二进制可执行文件
/home | 普通用户的家目录的集中位置
/lib | 为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块(/lib/modules目录)
/lib64 | 64位系统特有的存放64位共享库的路径
/media | 便携式设备挂载点,例如:cdrom, floppy等
/mnt | 其他文件系统的临时挂载点
/opt | 附加应用程序的安装位置
/root | root用户的家目录
/srv | 当前主机为服务提供的数据
/tmp | 为那些会产生临时文件的程序提供的用于存储临时文件的目录,可供所有用户执行写入操作,有特殊权限
/usr | 全局共享的只读数据路径,自己本身是一个层级结构
/var | 存储经常发生变化的数据的目录,自己本身是一个层级结构
/proc | 虚拟文件系统,为内核和进程存储其相关信息,多为内核参数,例如:net.ipv4.ip_forward,虚拟为/proc/sys/net/ipv4/ip_forward
/sys | sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径,其主要作用在于为管理Linux设备提供了一种统一模型的接口
设备文件包含字符设备和块设备,其中
设备名 | 意义
———— | ———
字符设备 | 线性设备,有次序的,以字符为单位,比如键盘
块设备 | 随机访问设备,可以实现随机访问,被分为指定大小的数据块,比如磁盘
/lib目录下的共享库文件中
库名类型 | 意义
———— | —–
libc.so.* | C语言的动态链接库
ld* | 运行时链接器或加载器
modules | 存放内核模块的目录
/usr目录层级结构
目录 | 目录存在的目的 | 是否必选
—— | ——————— | ————
bin | 大多数用户命令 | 是
include | C程序用到的头文件 | 是
lib | 库文件 | 是
local | 让系统管理员安装本地应用程序,也通常用于安装第三方应用程序,也是一个层级目录 | 是
sbin | 非系统自身运行和维护需要用到的管理命令 | 是
share | 与架构无关的数据,例如命令帮助文件,命令自带说明文件 | 是
X11R6 | X Windows程序的安装位置,11是版本,6是发行号 | 否
games | 游戏和有关教育的二进制程序文件 | 否
lib64 | 其他可选库文件 | 否
src | 源码 | 否
/usr/local目录层级结构
目录 | 目录存在的目的
—— | ———————
bin | 本地二进制程序文件
etc | 本地程序文件的配置文件存放目录
games | 本地游戏程序文件
include | 本地C语言程序头文件
lib | 本地库文件
man | 本地在线帮助文档
sbin | 本地系统程序文件
share | 本地与架构无关的层级目录
src | 本地源码
/var目录层级机构
目录 | 目录存在的目的
—— | ———————
cache | 应用缓存数据
lib | 变量状态信息
local | /usr/local目录的变量数据
lock | 锁文件
log | 日志文件和目录
opt | /opt目录的变量数据
run | 正在运行进程的相关数据
spool | 应用程序的假脱机数据
tmp | 系统重新启动时保存的临时文件
/sys目录的层级结构
目录 | 目录存在的目的
—— | ———————
devices | 这是内核对系统中所有设备的分层次表达模型,也是/sys文件系统管理设备的最重要的目录结构
dev | 这个目录下维护一个按字符设备和块设备的主次号码(major.minor)连接到真实的设备(/sys/devices下)的符号链接文件,它是在内核2.6.26首次引入
bus | 这是内核设备按总线类型分层放置的目录结构,devices中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成Linux统一设备模型的一部分
class | 这是按照设备功能分类的设备模型,如系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统,它也是构成Linux统一设备模型的一部分
block | 这里是系统中当前所有的块设备所在,从2.6.22开始已经标记为过时
firmware | 这里是系统加载固件机制的对用户控件的接口,关于固件有专用于固件加载的一套API
fs | 这里按照设计是用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点,但目前只有fuse, gfs2等少数文件系统支持sysfs接口
kernel | 这里是内核所有可调整参数的位置
module | 这里有系统中所有模块的信息
power | 这里是系统中电源选项,这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机、重启等
原创文章,作者:N27_sapbcs,如若转载,请注明出处:http://www.178linux.com/86313