我在该目录中安装了一个应用程序,/home/appuser/app/
其中有一个confs
用于配置文件的单独目录,该目录符号链接到../app-confs
,如下所示:
lrwxrwxrwx 1 appuser appuser 19 Mar 25 15:22 confs -> ../app-confs/
看起来不错,运行也不错。
现在,我希望其他用户从同一目录(/home/appuser/app/
)使用该应用程序,这样就可以只在一个地方进行更新,但使用不同的配置目录。
/home/user-a/
因此我在中创建了一个符号链接。然后在 中/home/appuser/app/
创建了一个新的 configs 目录。confs
/home/user-a/
当列表时/home/user-a/
,我确实看到了
drwxr-xr-x 8 user-a user-a 4096 Apr 29 10:57 app
drwxr-xr-x 8 user-a user-a 4096 Apr 29 10:57 app-confs
/home/user-a/app
我看到
...
lrwxrwxrwx 1 appuser appuser 19 Mar 25 15:22 confs -> ../app-confs/
...
但是当我列出时/home/user-a/confs/
,我看到的是来自/home/appuser/confs/
原始配置文件的文件,而不是相对配置文件的文件。
有没有办法让符号链接目录具有相对符号链接?
尝试这个:
mkdir ~/TEST
cd ~/TEST
mkdir global
cd global
mkdir app
mkdir conf
touch conf/global_conf
cd app
ln -s ../conf conf
cd ~/TEST
mkdir user
cd user
ln -s ~/TEST/global/app app
mkdir conf
touch conf/user_conf
cd app
ls -l conf/
您是否希望显示“user_conf”文件?
答案1
问:您是否希望显示“user_conf”文件?
答:否定的!
符号链接就像 cd - 当您进入符号链接目录时,实际上是进入目标目录。因此,该目录(以及任何其他目录)中的所有相对路径(即符号链接)都将相对于符号链接所在目录的物理位置。换句话说...
cd ~/TEST/user/app
有效地
cd ~/TEST/global/app
因为最后一句
cd ~/TEST
mkdir user
cd user
ln -s ~/TEST/global/app app
下面是证明(-P 参数显示物理当前工作目录 - 即解析符号链接,而没有任何参数的 pwd 通常会显示逻辑当前工作目录):
pwd -P
/home/rouben/TEST/global/app/conf
pwd
/home/rouben/TEST/user/app/conf
不幸的是,鱼和熊掌不可兼得!我建议您谨慎使用符号链接,尤其是如果您正在编程……这种设置可能会产生意想不到的后果!
尝试这个更简单的例子:
cd ~
ln -s / root_of_everything
cd root_of_everything
pwd
/home/rouben/root_of_everything
pwd -P
/
第一个 pwd 输出“假”逻辑路径。第二个 pwd 加上 -P 输出实际物理路径。我希望在“root_of_everything”下创建的任何符号链接都必须与物理路径相关,而不是与逻辑路径相关。
答案2
我觉得那里出了点问题。列表/home/user-a/
应该显示一个符号链接app
和一个真实目录app-confs
。conf
应该只显示在列表中/home/user-a/app
。所以我建议你删除所有内容,/home/user-a/
并向我们展示你使用的命令(如果它再次不起作用)。