背景知识
Linux系统中的文件包含两个部分:用户数据(user data)与元数据(metadata)。用户数据存放文件的内容,元数据则存储文件的属性。
元数据中的inode号是文件的唯一标识, 而不是文件名。其实,一个inode号对应一个或多个文件名,这就是硬链接(hard link)。因此,
硬链接可以理解为同一个文件的多个别名。而软链接(soft link)则是文件的用户数据存放指向另一个文件的指针,它拥有自己的inode号。软链接与Windows系统的快捷方式很相似。
如何创建
- 创建软链接(soft link):
ln -s file softfile
- 创建硬链接(hard link):
ln file hardfile
orlink file hardfile
底层实现
- 软链接 : 文件类型为符号链接,文件中存放有一个指向原文件路径的指针
- 硬链接 : 下为VFS中的inode结构体
创建硬链接后,i_nlink加1struct inode{ //... const struct inode_operations *i_op; //索引节点操作 unsigned long i_ino; //索引节点号 atomic_t i_count; //引用计数器 unsigned int i_nlink; //硬链接数目 }
区别与联系(简述)
- 软链接是新建一个文件,硬链接是为文件建一个别名。
- 软链接可以跨文件系统,硬链接不可以。
- 软链接可以对目录操作,硬链接不可以。
- 删除原文件,软链接失效,硬链接不影响。