首先说一下linux中的文件由什么组成:user data(用户数据)+ meta data(元数据)
用户数据即文件数据块,数据块是记录文件真实内容的地方
元数据包含了文件的附加属性,比如索引节点号inode、所有者、创建时间、文件大小等。inode才是文件的唯一标识,而非文件名。
通过文件名打开文件:
使用ls -i或者stat命令可以查看inode号。
# ls -li testfile.txt
25869085 -rw-r--r-- 2 root admin 27 7 8 17:39 testfile.txt
# stat testfile.txt
File: `"testfile.txt"
Size: 9990512 Blocks: 19520 IO Block: 4096 regular file
Device: 807h/2055d Inode: 2485677 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ harris) Gid: ( 1000/ harris)
...
硬链接:与普通文件没什么不同,指向同一个inode,即同一个文件,删除时只有当链接计数器为0才会真正删除
特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软连接:软连接的数据块保存的是另一个代表文件的绝对路径。软链接文件其实也是个普通文件,只是它的数据块内容有带你特殊。
特性:
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
硬链接和软链接的访问:
本文部分内容转自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/