技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> unix文件系统:链接与文件

unix文件系统:链接与文件

浏览:2723次  出处信息

    说明:以下是在读小骆驼书《Perl 语言入门》第十二章 目录操作 中“链接与文件”一节(P189-193)中的读书笔记。

    目录是一种由系统管理的特殊文件,它基本上是一份列表。

    每份文件都会存储在一个编好号的inode里,我们可以把它想象成磁盘上的门牌号码。

    ls -l命令,硬链接的数量会显示在权限标记的右边。

    每个目录都会有 . 这个项目,它会指回目录本身的inode。所以任何目录的链接数都至少是2.一般来说,目录的链接数等于子目录的数量加上2.

    链接分硬链接和软链接(又叫符号链接)。

    【硬链接】

    硬链接的本质是:不同的文件名指向同样的inode,文件事实上只有一份。

    建立硬链接:

    shell命令:ln file1 file2

    perl命令:link file1 file2

    此时,file1和file2指向同一个inode(假定inode为12345),文件事实上只有1份,修改file1的时候同时会修改file2(因为只有一个文件)。但是要注意用文本编辑器进行修改的时候,可能会导致变成两份文件,视文本编辑器的原理而定。

    当删除file1的时候,inode 12345的链接数减一,file2并不会删除。只删除file2的时候,也是一样原理。

    当该inode的链接数等于0的时候,数据就丢失了。

    因为硬链接的性质,所以在某种程度上可以防止数据的流失(只要inode的链接数大于0,数据就还在)。

    perl的rename函数可以将文件搬移到别的目录里,但是来源和目的地必须在同一个文件系统上(同一个磁盘上),因为rename的原理是基于文件的 inode 列表。如果跨磁盘搬移文件,那inode里的数据就必须重新部署。

    目录不能建立硬链接(从文件系统基于inode的原理很容易理解为什么。如果可以的话,文件系统那就乱套了,而且整个系统的性能不知道要低成什么样了)

    【软链接】

    软链接又叫符号链接。它是目录里的一种特殊项目,用来告诉系统到别的方向找找看。

    建立软链接:

    shell命令:ln -s fileA fileB

    perl命令:symlink "fileA" "fileB"

    假定fileA的inode为34567,inode的链接数为1.那么在建立软链接之后,inode的链接数仍然为1,保持不变。

    符号链接只是告诉系统:如果你是来找fileB的,请到fileA那边去。仅此而已。

    如果删除fileA,那么该inode的链接数就减到0,则文件内容永久丢失了。

    目录可以建立软链接。

    perl里面使用readlink可以取得软链接所指向的位置。

    硬链接和软链接都非常有用。但unix之外的很多系统对此两者都不支持。

    这两种链接都可以用unlink移除,unlink只是从目录里移除该文件名的链接项目,将它的链接数递减,如有需要再释放inode。这也是为什么perl和php中的文件删除函数取名为 unlink 的原因。

建议继续学习:

  1. 海量小文件存储    (阅读:7377)
  2. 其实,文件也可以truncate    (阅读:7252)
  3. 关于Linux的文件系统cache    (阅读:4642)
  4. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4313)
  5. 修改系统最大文件句柄数    (阅读:4122)
  6. PHP:从一个大文件第N行开始读取M行    (阅读:3799)
  7. C/C++循环获取文件中的每行数据(别以为很简单!)    (阅读:3743)
  8. linux file命令是如何识别文件的类型的    (阅读:3727)
  9. 打开多个文件:linux ulimit max open files    (阅读:3493)
  10. shell文件存在相关判断参数    (阅读:3485)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1