Linux文件系统

文件是什么?
存储空间内存储的有边界的一段流式数据,对数据可以做到按名存取。
众多文件是如何有效的组织起来?
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

(0)
N27_sapbcsN27_sapbcs
上一篇 2017-09-05 09:46
下一篇 2017-09-05 21:41

相关推荐

  • SHELL编程之数组运用及YUM软件包管理

    SHELL编程中,当要引用到多个值的时候,一个一个地进行变量赋值会让我们的脚本变得繁琐,不利于代码的优化,所以,就需要通过数组进行定义,优化代码,减少不必要的定义和命令操作。 SHELL中的数组:存储多个元素的连续内存空间 数组名:整个属组只有一个名字 数组索引: 编号从0开始   数组名[索引]   ${array_name[index…

    Linux干货 2016-08-24
  • 第十周作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)     CentOS系统启动流程:     1.加电自检:由bios去检测各硬件是否存在且是否正常运行,然后进行硬件初始化     2.选择启动顺序,加载mbr:根据bios设置的设备启动顺序,…

    2017-07-03
  • 密码保护:测试信息, 顺便贴上以前年少轻狂的内容.(未整理)

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2017-07-11
  • 探究PHP底层

    1、PHP是什么? PHP 指的是我们从外面看到的一套完整的系统。这听起来有点糊涂,但其实并不复杂(PHP4 内部结构图)。从功能上来分:我们可以分为三部分: 1、 解释器部分(Zend 以引擎),负责对输入代码的分析、翻译和执行;2、 功能性部分(PHP功能函数以及扩展),负责具体实现语言的各种功能(比如它的函数等等);3、 接口部分(SAPI),负责同 …

    Linux干货 2015-04-10
  • ansible

    运维工具介绍 Ansible Ansible优点:  Agentless       (去中心化)  Stupied Simple (上手简单,学习曲线平滑)  SSH by default (安全,无需安装客户端)  YAML no code,定制剧本 (语法简单,维护方便) 自动工具衍…

    Linux干货 2017-05-23
  • vim文本编辑器之快捷键满天飞

    vim文本编辑器不同于nano的是其功能非常强大,强大的功能还支持各种快捷键,让我们编辑文本的时候更方便更快捷。 本文将会按照下图所展示的功能来对命令一一讲解,           打开文件:       &n…

    Linux干货 2016-08-11