Ligação simbólica relativa dentro de um diretório ligado por symlink

1

Eu tenho um aplicativo instalado em /home/appuser/app/ Nesse diretório existe um diretório separado confs para os arquivos de configuração, que é vinculado a ../app-confs , assim:

lrwxrwxrwx  1 appuser appuser    19 Mar 25 15:22 confs -> ../app-confs/

Parece bem, funciona bem.

Agora, gostaria que outros usuários usassem esse aplicativo no mesmo diretório ( /home/appuser/app/ ), para que as atualizações possam ser feitas em um único local, mas com um diretório de configurações diferente.

Por isso, criei um link simbólico em /home/user-a/ to /home/appuser/app/ . E eu crio um novo diretório de configurações confs in /home/user-a/ .

Quando a lista /home/user-a/ , eu vejo

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

e em /home/user-a/app , vejo

...
lrwxrwxrwx  1 appuser appuser    19 Mar 25 15:22 confs -> ../app-confs/
...

Mas quando listo /home/user-a/confs/ , vejo arquivos de /home/appuser/confs/ , os confs originais e não os relativos.

Existe uma maneira de ter um link simbólico relativo com um diretório ligado por links simbólicos?

Tente isto:

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/

Você esperaria que o arquivo "user_conf" fosse mostrado ou não?

    
por ddofborg 29.04.2013 / 14:07

2 respostas

1

Q: You would expect "user_conf" file to be shown, or not?

A: Negativo!

Links simbólicos são como cd - quando você entra em um diretório ligado por links simbólicos, você está efetivamente conectando-se ao diretório de destino. Portanto, todos os caminhos relativos (isto é, links simbólicos) nesse (e qualquer outro) diretório serão relativos à localização física do diretório onde o link simbólico está localizado. Em outras palavras ...

cd ~/TEST/user/app

é efetivamente

cd ~/TEST/global/app

por causa da última linha de

cd ~/TEST
mkdir user
cd user
ln -s ~/TEST/global/app app

E aqui está a prova (o parâmetro -P mostra o diretório de trabalho do physicalcurrent - ou seja, resolve links simbólicos, enquanto o pwd sem nenhum parâmetro normalmente mostra o diretório de trabalho atual e lógico):

pwd -P
/home/rouben/TEST/global/app/conf

pwd
/home/rouben/TEST/user/app/conf

Infelizmente não há como comer o bolo e tê-lo também! Eu sugiro que você tenha cuidado com links simbólicos, especialmente se você estiver programando ... esse tipo de configuração pode ter conseqüências não intencionais!

Experimente este exemplo mais simples:

cd ~
ln -s / root_of_everything
cd root_of_everything
pwd
/home/rouben/root_of_everything
pwd -P
/

O primeiro pwd gera o caminho lógico "falso". O segundo pwd, com o -P, produz o caminho físico real. Quaisquer links simbólicos que eu queira criar em "root_of_everything" terão que ser relativos ao caminho físico, e não ao caminho lógico.

    
por 29.04.2013 / 16:49
0

Parece-me que algo deu errado lá. A listagem /home/user-a/ deve mostrar um link simbólico app e um diretório real app-confs . conf deve ser mostrado em uma listagem de /home/user-a/app apenas. Então, eu recomendo que você remova tudo do /home/user-a/ e nos mostre os comandos que você usou (se ele não funcionar novamente).

    
por 29.04.2013 / 14:23