命令
- 参数
-s
表示软链接,没有则是硬链接ln [-s] <原文件名> <链接名>
软链接
-
先创建一个文件test.txt
$ touch test.txt $ ls -lti total 0 272851 -rw-rw-r-- 1 deploy deploy 0 Jul 9 10:54 test.txt
$ vi test.txt hello world! test1 test2 ~ ~ ~ :wq
-
为这个文件创建两个软链接
$ ln -s ./test.txt soft-test1.txt $ ln -s ./test.txt soft-test2.txt $ ls -lti total 0 272853 lrwxrwxrwx 1 deploy deploy 10 Jul 9 10:59 soft-test2.txt -> ./test.txt 272852 lrwxrwxrwx 1 deploy deploy 10 Jul 9 10:57 soft-test1.txt -> ./test.txt 272851 -rw-rw-r-- 1 deploy deploy 0 Jul 9 10:54 test.txt
可以发现这两个软链接的Inode值(第一列)不一样,分别为:272852和272853,
如果编辑这两个软链接文件,原文件test.txt也会变化,相当于直接编辑test.txt,
如果删除或者重命名原文件,则软链接也无效了,软链接相当于Windows的快捷方式,原文件删除了或路径变了,快捷方式也就无效了,
但是删除软链接,不会影响原文件,只是删除快捷方式而已。
硬链接
-
创建两个硬链接
$ ln ./test.txt hard-test1.txt $ ln ./test.txt hard-test2.txt
-
查看文件列表:
ll -i
- 发现两个硬链接的Inode的值与原文件相同,都是272851,
- 但是后面的
链接数
由1变为3了,那是因为创建硬链接时不会生成新的Inode,但是Inode对应的链接数
会累加 - 与软链接一样,修改硬链接时,原文件也会发生变化,因为它们对应同一个文件
-
删除硬链接或原文件
rm test.txt
ll -i
rm hard-test1.txt
ll -i
删除硬链接或者原文件后,只是
链接数
减1了,文件还存在,可以用剩下的硬链接继续编辑文件
当然如果把原文件和其所有的硬链接删除,文件肯定是被删除了的$ vi hard-test2.txt $ vi hard-test2.txt hello world! test1 test2 ~ ~ ~
总结
-
Linux系统的每一个文件都有一个Inode,Inode是Linux文件的唯一标识,而Windows系统文件的唯一标识是文件名(包含路径),因此Linux文件在使用时(运行/编辑/读取等)可以进行重命名,而Windows则不行(因为文件名是唯一标识,文件是根据文件名打开的,重命名之后文件的标识就改变了)。
-
硬链接不创建新的文件,只是将原文件Inode的
链接数
加1 ,删除硬链接或原文件时链接数
减1 ,硬链接和原文件的Inode映射到同一个数据块,性质是一样的。 -
软链接会创建一个新的文件(文件系统生成一个新的Inode),这个文件的内容是存储 “指向的原文件路径” 。
-
目录不能创建硬链接,只有文件能创建硬链接,目录和文件都可以创建软链接
扫描二维码关注公众号,回复: 11160156 查看本文章$ mkdir dirtest $ ln ./dirtest hard-dirtest ln: ‘./dirtest’: hard link not allowed for directory