Intereting Posts
Простаивание процессора велико, но процессы изо всех сил стараются не отставать, как если бы процессор находился под большой нагрузкой OpenVPN или IPtables для управления разделенным туннелем? Определите, установлен ли (NTFS) диск или нет. Если нет, то установите его Изменить приглашение на основе значения Как узнать возможности чтения и записи на оптических дисках? Существуют ли какие-либо утилиты командной строки, которые могут захватывать нажатия кнопок джойстика? CDC-ACM-драйвер, возвращающий данные мусора Виртуальная машина, похоже, не считает мой GPU «первичным», Как преобразовать этот формат временной метки в другой формат в Perl? Возможно ли получить информацию для дерева устройств с помощью / sys работающего ядра? Как установить переменную пути без root acess? Как найти дату создания файла? Перенаправить вывод с несколькими командами Быстрое ускорение мыши на XFCE4 Где можно скачать debian-test.iso?

Выполнение символической ссылки на разных физических дисках

У меня есть папка на моем HDD /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 ': слишком много уровней символических ссылок

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

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

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

 export PATH=$HOME/bin:$PATH 

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

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

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

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 может создавать hardlinks для каталогов, потому что вы можете создать круговую структуру каталогов таким образом (и root должен знать достаточно, чтобы этого не делать).

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

5) Я не знаю, что произошло, когда вы не смогли выполнить test.sh Too many levels of symbolic links об ошибках Too many levels of symbolic links указывают на то, что у вас есть другие символические ссылки, поэтому что-то перепуталось. Мне нужно будет увидеть структуру каталогов, чтобы узнать, что произошло.

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