Выполнить символическую ссылку на разных физических дисках

У меня есть папка на моем жестком диске / media / kalenpw / HDD / Documents / ShellScripts , которая заполнена различными скриптами, из которых я хотел бы получить доступ любой каталог. Моя предыдущая стратегия заключалась в копировании всех файлов в / usr / local / bin , это работало, но было утомительным при обновлении скриптов, когда приходилось менять в двух местах.

К счастью, я недавно узнал о символических ссылках, и они идеально подходят.

Я создал тестовый сценарий в своей домашней папке

test.sh

print "Hello"

, затем сделал ln ~ / test.sh / usr / local / bin и, как и ожидалось, смог выполнить ] test.sh откуда угодно.

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

Недопустимая ссылка между устройствами

, поэтому я попытался создать символическую ссылку следующим образом: sudo ln -s ./test.sh / usr / local / bin / , который создал ссылку, как и ожидалось. Однако я не могу выполнить test.sh из любого каталога (или даже вообще), как мне хотелось бы. Чтобы убедиться, что файл не потерял права доступа в ссылке из / usr / local / bin , я выполнил sudo chmod + x ./test.sh и получил сообщение об ошибке:

chmod: невозможно получить доступ к './test.sh': слишком много уровней символических ссылок

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

Резюме: как я могу создать ссылку от одного файла к другому на другом физическом диске и при этом сохранить возможность выполнения связанного файла.

0
14.02.2017, 08:11
1 ответ

1) Правильный способ доступа к большому количеству скриптов - просто добавить каталог, в котором они находятся, в ваш $ PATH . Например, у меня есть личные сценарии в ~ / bin , поэтому в моем .profile у меня есть строка

export PATH=$HOME/bin:$PATH

, которая помещает мой ~ / bin перед существующих путей, поэтому я могу «перезаписывать» другие программы, имея сценарии с тем же именем. Если вы этого не хотите, поместите новые каталоги после $ PATH .

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

2) Предпосылки: в конкретной файловой системе файлы идентифицируются с помощью их номера inode . Каталог просто сопоставляет имена файлов с номерами inode. Если вы используете ln без -s (жесткие ссылки), вы создаете новую запись каталога с индексным дескриптором существующего файла. Таким образом, очевидно, что это может работать только для файлов в одной файловой системе.

OTOH, если вы используете ln -s , вы создаете символическую ссылку (символическая ссылка): специальный файл, содержащий в качестве содержимого указанный вами путь, и этот путь используется вместо файла, когда вы пытаетесь получить к нему доступ. Вам не нужно быть root, чтобы создавать символические ссылки.

3) Когда вы выполняете ln ~ / test.sh / usr / local / bin , то команды ln обнаруживают, что / usr / local / bin - это каталог, поэтому предполагается, что вы действительно хотите выполнить ln ~ / test.sh /usr/local/bin/test.sh. То же самое происходит с -s .Об этом важно помнить, потому что вы также можете создавать символические ссылки на каталоги. Но только root может создавать жесткие ссылки на каталоги, потому что таким образом вы можете создать круговую структуру каталогов (и root должен знать достаточно, чтобы этого не делать).

4) В то время как жесткая ссылка имеет биты режима файла, символическая ссылка не имеет: любая попытка chmod символическая ссылка просто изменит биты режима файла в файле, на который она указывает.

5) Я не знаю, что случилось, когда вы не смогли выполнить test.sh , сообщение об ошибке Слишком много уровней символических ссылок указывает на то, что у вас где-то есть другие символические ссылки Итак, что-то пошло не так. Мне нужно увидеть вашу структуру каталогов, чтобы узнать, что произошло.

6) Если вы действительно хотите создать символическую ссылку для каждого скрипта в каталоге скриптов на / usr / local / bin / вместо того, чтобы просто устанавливать ПУТЬ (я не рекомендую that), рассмотрите возможность использования вместо него stow : эта программа устанавливает сразу несколько символических ссылок. Уложите , чтобы узнать подробности.

2
28.01.2020, 02:34

Теги

Похожие вопросы