unix文件系统:链接与文件
说明:以下是在读小骆驼书《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 的原因。
建议继续学习:
- 海量小文件存储 (阅读:7558)
- 其实,文件也可以truncate (阅读:7399)
- 关于Linux的文件系统cache (阅读:4792)
- Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (阅读:4439)
- 修改系统最大文件句柄数 (阅读:4279)
- PHP:从一个大文件第N行开始读取M行 (阅读:3941)
- linux file命令是如何识别文件的类型的 (阅读:3937)
- C/C++循环获取文件中的每行数据(别以为很简单!) (阅读:3880)
- 打开多个文件:linux ulimit max open files (阅读:3556)
- shell文件存在相关判断参数 (阅读:3555)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:rethink 来源: 博客园-rethink log
- 标签: 文件 链接
- 发布时间:2009-10-16 12:10:58
- [52] IOS安全–浅谈关于IOS加固的几种方法
- [52] 图书馆的世界纪录
- [51] 如何拿下简短的域名
- [50] android 开发入门
- [49] Go Reflect 性能
- [49] Oracle MTS模式下 进程地址与会话信
- [47] 【社会化设计】自我(self)部分――欢迎区
- [45] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑