Linux硬链接和软链接

来源:互联网 发布:近在咫尺柳情和方知 编辑:程序博客网 时间:2024/06/06 03:52

unlink()

Linux每个文件有自己的引用计数和链接计数,存放在inode结构体中。
unlink(char *pathname)函数会对pathname路径对应文件的链接计数减1,如果此时链接计数变为0,并且此文件的引用计数也为0,此文件内容就会被删除。
当open一个存在的文件时,文件的引用计数会加1,close一个文件时,引用计数会减1,但都不影响文件的链接计数。只有创建一个文件时,文件的引用计数会初始为1,调用link函数会为一个文件创建一个硬链接,该文件的链接计数相应加1。调用symlink函数创建一个软链接,不影响链接计数。

硬链接和软链接的区别

硬链接是有着相同inode号仅文件名不同的文件,因此硬链接存在以下几点特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的inode号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
至于为什么硬链接不能对目录创建,是为了防止目录出现循换,这个网站的例子举得很好:http://ask.apelearn.com/question/5565。

原创粉丝点击