Я сделал символическую ссылку, используя команду ln -s source target.
В первой попытке я использовал относительный путь, и в итоге я получил broken symbolic link...
Поиск в Интернете , Я читал, что мне нужно использовать абсолютный путь. Меня интересует, почему это должен быть абсолютный путь, а не относительный путь, что более удобно. Я искал и не нашел ответа.
Символическая ссылка хранит путь, который вы даете при его создании. Пути не работают (символические ссылки не работают), когда файл не находится на этом пути. Давайте сделаем символическую ссылку с относительным путем ...
zanna@toaster:~/playground$ mkdir linkyland anotherplace
zanna@toaster:~/playground$ cd linkyland
zanna@toaster:~/playground/linkyland$ ln -s sauce target
zanna@toaster:~/playground/linkyland$ file *
target: broken symbolic link to sauce
ln не волнует, существует ли исходный файл (поэтому, если вы делаете опечатку на пути, он не будет жаловаться) , Давайте создадим файл, к которому хотим привязать, и посмотрим, поможет ли это:
zanna@toaster:~/playground/linkyland$ > sauce
zanna@toaster:~/playground/linkyland$ file target
target: symbolic link to sauce
Теперь ссылка работает. Мы можем использовать только basename (последний элемент пути), потому что sauce находится в том же каталоге, что и target, поэтому target может хранить путь sauce, и этого достаточно, чтобы найти sauce когда нам это нужно.
zanna@toaster:~/playground/linkyland$ cd ../anotherplace
zanna@toaster:~/playground/anotherplace$ ln -s sauce target
zanna@toaster:~/playground/anotherplace$ file target
target: broken symbolic link to sauce
Эта символическая ссылка не работает, потому что здесь нет sauce. Путь sauce недостаточно информации. (С этого момента я удалил часть user@host моего приглашения для упрощения чтения, но я показываю часть, которая указывает текущий рабочий каталог, так как это показывает, как работают команды.). Мы можем исправить это, используя абсолютный путь для создания символической ссылки:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ls -s /home/zanna/playground/linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to /home/zanna/playground/linkyland/sauce
Однако мы могли бы также исправить это, сделав правильный относительный путь:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ln -s ../linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to ../linkyland/sauce
Таким образом, идея о том, что нам нужны абсолютные пути ... просто неправильно. Нам нужен правильный путь, абсолютный или относительный.
Если пути изменяются, символические ссылки с абсолютными путями к файлам в одном и том же каталоге разбиваются, а те, у которых есть относительные пути, нет:
~/playground/anotherplace$ cd ../linkyland
~/playground/linkyland$ ln -s /home/zanna/playground/linkyland/sauce target2
~/playground/linkyland$ cd ..
~/playground$ mv linkyland elsewhere
~/playground$ file elsewhere/target*
elsewhere/target: symbolic link to sauce
elsewhere/target2: broken symbolic link to /home/zanna/playground/linkyland/sauce
Поэтому часто предпочтительнее использовать относительные пути , Однако, если местоположение исходного файла вряд ли изменится, но расположение символьной ссылки correct может измениться, было бы предпочтительным использовать абсолютный путь:
~/playground$ cd anotherplace
~/playground/anotherplace$ ln -s ../elsewhere/sauce target-rel
~/playground/anotherplace$ ln -s /home/zanna/playground/elsewhere/sauce target-abs
~/playground/anotherplace$ cd ..
~/playground$ mv anotherplace ..
~/playground$ cd ..
~$ file anotherplace/*
anotherplace/target-abs: symbolic link to /home/zanna/playground/elsewhere/sauce
anotherplace/target-rel: broken symbolic link to ../elsewhere/sauce
Символическая ссылка хранит путь, который вы даете при его создании. Пути не работают (символические ссылки не работают), когда файл не находится на этом пути. Давайте сделаем символическую ссылку с относительным путем ...
zanna@toaster:~/playground$ mkdir linkyland anotherplace
zanna@toaster:~/playground$ cd linkyland
zanna@toaster:~/playground/linkyland$ ln -s sauce target
zanna@toaster:~/playground/linkyland$ file *
target: broken symbolic link to sauce
ln не волнует, существует ли исходный файл (поэтому, если вы делаете опечатку на пути, он не будет жаловаться) , Давайте создадим файл, к которому хотим привязать, и посмотрим, поможет ли это:
zanna@toaster:~/playground/linkyland$ > sauce
zanna@toaster:~/playground/linkyland$ file target
target: symbolic link to sauce
Теперь ссылка работает. Мы можем использовать только basename (последний элемент пути), потому что sauce находится в том же каталоге, что и target, поэтому target может хранить путь sauce, и этого достаточно, чтобы найти sauce когда нам это нужно.
zanna@toaster:~/playground/linkyland$ cd ../anotherplace
zanna@toaster:~/playground/anotherplace$ ln -s sauce target
zanna@toaster:~/playground/anotherplace$ file target
target: broken symbolic link to sauce
Эта символическая ссылка не работает, потому что здесь нет sauce. Путь sauce недостаточно информации. (С этого момента я удалил часть user@host моего приглашения для упрощения чтения, но я показываю часть, которая указывает текущий рабочий каталог, так как это показывает, как работают команды.). Мы можем исправить это, используя абсолютный путь для создания символической ссылки:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ls -s /home/zanna/playground/linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to /home/zanna/playground/linkyland/sauce
Однако мы могли бы также исправить это, сделав правильный относительный путь:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ln -s ../linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to ../linkyland/sauce
Таким образом, идея о том, что нам нужны абсолютные пути ... просто неправильно. Нам нужен правильный путь, абсолютный или относительный.
Если пути изменяются, символические ссылки с абсолютными путями к файлам в одном и том же каталоге разбиваются, а те, у которых есть относительные пути, нет:
~/playground/anotherplace$ cd ../linkyland
~/playground/linkyland$ ln -s /home/zanna/playground/linkyland/sauce target2
~/playground/linkyland$ cd ..
~/playground$ mv linkyland elsewhere
~/playground$ file elsewhere/target*
elsewhere/target: symbolic link to sauce
elsewhere/target2: broken symbolic link to /home/zanna/playground/linkyland/sauce
Поэтому часто предпочтительнее использовать относительные пути , Однако, если местоположение исходного файла вряд ли изменится, но расположение символьной ссылки correct может измениться, было бы предпочтительным использовать абсолютный путь:
~/playground$ cd anotherplace
~/playground/anotherplace$ ln -s ../elsewhere/sauce target-rel
~/playground/anotherplace$ ln -s /home/zanna/playground/elsewhere/sauce target-abs
~/playground/anotherplace$ cd ..
~/playground$ mv anotherplace ..
~/playground$ cd ..
~$ file anotherplace/*
anotherplace/target-abs: symbolic link to /home/zanna/playground/elsewhere/sauce
anotherplace/target-rel: broken symbolic link to ../elsewhere/sauce
Символическая ссылка хранит путь, который вы даете при его создании. Пути не работают (символические ссылки не работают), когда файл не находится на этом пути. Давайте сделаем символическую ссылку с относительным путем ...
zanna@toaster:~/playground$ mkdir linkyland anotherplace
zanna@toaster:~/playground$ cd linkyland
zanna@toaster:~/playground/linkyland$ ln -s sauce target
zanna@toaster:~/playground/linkyland$ file *
target: broken symbolic link to sauce
ln не волнует, существует ли исходный файл (поэтому, если вы делаете опечатку на пути, он не будет жаловаться) , Давайте создадим файл, к которому хотим привязать, и посмотрим, поможет ли это:
zanna@toaster:~/playground/linkyland$ > sauce
zanna@toaster:~/playground/linkyland$ file target
target: symbolic link to sauce
Теперь ссылка работает. Мы можем использовать только basename (последний элемент пути), потому что sauce находится в том же каталоге, что и target, поэтому target может хранить путь sauce, и этого достаточно, чтобы найти sauce когда нам это нужно.
zanna@toaster:~/playground/linkyland$ cd ../anotherplace
zanna@toaster:~/playground/anotherplace$ ln -s sauce target
zanna@toaster:~/playground/anotherplace$ file target
target: broken symbolic link to sauce
Эта символическая ссылка не работает, потому что здесь нет sauce. Путь sauce недостаточно информации. (С этого момента я удалил часть user@host моего приглашения для упрощения чтения, но я показываю часть, которая указывает текущий рабочий каталог, так как это показывает, как работают команды.). Мы можем исправить это, используя абсолютный путь для создания символической ссылки:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ls -s /home/zanna/playground/linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to /home/zanna/playground/linkyland/sauce
Однако мы могли бы также исправить это, сделав правильный относительный путь:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ln -s ../linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to ../linkyland/sauce
Таким образом, идея о том, что нам нужны абсолютные пути ... просто неправильно. Нам нужен правильный путь, абсолютный или относительный.
Если пути изменяются, символические ссылки с абсолютными путями к файлам в одном и том же каталоге разбиваются, а те, у которых есть относительные пути, нет:
~/playground/anotherplace$ cd ../linkyland
~/playground/linkyland$ ln -s /home/zanna/playground/linkyland/sauce target2
~/playground/linkyland$ cd ..
~/playground$ mv linkyland elsewhere
~/playground$ file elsewhere/target*
elsewhere/target: symbolic link to sauce
elsewhere/target2: broken symbolic link to /home/zanna/playground/linkyland/sauce
Поэтому часто предпочтительнее использовать относительные пути , Однако, если местоположение исходного файла вряд ли изменится, но расположение символьной ссылки correct может измениться, было бы предпочтительным использовать абсолютный путь:
~/playground$ cd anotherplace
~/playground/anotherplace$ ln -s ../elsewhere/sauce target-rel
~/playground/anotherplace$ ln -s /home/zanna/playground/elsewhere/sauce target-abs
~/playground/anotherplace$ cd ..
~/playground$ mv anotherplace ..
~/playground$ cd ..
~$ file anotherplace/*
anotherplace/target-abs: symbolic link to /home/zanna/playground/elsewhere/sauce
anotherplace/target-rel: broken symbolic link to ../elsewhere/sauce
Символическая ссылка хранит путь, который вы даете при его создании. Пути не работают (символические ссылки не работают), когда файл не находится на этом пути. Давайте сделаем символическую ссылку с относительным путем ...
zanna@toaster:~/playground$ mkdir linkyland anotherplace
zanna@toaster:~/playground$ cd linkyland
zanna@toaster:~/playground/linkyland$ ln -s sauce target
zanna@toaster:~/playground/linkyland$ file *
target: broken symbolic link to sauce
ln не волнует, существует ли исходный файл (поэтому, если вы делаете опечатку на пути, он не будет жаловаться) , Давайте создадим файл, к которому хотим привязать, и посмотрим, поможет ли это:
zanna@toaster:~/playground/linkyland$ > sauce
zanna@toaster:~/playground/linkyland$ file target
target: symbolic link to sauce
Теперь ссылка работает. Мы можем использовать только basename (последний элемент пути), потому что sauce находится в том же каталоге, что и target, поэтому target может хранить путь sauce, и этого достаточно, чтобы найти sauce когда нам это нужно.
zanna@toaster:~/playground/linkyland$ cd ../anotherplace
zanna@toaster:~/playground/anotherplace$ ln -s sauce target
zanna@toaster:~/playground/anotherplace$ file target
target: broken symbolic link to sauce
Эта символическая ссылка не работает, потому что здесь нет sauce. Путь sauce недостаточно информации. (С этого момента я удалил часть user@host моего приглашения для упрощения чтения, но я показываю часть, которая указывает текущий рабочий каталог, так как это показывает, как работают команды.). Мы можем исправить это, используя абсолютный путь для создания символической ссылки:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ls -s /home/zanna/playground/linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to /home/zanna/playground/linkyland/sauce
Однако мы могли бы также исправить это, сделав правильный относительный путь:
~/playground/anotherplace$ rm target
~/playground/anotherplace$ ln -s ../linkyland/sauce target
~/playground/anotherplace$ file target
target: symbolic link to ../linkyland/sauce
Таким образом, идея о том, что нам нужны абсолютные пути ... просто неправильно. Нам нужен правильный путь, абсолютный или относительный.
Если пути изменяются, символические ссылки с абсолютными путями к файлам в одном и том же каталоге разбиваются, а те, у которых есть относительные пути, нет:
~/playground/anotherplace$ cd ../linkyland
~/playground/linkyland$ ln -s /home/zanna/playground/linkyland/sauce target2
~/playground/linkyland$ cd ..
~/playground$ mv linkyland elsewhere
~/playground$ file elsewhere/target*
elsewhere/target: symbolic link to sauce
elsewhere/target2: broken symbolic link to /home/zanna/playground/linkyland/sauce
Поэтому часто предпочтительнее использовать относительные пути , Однако, если местоположение исходного файла вряд ли изменится, но расположение символьной ссылки correct может измениться, было бы предпочтительным использовать абсолютный путь:
~/playground$ cd anotherplace
~/playground/anotherplace$ ln -s ../elsewhere/sauce target-rel
~/playground/anotherplace$ ln -s /home/zanna/playground/elsewhere/sauce target-abs
~/playground/anotherplace$ cd ..
~/playground$ mv anotherplace ..
~/playground$ cd ..
~$ file anotherplace/*
anotherplace/target-abs: symbolic link to /home/zanna/playground/elsewhere/sauce
anotherplace/target-rel: broken symbolic link to ../elsewhere/sauce
Символическим ссылкам не нужны абсолютные пути. Он отлично работает с относительными путями:
$ ls -l /usr/bin/X11
lrwxrwxrwx 1 root root 1 May 11 2017 /usr/bin/X11 -> .
См. Здесь символическая ссылка на относительный путь, который отлично работает:
$ realpath /usr/bin/X11/yes
/usr/bin/yes
$ file /usr/bin/X11/yes
/usr/bin/X11/yes: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=add2c9ee02a98b5066d08d5ba2e79697880b2662, stripped
Символическим ссылкам не нужны абсолютные пути. Он отлично работает с относительными путями:
$ ls -l /usr/bin/X11
lrwxrwxrwx 1 root root 1 May 11 2017 /usr/bin/X11 -> .
См. Здесь символическая ссылка на относительный путь, который отлично работает:
$ realpath /usr/bin/X11/yes
/usr/bin/yes
$ file /usr/bin/X11/yes
/usr/bin/X11/yes: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=add2c9ee02a98b5066d08d5ba2e79697880b2662, stripped
Символическим ссылкам не нужны абсолютные пути. Он отлично работает с относительными путями:
$ ls -l /usr/bin/X11
lrwxrwxrwx 1 root root 1 May 11 2017 /usr/bin/X11 -> .
См. Здесь символическая ссылка на относительный путь, который отлично работает:
$ realpath /usr/bin/X11/yes
/usr/bin/yes
$ file /usr/bin/X11/yes
/usr/bin/X11/yes: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=add2c9ee02a98b5066d08d5ba2e79697880b2662, stripped
Символическим ссылкам не нужны абсолютные пути. Он отлично работает с относительными путями:
$ ls -l /usr/bin/X11
lrwxrwxrwx 1 root root 1 May 11 2017 /usr/bin/X11 -> .
См. Здесь символическая ссылка на относительный путь, который отлично работает:
$ realpath /usr/bin/X11/yes
/usr/bin/yes
$ file /usr/bin/X11/yes
/usr/bin/X11/yes: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=add2c9ee02a98b5066d08d5ba2e79697880b2662, stripped