链接在另一个目录中时,符号链接无法正常工作?

时间:2011-12-22 09:41:46

标签: bash symlink

哇,我以前从未真正使用过符号链接,但这真是令人难以置信:

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:没有这样的文件或目录”。

3 个答案:

答案 0 :(得分:18)

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


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

变化:

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

答案 1 :(得分:5)

您还可以使用相对路径来实现此目的。 喜欢

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

这将有效

当您打开它试图从副本目录引用该文件的符号链接时,由于该链接不存在,您将收到该错误。

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

答案 2 :(得分:1)

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

假设您的应用程序目录是/ home / ubuntu / my_app,一旦启动应用程序,它将在my_app目录中生成一个日志目录。现在最终目标是将磁盘使用负担转移到已安装的目录,并且目前我们的app目录中没有我们的日志目录。所以请继续并按照以下步骤操作:

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

这将首先在已安装部分中创建名为log的目录,并将应用程序日志映射到此目录。您在应用程序日志文件夹中添加的任何文件都将自动链接到已安装的目录,因此您可以从原始日志目录或已安装的文件夹中随处读取这些文件。