文件系统通常采用分层结构实现:文件管理、目录管理、磁盘管理
文件控制块(File Control Block,FCB)是操作系统为每个文件建立的唯一数据结构,包含了全部文件属性。
通常把FCB汇集、组织在一起形成文件目录,文件目录含两种目录项,分别描述子目录和文件。
目录项格式按统一标准定义,全部由目录项构成的文件称为目录文件,保存在外存,查找文件时调入内存。
在树形目录结构中,一个文件的全名包括从根目录开始到文件为止,通路上遇到的所有子目录路径,又称为路径名
各子目录名之间用正斜线/(Unix)或反斜线\(win)隔开
一个硬盘分区可以组织成一颗子树,每棵子树可以对应于一个逻辑盘符(Win),也可以把众多子树嫁接成一棵大树(Unix)
 
Linux中,FCB分为文件名和索引节点inode,索引结点位置由inode号标识,放在磁盘inode区。
目录项仅包含文件名和inode号,称为基本目录项
目录文件永不为空,创建时自动包含两个特殊目录项:.指出自身inode入口,..指出父目录项的inode入口..
因此,新建目录时,目录文件自身inode中的i_nlink为2,上层目录文件inode中的i_nlink增加1
根目录的.和..都指向同一个inode
目录文件基本功能就是把文件名转换成此文件信息在磁盘上的物理位置。根据用户提供的文件路径名,采用顺序查找法从根目录或当前工作目录逐级查找路径名中的各子目录名,用其作为索引,逐层搜索各级目录文件,最终找到相匹配的文件目录项。
也可以采用一些优化办法加快查找目录的速度:
  • 目录表项是按键的顺序编排,则可以采用二分查找法
  • 采用杂凑法,把每个文件名经过变换函数变换成唯一的目录表表项
树型目录结构存在的一个问题是:当一个文件经过许多目录节点时,使用很不方便;系统在沿路径查找目录时,往往要多次访问文件存储器,使访问速度大大减慢。若把所有文件的目录都复制到主存,访问速度是加快了,但又增加了主存的开销。
一种有效办法是把常用和正在使用的那些文件目录复制进主存,这样,既不增加太多的主存开销,又可明显减少目录查找时间
系统可以为每个用户进程建立一张文件描述符表,当用户使用一个文件之前,先通过“打开”操作,把该文件有关目录信息复制到指定主存区域,有关信息填入文件描述符表,以建立用户进程和该文件索引的联系。当不再使用该文件时,使用“关闭”,切断用户进程和这个文件的联系,同时,若该目录已被修改过,则应更新辅存中对应的目录文件。
 
Linux根目录下有:
/bin:可执行文件(命令),所有用户均有权限
/boot:引导启动所需的东西,grub引导程序,vmlinuz文件(可引导的、压缩的linux内核)
/dev:一切装置和接口设备,如sd[a-z(分区号)]为SATA、SCSI、SAS、USB接口的硬盘,hd[a-z]为IDE设备
/home:系统默认的用户家目录,每一个用户有一个文件夹
             ~代表当前用户家目录,而~username代表某一个用户的家目录
/root:系统管理员用户的家目录,进入单人维护模式仅挂载家目录时,该目录就能拥有root的家目录
/usr/lib:库文件,一些程序使用的动态函式库,尤其是/lib/modules放置核心相关模块(驱动程序)
/media:可移除装置如软盘、光盘
/opt:第三方大型软件
/tmp:一般程序或正在执行的程序放置临时文件的地方
/mnt:挂载目录
/etc:几乎所有配置文件,一般使用者可查询但只有root有权限修改
/sbin:开机、修复、还原系统所需要的指令,root用户才能执行
/proc:系统实时信息,一个虚拟的文件系统,每次启动重新创建,放置的数据实际在内存中
            如cpuinfo、meminfo、version
/var       /var/lib/ :各服务产生的数据,如MYSQL的数据库默认写入/var/lib/mysql/
             /var/log/:系统日志,有dmesg(核心启动日志)        xferlog  (FTP服务用日志)  
                                                      messages(系统报错日志)    secure(安全日志)
                                                      maillog(邮件系统日志)         wtmp(登录日志)
                                                      cron(定制任务日志)
 
使用mkdir命令创建目录
[qlw@localhost ~]$mkdir -p test1/test2/test3/test4
#有了-p的选项可以自行建立多层目录
[qlw@localhost ~]$mkdir -m  test2
#有了-m的选项可以配置权限,否则系统会使用默认属性
rmdir 删除空目录
-p 连同上层空目录一起删除

最新文章

  1. 轻松实现localStorage本地存储
  2. mysql表名忽略大小写问题记录
  3. UML: 活动图
  4. iproute-2.6.32
  5. [Serializable]的应用--注册码的生成,加密和验证
  6. iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
  7. (Map)利用Map,完成下面的功能:  从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。  附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录 (Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1
  8. SQL Server死锁日志各字段含义
  9. Android 它们的定义View (一)
  10. mumu血压计母亲节“拼团”盛大开幕,百度和厂家创造一个双赢的局面
  11. android使用ffmpeg
  12. iOS Socket第三方开源类库 ----AsyncSocket 分类: ios相关 ios技术 2015-03-11 22:14 59人阅读 评论(0) 收藏
  13. js小知识点
  14. Volley 图片加载相关源码解析
  15. 摹客iDoc「标注」新玩法!这些细节让你爱不释手(201903-2版本更新)
  16. C++学习总结(2)
  17. java项目发布
  18. C++Primer,C++标准IO库阅读心得
  19. [Web 前端] 前端频道之团队维护、聚合、订阅
  20. Java类的成员初始化顺序

热门文章

  1. manual for emacs markdown-mode(English)
  2. PHP lstat() 函数
  3. C、C++、boost、Qt在嵌入式系统开发中的使用
  4. 如何设置远程MongoDB!
  5. 这几个冷门却实用的 Python 库,我爱了!
  6. Django REST framework 单元测试
  7. DIFF算法浅析(三)在react中的实现
  8. linux常用命令(一)软件操作命令
  9. 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
  10. C#LeetCode刷题之#671-二叉树中第二小的节点(Second Minimum Node In a Binary Tree)