Перший випуск:
Цитую вас:
Створення та видалення працюють чудово. Але оновлення не працюють. Після виконання цієї команди символьне посилання стає недійсним.
Проблема із заданою структурою каталогу:
~ / script / test / ~ / script / test / remote_loc / ~ / script / test / remote_loc / site1 / ~ / scriptpts / test / remote_loc / site1 / stuff1.txt ~ / scriptpts / test / remote_loc / site2 / ~ / script /test/remote_loc/site2/stuff2.txt ~ / script / test / remote_loc / site2 / ~ / script / test / remote_loc / site3 / stuff3.txt
і за допомогою команди:
ln -s /remote_loc/site1 test_link
Це створює символічне посилання у вашому $ PWD або в поточному робочому каталозі, яке вказує на неіснуючий файл із / або root або за адресою / remote_loc / site1
Якщо ваш PWD знаходиться у ~ / script /, тоді ви повинні використовувати це:
ln -s remote_loc/site1 test_link
інакше ви могли використовувати повний абсолютний шлях, як-от:
ln -s /home/yourusername/remote_loc/site1 test_link
Другий випуск:
Цитую вас:
Я читав тут і там, що неможливо оновити / замінити симпосилання. Так що в мережі є суперечлива інформація. Хто правий? Якщо символьне посилання можна оновити / змінити, як я можу цього досягти?
Відповідаючи на ваше запитання "Хто правий", я не впевнений, що саме ви читали чи як це розуміли. Але наступне має допомогти прояснити:
- Що можна оновити, і
- Що не можна оновити без використання відповідних комутаторів.
Оновлення символічних посилань на цілі, які не є каталогами.
ln -sf:
-f або - примусово видалити наявні файли призначення. Це використовується для оновлення цілі або призначення посилання.
Приклад:
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 або - відносний створює символічні посилання відносно місця посилання.
Приклад:
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
аргументі s вище без параметра -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
вами ніколи не ризикує втратити будь - які файли в вихідному каталозі випадково використовуючи неправильні ключі.