前言
在文件系统的底层中,有一个叫inode的数据集来描述文件的元信息,包括在磁盘上的物理位置、读写权限等。
.---------------> ! data ! ! data ! etc
/ +------+ !------+
! permbits, etc ! data addresses !
+------------inode---------------+
而我们日常看到的文件名 其实就是指向其inode信息的指针
.--------------> ! permbits, etc ! addresses !
/ +---------inode-------------+
! filename ! inode # !
+--------------------+
我们也可以通过命令进行查看,前面的就是inode number
hardlink
可以有多个文件名指向同一个inode number, 那么这些文件就是被hard link 在一起的。
而且删除、移动、重命名其中一个文件 对其他hardlink的文件没有一点影响。
当你删除了一个文件的时候其实就是删除了指向底层inode的其中一个指针,只有当所有指向该inode的指针全部被删除之后,该inode才会被移除
! filename ! inode # !
+--------------------+
\
>--------------> ! permbits, etc ! addresses !
/ +---------inode-------------+
! othername ! inode # !
+---------------------+
symlink
俗称软链,是一种特殊的文件类型,包含一个字符串,操作系统会将其解析成指向某个文件/文件夹的绝对/相对路径,在打开的时候就会重定向到源文件。
- 当软链被移除的时候,源文件不会受影响
- 源文件被移除、更名、移动 也不会移除相应软链,只不过该软链会指向一个不复存在的文件
! filename ! inode # !
+--------------------+
\
.-------> ! permbits, etc ! addresses !
+---------inode-------------+
/
/
/
.----------------------------------------------'
(
'--> !"/path/to/some/other/file"!
+---------data-------------+
/ }
.~ ~ ~ ~ ~ ~ ~ }-- (redirected at open() time)
( }
'~~> ! filename ! inode # !
+--------------------+
\
'------------> ! permbits, etc ! addresses !
+---------inode-------------+
/
/
.----------------------------------------------------'
(
'-> ! data ! ! data ! etc.
+------+ +------+
实战操作
hardlink
可以看到hardlink.txt的inode值 和test.txt的完全一致
而且当你修改其中一个文件的内容的时候,其它的文件也会相应改变,因为他们引用的文件内容(inode)相同
symlink
我们可以看到symlink出来的文件虽然和test.txt拥有相同的内容,但是inode number不同,而且文件权限也不同
当我们删除了test.txt文件之后,symlink的文件就会找不到对应的文件