Подтвердить что ты не робот

Какая разница между ln -s и псевдонимами?

Я только что нашел обходное решение проблемы У меня была команда subl для Sublime Text 3, когда версия python для MacPorts установлен. В инструкциях говорится, что в приложение/строку с командной строкой введите ln-s мягкую ссылку. Это не сработало, поэтому я просто открыл свой файл ~/.profile и добавил псевдоним:   alias subl="/Applications/path/to/subl". Но это вызывает у меня новый вопрос. В чем разница между этими двумя: псевдоним и мягкие ссылки?

4b9b3361

Ответ 1

Это совершенно разные вещи, хотя в этом случае их можно использовать для аналогичных целей.

Это:

alias subl="/Applications/path/to/subl"

создает псевдоним, поэтому ввод subl в качестве команды оболочки эквивалентен вводу /Applications/path/to/subl.

В bash функции обычно предпочтительны для псевдонимов, потому что они намного более гибкие и мощные.

subl() { /Applications/path/to/subl ; }

Обе эти вещи специфичны для оболочки; они заставляют оболочку расширять sub1 до указанной команды.

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

Ответ 2

Псевдоним - это концепция Macintosh Finder. Когда вы создаете псевдоним в Finder, Finder отслеживает его. Когда вы перемещаете исходный файл или папку, псевдоним следует за ним.

Символьная ссылка - это концепция Unix File System. Когда вы создаете символическую ссылку, она просто указывает на исходное местоположение. Переместите оригинал, и символическая ссылка не укажет нигде.

Когда вы используете приложение Mac и используете диалоговое окно "Открыть/Сохранить", он будет обрабатывать псевдонимы, потому что он использует API-интерфейс Finder, а Finder обрабатывает отслеживание псевдонимов.

Инструменты Unix не интегрируются с API-интерфейсом Finder, поэтому не могут отслеживать псевдонимы. Однако они работают с базовым интерфейсом Unix API, который обрабатывает символические ссылки. Вы можете использовать ls в символической ссылке, потому что она использует Unix API. То же самое с Python.

В системе 7/8/9 дней файловая система не могла обрабатывать символические ссылки, подобно тому, как Windows API использует ярлыки, а не символические ссылки. Вам нужны псевдонимы.

Однако Mac OS X является ОС на базе Unix, поэтому понимает концепцию символических ссылок. Теперь Finder обрабатывает символические ссылки, как и псевдонимы (за исключением того, что символические ссылки не обновляются, когда исходные движения). Единственная причина для псевдонимов - совместимость со старой файловой системой Finder.

Ответ 3

ln -s создает символическую ссылку, которая является почти файлом вашей файловой системы

alias - это особая оболочка

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

Ответ 4

Псевдонимы существуют только в контексте оболочки (Bash, Sh, Zsh и т.д.), но не встречаются в других приложениях, тогда как ln -s создает виртуальный файл (ссылку, которая есть) для существующего реального файла который может представить себя как новую команду и должен быть познаваемым большинством приложений, которые вызывают другие двоичные файлы. Псевдонимы аналогичны функциям и переменным только тем, что они больше похожи на шаблоны команд. Создание функции на самом деле более похвально.

Ответ 5

Я думаю, что вы можете пропустить что-то в своей команде alias выше - он должен иметь форму alias mumble="substitution" и будет вызывать любую команду, которую вы вводите, начиная с mumble, которую нужно заменить заменой. Поэтому, если вы ввели в свой профиль alias subl="/Applications/path//to/subl", то всякий раз, когда вы вводите subl в начале команды, он заменяется полным путем.

ln работает, создавая ссылку в файловой системе от одной вещи к другой.

Указанная выше ссылка предполагает, что ln не будет работать с версией Python, предоставляемой в MacPorts.

Ответ 6

EDIT: Еще один комментарий заставляет меня понять псевдоним, о котором я говорю, это псевдоним "finder", специфичный для mac, тогда как псевдонимы, о которых идет речь, представляют собой псевдонимы bash 'shell'. Моя ошибка.

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

Псевдоним может содержать ссылку на путь или идентификатор файла или и то, и другое в зависимости от реализации. В Mac OS X по крайней мере по умолчанию используется оба варианта, но путь к файлу совпадает с ним. То есть, пока что-то существует на пути, на который ссылается ваш псевдоним, ваш псевдоним укажет на путь, как это делает символическая ссылка. Но, если на пути, на который ссылается ваш псевдоним, ничего не существует, вместо него указывается исходный идентификатор файла.

Например:

Предположим, вы создали файл, а затем создали для него псевдоним, указав путь к файлу. Теперь псевдоним содержит идентификатор файла файла, а также путь к файлу. Псевдоним по умолчанию будет следовать файловому пути, чтобы передать вас в файл.

Если вы теперь переместите файл в другое место, псевдоним будет следовать ему, указав идентификатор файла. Но если вы присвоите NEW файл тому же пути к файлу, что и старый, псевдоним теперь укажет на новый файл, поскольку он поддерживает путь по идентификатору файла.

Ссылка: http://forums.macworld.com/index.php?/topic/142842-aliases-vs-symbolic-links/