Linux的硬链接和软链接
要弄明白硬链接和软链接,先要弄懂Linux中的inode
这个东西。当划分磁盘分区并格式化时,整个分区会被划分为两个部分,即inode区和data block(实际数据存放在数据区域中)。Inode里面存储了文件的很多重要参数,其中唯一标识称作 Inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限、数据所在block号等信息。 需要访问这个文件的时候必须先找到并读取这个文件的inode.
1 从概念上理解
【硬链接】
通过inode来进行链接,Linux中,多个文件名指向同一个inode是存在的。硬链接的作用是允许一个文件有多个有效路径名,这样可以防止“误删”功能。因为文件真正删除的条件是与之相关的所有硬链接文件均被删除!
【软链接】
也称符号链接,类似于windows的快捷方式。
2 通过实践来理解:
hh@hh-virtual-machine:~$ mkdir ff
hh@hh-virtual-machine:~$ cd ff
hh@hh-virtual-machine:~/ff$ touch f1 创建测试文件f1
hh@hh-virtual-machine:~/ff$ ln f1 f2 创建f1的一个硬链接文件f2
hh@hh-virtual-machine:~/ff$ ln -s f1 f3创建f1的符号链接文件f3
hh@hh-virtual-machine:~/ff$ ls -li -i参数显示文件的inode节点信息
总用量 0
931048 -rw-rw-r-- 2 hh hh 0 11月 7 19:21 f1
931048 -rw-rw-r-- 2 hh hh 0 11月 7 19:21 f2
931097 lrwxrwxrwx 1 hh hh 2 11月 7 19:21 f3 -> f1
从结果来看,硬链接文件f2与原文件f1的inode节点相同,均为931048,符号链接文件inode节点为931097.
hh@hh-virtual-machine:~/ff$ echo I am >>f1
hh@hh-virtual-machine:~/ff$ cat f1
I am
hh@hh-virtual-machine:~/ff$ cat f2
I am
hh@hh-virtual-machine:~/ff$ cat f3
I am
hh@hh-virtual-machine:~/ff$ rm -f f1
hh@hh-virtual-machine:~/ff$ cat f2
I am
hh@hh-virtual-machine:~/ff$ cat f3
cat: f3: 没有那个文件或目录
通过测试发现,删除原始文件f1后,硬链接f2不受影响,但是符号链接f3没有了。
3 总结
- 删除符号链接f3,对f1,f2无影响
- 删除硬链接f2,对f1,f3无影响
- 删除f1,对f2无影响,但f3失效
- 同时删除f1和f2,文件才会真正删除!