linux的unlink()、硬链接、软链接 硬链接和软链接的区别

硬链接软链接是Linux文件系统很重要的概念

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

硬链接和软链接的区别

硬链接是有着相同inode号仅文件名不同的文件,因此硬链接存在以下几点特性:

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的inode号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制: