软链接:
ln -s 源路径 目标路径
特点:
1.就相当于windows中的快捷方式;
2.删除链接文件,源文件无影响;
3.删除源文件,链接文件失效;
4.修改源文件/链接文件,内容都变;
5.源文件及目标文件inode号不一样;
6.软链接是指向文件名的。
硬链接:
ln 源路径 目标路径
特点:
1.删除链接文件,源文件无影响;
3.删除源文件,链接文件无影响;
4.修改源文件/链接文件,内容都变;
5.源文件及目标文件inode号一样;
6.硬链接文件表面看起来是个普通文件。
什么原理?
首先得明白每一个文件都有一个inode号,一个inode号会对应一个具体的block块存储空间;
需要注意的是:软链接文件的b.txt的inode号是指向文件名a.txt的
为什么软链接可以跨文件系统,硬链接不行?
一个分区对应一个文件系统,软链接指向的是文件名,不同分区(文件系统)下可以使用相同的文件名,例如:
/boot 在分区 /dev/sda1 在文件夹/boot新建a.txt touch /boot/a.txt
/test 在分区 /dev/sdb3 在文件夹/test 新建a.txt touch /test/a.txt
ln -s /boot/a.txt /test/a.txt 完全没问题 /test/a.txt 就是 /boot/a.txt的软链接,即使两个文件重名了,因为这个两个文件根本就不在一个分区上。就像我身上长的东西和你身上长的东西就不是一个东西。
你现在往/test/a.txt里面写东西,echo '123' > /test/a.txt 实际内容被写到 /boot/a.txt里面去了。始终要注意软链接是指向文件名的,本质上是要找到一个inode然后对应到一个block块。
硬链接的本质是两个文件同时指向同一个inode号,来找到同一个block块,你现在想跨分区去建,即使你的inode号一样,不能分区的相同inode号其实是毫不相干的。
你可以对目录做硬链接软链接,目录也是文件。