2011-12-22 57 views
6

哇,我从来没有真正使用符号连接之前多,但是这真的是令人难以置信:当链接在另一个目录中时,符号链接不工作?

bash-3.2$ echo "weird" > original.txt 
bash-3.2$ mkdir originals 
bash-3.2$ mv original.txt originals/ 
bash-3.2$ cat originals/original.txt 
weird 
bash-3.2$ mkdir copies 
bash-3.2$ ln -s originals/original.txt copies/copy.txt 
bash-3.2$ cat copies/copy.txt 
cat: copies/copy.txt: No such file or directory 
bash-3.2$ ls copies/copy.txt 
copies/copy.txt 
bash-3.2$ ls -l copies/copy.txt 
lrwxr-xr-x 1 zach staff 22 Dec 22 01:23 copies/copy.txt -> originals/original.txt 
bash-3.2$ cat originals/original.txt 
weird 
bash-3.2$ cat copies/copy.txt 
cat: copies/copy.txt: No such file or directory 
bash-3.2$ cd copies/ 
bash-3.2$ cat copy.txt 
cat: copy.txt: No such file or directory 

为什么我不能在猫的拷贝目录符号链接?

如果我从拷贝/里面创建符号链接,我可以很好地捕捉它。如果我在当前目录中创建符号链接,我也可以很好地捕捉它。如果我在当前目录中创建符号链接,然后将其移动到拷贝/,我会得到“copies/copy.txt:没有这样的文件或目录”。

回答

15

如果您创建了一个符号链接的相对路径,它会将其存储为相对符号链接。符号链接与链接所在的位置相关,而不是其创建或打开的位置。


请使用相对于链接的绝对路径或路径。

变化:

ln -s originals/original.txt copies/copy.txt 

要:

# absolute 
ln -s /path/to/originals/original.txt copies/copy.txt 

# relative 
cd copies 
ln -s ../originals/original.txt copy.txt 
+0

您不需要使用绝对路径。只要你用一个圆点(这意味着'你当前的目录路径')开始你的路径,你应该是好的。 – adamwong246 2013-07-24 23:47:06

5

您也可以使用相对路径来实现这一目标。 像

cd copies 
ln -s ../originals/original.txt copy.txt 

这将工作

当你打开它试图指从拷贝目录中的文件的符号链接,因为不存在你所得到的错误。

当您使用相对或绝对路径时,此问题将得到解决。

+0

当编写一个制作符号链接的脚本时,有没有什么办法可以指定从哪个目录创建相对路径? – user225643 2011-12-22 10:10:42

+0

用脚本你应该去绝对路径。有一个固定的目录包含符号链接,然后创建与目录中的任何文件有关的链接 – Raghuram 2011-12-22 10:12:27

+0

所有相关的符号链接都与链接所在的目录有关。创建链接时不需要指向现有文件如你所见)。相对链接或绝对的选择不应该在制作链接的链接上进行,但是你想要一个相对链接还是绝对链接。请记住,在创建相对链接之后移动相对链接会更改它指向的文件的绝对路径。 请参阅此处进行转换:http://stackoverflow.com/questions/2564634/bash-convert-absolute-path-into-relative-path-given-a-current-directory – 2011-12-22 16:54:52

1

考虑一个例子,您希望将您的应用程序日志符号链接到其他地方,这可能是一个目录,它被挂载到一个辅助目录,其大小不会影响您的服务器停止工作。现在挂载的目录将作为你的目标,你应该创建一个符号链接到你的日志目录的这个目录。

假设你的应用程序目录是/ home/ubuntu/my_app,一旦你启动你的应用程序,它将在你的my_app目录中生成一个日志目录。现在最终目标是将磁盘使用负担转移到挂载目录,并且目前我们的应用程序目录中没有我们的日志目录。所以先走一步,按照以下步骤:

mkdir /path_to_mounted_directory/log 
ln -s /path_to_mounted_directory/log /home/ubuntu/my_app_log 

这将首先创建一个名为日志目录中安装段,将您的应用程序日志映射到这个目录。您在应用程序日志文件夹中添加的任何文件都将自动链接到挂载的目录,因此您可以从原始日志目录或挂载的文件夹中随时随地阅读这些文件。

相关问题