Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59453
  • 博文数量: 32
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-28 21:50
文章分类

全部博文(32)

文章存档

2011年(1)

2010年(6)

2009年(25)

我的朋友

分类: LINUX

2009-11-25 21:47:27

  • Unix将存储在磁盘中的数据组织成文件系统。文件系统是文件和目录的集合。目录是名字和inode num的列表。目录中的每一个入口指向一个文件或目录的inode。目录包含指向父目录和子目录的入口。

  • Unix文件系统包含3个主要部分:超级块,inode表和数据区域。超级块存放文件系统本身的结构信息,如每个区域的大小,未被使用的磁盘块的信息。文件内容存储在数据块。文件属性存储在inode。表中inode的位置称为文件的i-节点号,以hash对应。i-节点号是文件的惟一标识(相对于同一个文件系统)。

  • 创建一个新文件的4个主要操作:
    (1)存储文件属性:先找到一个空的i-节点,将文件信息记录其中
    (2)存储数据,分配磁盘块
    (3)记录分配情况,在i-节点记录已分配的磁盘块序列
    (4)添加文件名到目录,将入口(inode num,filename)添加到目录文件

  • 读取文件数据的工作原理
    (1)在目录中寻找文件名
    (2)使用inode num 定位inode,并读取其内容
    (3)访问存储文件内容的数据块
    所有从文件读取的命令,例如cat,cp,more,who等,都是将文件名传给open来访问文件内容,对open的每次调用都是先在目录中寻找文件名,然后根据目录中的i-节点号获得文件的属性,最终找到文件的内容

  • 文件是由inode和数据块组成,文件名只是用来方便用户识别
    所有对文件的操作都是要通过inode
    “文件在目录中”的真正含义是:目录包含的是文件的引用,每个引用被称为链接。链接是对inode的引用。
    在Unix的文件系统中,文件没有文件名,但是链接有名字。

  • 相同的i-节点号可能以不同的名字在若干个目录中出现。每个入口(inode号,文件名)被称为文件的硬链接hard links符号链接是通过文件名引用文件,而不是i-节点号。

    对一个文件,硬链接的数目就是它的链接数,当链接数为0时,文件也就被删除了,一个目录只能有一个硬链接,否则会搞不清楚父目录是哪个,硬链接也不能引用不同文件系统的文件与目录

    符号链接可以指向目录,也可以跨越文件系统,符号链接是个新文件,跟它所引用的文件的inode号是不同的

    系统调用link和unlink来创建和删除硬链接
    系统调用symlink用于创建一个符号链接,系统调用readlink用于获取原始文件的名字,lstat用于获取原始文件的信息。

  • 若干个文件系统的目录树可被整合成一棵树。内核将一个文件系统的目录链接到另一个文件系统的根的操作称为装载(mounting)。

  • Unix包含若干种系统调用,允许程序员进行创建(mkdir)和删除目录(rmdir),复制链接(link),删除链接(unlink),改变链接(rename)和分离其它文件系统(umount)的操作。

  • 与目录树相关的命令和系统调用
    (1)命令mkdir:创建新的目录
       系统调用mkdir()
    (2)命令rmdir:删除目录,此目录须为空
       系统调用rmdir()
    (3)命令rm:从一个目录文件删除一个记录
       系统调用unlink()   //不能用来删除目录
    (4)命令ln:创建一个文件的新链接
       系统调用link()     //不能被用来生成目录的新链接
    (5)命令mv:改变文件和目录的名字或位置
       系统调用rename()   //重命名或删除一个链接
       rename的基本逻辑是:
       复制链接至新的名字/位置(使用link)
       删除原来的链接        (使用unlink)
    (6)命令cd:改变进程的当前目录
       cd对进程产生影响,但是不影响目录,Unix上的进程有一个存放当前目 录i-节点号的变量。从一个目录进入另一个目录只是改变那个变量的值。
       系统调用chdir()

  • 命令pwd的工作过程
    pwd用来显示到达当前目录的路径
    追踪链接,读取目录,一个目录接着一个目录地沿着树向上追踪,每步查看
    "."的i-节点号,然后在父目录中查找该i-节点号的名字,直到到达树的顶端
    算法过程:
    (1)得到"."的i-节点号,称其为n(使用stat)
    (2)chdir ..(使用chdir)
    (3)找到i-节点号n链接的名字(opendir,readdir,closedir)
    重复(直到到达树的顶端)

  • 本章出现的系统调用
    目录相关:mkdir,rmdir,chdir
    链接相关:link,unlink,rename,symlink

  • 本章关于目录的命令
    ls -R     //列出目录及子目录
    chmod -R  //修改子目录所有文件的许可权限
    du        //指定目录及其子目录下所有文件占用硬盘中数据块的总数
    find      //检索符合条件的文件和目录
    mkdir
    rmdir
    rm
    ln        //创建硬链接(只限文件)
    mv
    cd
    pwd       //当前目录的path
阅读(337) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~