Первая проблема:
Цитирую вас:
Создания и удаления работают нормально. Но обновления не работают. После выполнения этой команды символическая ссылка становится недействительной.
Проблема с заданной структурой каталогов:
~ / scripts / test / ~ / scripts / test / remote_loc / ~ / scripts / test / remote_loc / site1 / ~ / scripts / test / remote_loc / site1 / stuff1.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts /test/remote_loc/site2/stuff2.txt ~ / scripts / test / remote_loc / site2 / ~ / scripts / test / remote_loc / site3 / stuff3.txt
и с помощью команды:
ln -s /remote_loc/site1 test_link
Это создает символическую ссылку в вашем $ PWD или текущем рабочем каталоге, которая указывает на несуществующий файл из /, или root, в / remote_loc / site1
Если ваш PWD находится в ~ / scripts /, то вы должны были использовать это:
ln -s remote_loc/site1 test_link
иначе вы могли бы использовать полный абсолютный путь, например:
ln -s /home/yourusername/remote_loc/site1 test_link
Второй выпуск:
Цитирую вас:
Я прочитал кое-что, что невозможно обновить / переопределить символическую ссылку. Так что в сети есть противоречивая информация. Кто прав? Если символическая ссылка может быть обновлена / переопределена, как я могу добиться этого?
Отвечая на ваш вопрос «Кто прав», я не уверен, что именно вы прочитали или как это поняли. Но следующее должно помочь прояснить ситуацию:
- Что можно обновить и
- Что не может быть обновлено без использования соответствующих переключателей.
Обновление символических ссылок с целями, которые не являются каталогами.
ln -sf:
-f или --force удалить существующие файлы назначения. Используется для обновления цели или места назначения ссылки.
Пример:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
Но, как вы можете видеть, он даст абсолютный путь, если в ln
аргументах есть абсолютные пути . Указание полного пути необходимо, когда текущий рабочий каталог отличается от родительского каталога ссылки.
Относительные пути:
ln -sfr:
-r или --relative создает символические ссылки относительно местоположения ссылки.
Пример:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Но обновление ссылки на каталог не будет работать, если целью является каталог.
Пример:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
Как вы можете видеть, несмотря на использование абсолютных путей, указанных в ln
аргументе выше, без опции -r, символическая ссылка по-прежнему относительно ссылки.
Обновить ссылки на каталоги:
ln -sfrn:
-n или --no-dereference обрабатывает LINK_NAME как обычный файл, если это символическая ссылка на каталог.
Пример:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
В отличие от:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
вместоrm
. При этомunlink
вы никогда не рискуете потерять какие-либо файлы в исходном каталоге, случайно используя неправильные ключи.