Символические ссылки не работают, когда ссылка сделана в другом каталоге?

Ничего себе, я никогда не использовал символические ссылки так много раньше, но это действительно поразительно:

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

почему я не могу cat символическую ссылку в каталоге копий?

Если я сделаю символическую ссылку внутри копий/, я могу ее просто отлично. Если я сделаю символическую ссылку в текущем каталоге,я также могу ее просто отлично. Если я делаю символическую ссылку в текущем каталоге, а затем перемещаю ее в copies/, я получаю "copies / copy.тхт: нет такого файла или каталога".

3 ответов


Если вы создадите относительный путь к символической ссылке, он сохранит его как относительную символическую ссылку. Символические ссылки относятся к местоположению ссылки, а не к местоположению, в котором она была создана или открыта.


пожалуйста, используйте абсолютный путь или путь относительно ссылки.

изменения:

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

вы также можете использовать относительный путь для достижения этого. как

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

Это будет работать

когда вы открываете символическую ссылку, которую он пытается сослаться на файл из каталога копий, и поскольку этого не существует, вы получаете эту ошибку.

при использовании относительного или абсолютного пути эта проблема будет решена.


Рассмотрим пример, где вы хотите символически связать свои журналы приложений в другом месте, которое может быть каталогом, который монтируется во вторичный каталог, размер которого не повлияет на ваш сервер, чтобы перестать работать. Сейчас каталог будет предназначаться для вас, и вы должны создать символическую ссылку на этот каталог на каталог журналы.

предположим, что ваш каталог приложений /home / ubuntu / my_app и после запуска приложения он будет генерировать каталог журнала внутри вашего каталог my_app. Теперь конечная цель-перенаправить нагрузку на использование диска в смонтированный каталог и в настоящее время не имеет нашего каталога журналов в нашем каталоге приложений. Так что просто идти вперед и выполните следующие действия:

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

это сначала создаст каталог с именем log in mounted section и сопоставит журналы приложений с этим каталогом. Любой файл, который вы добавляете в папку журнала приложений, будет автоматически связан с установленным каталогом и, таким образом, вы можете прочитать эти файлы в любом месте, где вы хотите, либо из исходного каталога журналов, либо из смонтированной папки.