Symlink сразу после создания - программирование
Подтвердить что ты не робот

Symlink сразу после создания

Я загрузил пакет linux Tor Browser, который является автономной папкой. Я сделал символическую ссылку на прогон script:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser

Однако связь была нарушена при создании. Все, что я делал, было запустило эту команду, больше ничего, и она была сломана. Я сделал это и получил:

lrwxrwxrwx 1 synful synful 28 Jul 18 21:52 torbrowser -> torbrowser/start-tor-browser

... что странно, потому что у torbrowser/start-tor-browser было 755 разрешений. Кроме того, я запустил file:

$ file ~/bin/torbrowser
bin/torbrowser: broken symbolic link to `torbrowser/start-tor-browser'

Я сделал новый bash script и символическую ссылку для проверки этого и не имел таких проблем. Я не уверен, почему это происходит только с браузером start-tor. Он получил обычные разрешения и является обычным bash script (даже в соответствии с файловой командой).

... любые идеи?

4b9b3361

Ответ 1

Важно знать, что

ln -s SOURCE TARGET

создать символическую ссылку TARGET, которая символически связана со строкой SOURCE. Если SOURCE - относительный путь (то есть он не начинается с /), то он интерпретируется относительно каталога, в котором находится TARGET. Если это абсолютный путь, то это абсолютный путь. Если это строка, которая не может быть путём или содержит несуществующий путь или файл, или в противном случае это не допустимая строка пути, неважно. ln -s не проверяет, существует ли SOURCE или даже допустимый путь. Вы можете хранить почти любую короткую строку, которую вы хотели в дирент.

Итак, когда вы это сделаете:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser

что вы делаете, грубо:

  • создайте запись каталога внутри подкаталога bin с именем torbrowser.
  • Сделайте эту новую запись каталога символической ссылкой (символической ссылкой) на (относительный) путь torbrowser/start-tor-browser

Новая символьная ссылка является круговой. ~/bin/torbrowser связан с ~/bin/torbrowser/start-tor-browser, что означает, что вам нужно следовать символической ссылке, чтобы разрешить символическую ссылку. Если вы попытаетесь использовать его, вы увидите:

$ cat ~/bin/torbrowser
cat: /home/joshlf13/bin/torbrowser: Too many levels of symbolic links
$

Иногда - часто, даже - способность символически ссылаться на относительный путь чрезвычайно удобна. Обычное использование избавляет от номеров версий:

$ ln -s apps/my_fancy_app_v2.63.1 apps/my_fancy_app

Теперь не только я могу вызвать my_fancy_app, не запомнив его строку версии, я также могу переместить всю папку в другое место, не нарушая символическую ссылку:

$ mv apps /usr/local/apps

Но в других случаях - как в вашем примере, я думаю - вам нужно символически ссылаться на абсолютный путь.

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

Ответ 2

приведенное выше использование для ln:

ln -s SOURCE TARGET

является правильным, но запутанным, когда ссылается на страницу руководства:

ln [OPTION]... [-T] TARGET LINK_NAME (1-я форма)

как "TARGET" имеет другое значение

Ответ 3

Важно, чтобы TARGET вы указали в

ln -s TARGET LINK_NAME

- это полный путь файла/каталога. У меня была эта проблема, в моем случае, когда я cd вошел в целевой каталог и сделал

ln -s ./eclipse.ini ~/Desktop/eclipse1 привел к неработающей ссылке

enter image description here

Но когда я сделал это ln -s $(pwd)/eclipse.ini ~/Desktop/eclipse, это сработало!

enter image description here