原文摘自:what-is-the-difference-between-a-hard-link-and-a-symbolic-link
一图胜千言。
一例胜百图。
创建两个新文件:
touch blah1
touch blah2
向里面添加点内容
echo "Cat" > blah1
echo "Dog" > blah2
查看添加的内容:
cat blah1; cat blah2
Cat
Dog
创建硬链接和软链接
ln blah1 blah1-hard
ln -s blah2 blah2-soft
查看下我们创建的东西
ls -l
blah1
blah1-hard
blah2
blah2-soft -> blah2
修改blah1的名字没有什么影响
mv blah1 blah1-new
cat blah1-hard
Cat
blah1-hard指向的是inode,所以文件的内容没有变化。
mv blah2 blah2-new
ls blah-soft
blah2-soft
cat blah2-soft
cat: blah-soft: No such file or directory
文件的内容没有办法找到,因为软链接是指向的名字,而名字已经被修改了,所以找不到对应的文件。
因此:
blah1被删除了,但是blah1-hard仍然拥有内容。
blah2被删除了,但是blah2-soft是一个指向不存在文件的链接。
补充:
硬链接不能跨越文件系统。 为什么? 硬链接共享相同的inode - 它们指向硬件位置,而不是目录树。 这意味着如果你试图在ext3和ext4之间建立硬连接,那么你会遇到一些问题 - 这些文件系统是不同的,所以他们不能共享inode。