创建一个普通的文本文件及其软链接和硬链接
# 一个文本文件abc.txt
echo 'hello world' > abc.txt
# 创建软链接
ln -s abc.txt s_abc.txt
# 创建硬链接
ln abc.txt h_agc.txt
查看三个文件的详细信息
[root@Charramma ~]# ll -i
131419 -rw-r--r-- 2 root root 12 Sep 6 21:54 abc.txt
131419 -rw-r--r-- 2 root root 12 Sep 6 21:54 h_abc.txt
131421 lrwxrwxrwx 1 root root 7 Sep 6 21:55 s_abc.txt -> abc.txt
可以看出几点:
- 硬链接和源文件只有文件名上的不同,连inode都是一样的。这里注意一下,我是先创建的软链接,后创建的硬链接,但是软链接的创建时间是实际创建时间,硬链接的创建时间是源文件的创建时间。
- 软链接的文件类型是l(链接文件);硬链接的文件类型是普通文本类型。
- 软链接是和源文件完全不同的文件,权限位是777,不过访问软链接最后看的还是源文件的权限位。
删除源文件
[root@Charramma ~]# rm -f abc.txt
[root@Charramma ~]# cat h_abc.txt
hello world
[root@Charramma ~]# cat s_abc.txt
cat: s_abc.txt: No such file or directory
[root@Charramma ~]#
软链接已经不可访问了,硬链接不受影响。
重新创建abc.txt
[root@Charramma ~]# echo 'HELLO WORLD' > abc.txt
[root@Charramma ~]# cat s_abc.txt
HELLO WORLD
[root@Charramma ~]# cat h_abc.txt
hello world
[root@Charramma ~]#
软链接可以访问了,内容是新的abc.txt文件内容;而硬链接的内容还是之前的内容。
总结:
- 硬链接和原文件只是目录项不同,而inode和block都是一样的内容。软链接是全新的目录项,全新的inode和block,只是block里的内容是链接的文件名。
- 删除原文件不会影响硬链接,但软链接会失效
- 软链接只认文件名,硬链接认inode号。