Символические ссылки не работают, когда ссылка сделана в другом каталоге?
Ничего себе, я никогда не использовал символические ссылки так много раньше, но это действительно поразительно:
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 и сопоставит журналы приложений с этим каталогом. Любой файл, который вы добавляете в папку журнала приложений, будет автоматически связан с установленным каталогом и, таким образом, вы можете прочитать эти файлы в любом месте, где вы хотите, либо из исходного каталога журналов, либо из смонтированной папки.