不管是硬链接还是软链接,实践中,一般都是建立在跟原文件不同的目录中,以方便使用。这样,在使用ln命令时,就存在一个路径的表达问题。
虽然也可以建立在原文件所在目录中,但这样做的实际意义不大。
前面说到,建立硬链接时,不管使用绝对路径还是相对路径,都没有问题。但在建立软件时,对原文件使用相对路径要特别小心,最好使用绝对路径。
用绝对路径的缺点是,有些需要写得太多。
但用相对路径又容易出错。如果我们要用相对路径来写,应该怎么办呢?
原则是:原文件前的相对路径,要参照软链接名的位置来写。
下面举一个例子来说明。
这个例子中,目录test下有两个子目录,dir1,dir2。
test中有个文本文件fun。
我们通过三个命令,建立它的三个软链接。
第一个fun-sym就建立在test中,使用命令:
ln -s fun fun-sym
这是最简单的情形。
第二个,是在test的子目录dir1下建立软链接fun-sym:
ln -s ../fun dir1/fun-sym
注意它的写法,为什么第一个参数要写成../fun而不是fun?
这是因为,我们要建立test的子目录中的软链接,而原文件fun在这个子目录的上级目录中。../就表达了原文件fun对于要建立的软链接的相对位置——在其上级目录中。注意,..表示上级目录。这样写就没有问题。
用同样的方法,我们建立在fun在dir2子目录中的软链接。
例子中,如果要建立在dir1中的硬链接fun-hard,应该这样写:
ln fun dir1/fun-hard
比较建立软链接的命令:
ln -s ../fun dir1/fun-sym
就可以看出两者的区别。
这里,建立在dir1中的硬链接不能像建立在dir1中的软链接那样写:ln ../fun dir1/fun-hard
写成这样,命令就不能执行。