Симлинки не работают, когда ссылка сделана в другом каталоге? - PullRequest
8 голосов
/ 22 декабря 2011

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

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

Почему я не могу катить символическую ссылку в каталоге копий?Если я сделаю символическую ссылку изнутри копий /, я смогу это сделать.Если я сделаю символическую ссылку в текущем каталоге, я также смогу это сделать.Если я сделаю символическую ссылку в текущем каталоге, а затем переместу ее в копии /, я получу «copy / copy.txt: Нет такого файла или каталога».

Ответы [ 3 ]

18 голосов
/ 22 декабря 2011

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


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

Изменить

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
5 голосов
/ 22 декабря 2011

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

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

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

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

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

1 голос
/ 03 июня 2016

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

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

...