文件系统主要包含4个功能设计
- 文件系统组织结构和命名规则
- 系统调用/第三方库(可选)
- 硬件设备抽象—具体的硬件设备抽象为一个可见的文件
- 安全模型—文件访问权限 文件隐藏 文件共享等
文件系统列表
文件系统 | 开发者 | 应用领域 |
---|---|---|
Minix | — | 教学目的 |
ISO-9660 | — | 老式CD-ROM上的文件系统 |
ext2/ext3/ext4 | — | 为Linux系统开发的文件系统 |
FAT/NTFS | 微软公司 | Windows系统使用文件系统 |
ZFS | SUN公司 | — |
VxFS/ReiserFS | Veritas | — |
JFS | IBM | — |
网络文件服务器 | — | — |
内核组件或者是基于内存的磁盘模拟器 | — |
可见在不同时期出于商业目的或者是教学研究目的,涌现了很多种文件系统
- 文件系统组织树状结构
常见的文件系统使用树状结构,如下图
路径名称:
通过路径名称访问特定的文件,路径名称有两种:绝对路径形如 /home/Ben,相对路径形如 ./Ben
根文件树的组织
文件系统阵营 | 组织类别 |
---|---|
UNIX阵营 | |
Windows阵营 |
UNIX家族根文件系统从来没有被好好的组织管理过:关键配置存储的位置,系统库存放的位置,命令存储的位置因为缺少标准规定。因此大家都是各行其是,出现当下不同操作系统的根文件系统百花齐放的现状
- 对Linux系统来说,文件系统层次结构标准(Filesystem Hierarchy Standard)正在努力编制标准目录,使之合理并加以说明。什么文件应当存放在什么位置,可以参考该文档
标准目录及其内容
路劲名 | 操作系统 | 内容 |
---|---|---|
/bin | 所有系统 | 核心操作系统命令 |
/boot | LS | 内核文件或者加载内核需要的文件 |
/dev | 所有系统 | 打印机 键盘 磁盘等硬件设备文件 |
/etc/ | 所有系统 | 关键启动配置文件 |
/home | 所有系统 | 用户默认主目录 |
/kernel/ | S | 内核组件? |
/lib | 所有系统 | 库,共享库和部分C编译器 |
/media | LS | 可移动介质的文件系统挂载点 |
/mnt | LSA | 可移动介质的文件系统的临时挂载点 |
/opt | 所有系统 | 可选用的应用程序软件包(尚未广泛采用) |
/proc | LSA | 所有正在运行进程的信息 |
/root/ | LS | root用户的HOME目录 |
/sbin/ | 所有系统 | 系统运行需要的最小命令集合(一个显著的特征是程序大多是使用静态链接生成的) |
/stand | H | 独立的工具,磁盘格式化工具,诊断工具等 |
/tmp | 所有系统 | 重新引导系统就消失的文件 |
/usr | 所有系统 | 次要文件和命令层次结构 |
/usr/bin/ | 所有系统 | 大多数命令和可执行文件 |
/usr/include/ | 所有系统 | 编译器头文件 |
/usr/lib | 所有系统 | 库:供标准程序使用的支持文件 |
/usr/lib64 | L | 在64位Linux发行版本上的64位库 |
/usr/local | 所有系统 | 本地编写的软件或者安装包 |
/usr/share | 所有系统 | 多种系统共用的东西 |
/usr/share/man | 所有系统 | 联机用户手册 |
/usr/src | LSA | 非本地软件包的源代码 |
/usr/tmp | 所有系统 | 更多的临时空间,重新引导文件仍然保留 |
/var | 所有系统 | 系统专用数据和配置文件 |
/var/adm | 所有系统 | 各种不同的东西:日志,系统设置记录,奇怪的管理信息 |
/var/log | LSA | 各种系统日志文件 |
/var/spool | 所有系统 | 供打印机,邮件等使用的假脱机目录 |
/var/tmp | 所有系统 | 更多的临时空间,系统重新引导,文件保留 |
文件属性:
文件在磁盘上基本存储格式如下
下面一一对各个字段进行说明
-
i_mode
设置用户/组 ID
设置用户ID位和设置用户组ID位并非总是有意义,有以下几种使用情况
01 文件作为可执行文件时,设置用户ID和设置用户组ID位标志会影响操作系统更改进程的有效用户ID和有效用户组ID,更改为文件的拥有者和所属组
02 文件类型为目录时,设置用户组ID被设置。在该目录下新建的文件所属组为该目录的所属组,而不是用户所在的组粘滞位
01 文件作为可执行文件时,设置粘滞位。程序结束时,代码区会被连续的保存在交换分区中(在文件系统中,代码数据是存储在离散的数据块当中的,磁盘寻道时间会加长),因此再一次执行该程序时,代码区加载时间会变短。粘滞位的概念渐渐的被现代系统遗忘了…02 目录设置粘滞位时,参考链接:目录与粘滞位
大多数文件系统定义了7种类型,可使用 ls -l 命令查看文件类型
-
下面说明不同命令如何作用在磁盘文件上
/# 修改 i_mode,读写执行(rwx),用户/用户组/其它人(u/g/o),粘滞位t
例如:
$chmod u+w file
$chmod a-x file/#修改i_uid 和i_gid
$sudo chown -R jianleya ~/mydir
$sudo chgrp -R jianleya ~/mydir
或者一次完成操作
$chown -R jianleya:jianleya ~/mydir