OS X не будет создавать никаких символических ссылок, вместо этого создает псевдонимы

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

У меня новая установка, и lnраньше эта команда работала нормально. Есть идеи, что случилось?

Спасибо, Уилл

Какую именно команду вы пробовали?
@MatthieuRiegler Я пробовал ln -s <source> <dest>такие инструменты, как: seiryu.home.comcast.net/~seiryu/symboliclinker.html
Я знаю только, как делать ссылки, псевдоним только из инструментов Apple. Откуда вы знаете, что это псевдоним?
@Mark Finder классифицирует его как псевдоним, и если я запускаю ls -la, он также называет его псевдонимом.
Убедитесь, что lnэто действительно так ln. В терминале выполните, type lnчтобы убедиться, что это /bin/ln.
На этот вопрос есть хорошие ответы на суперпользователя: superuser.com/questions/24095/…

Ответы (4)

Давайте проведем несколько экспериментов и посмотрим на некоторые вещи.

В эмуляторе терминала, таком как Terminal.app в /Applications/Utilities, перейдите в свой домашний каталог ( cd ~) и создайте каталог ( mkdir [directory]).

Убедитесь, что вы вошли в каталог, который мы только что создали ( cd [directory]).

cd ~
mkdir directory
cd directory

После этого сделайте файл; подойдет простой текстовый файл:

echo "This is a simple text file" > originalfile.txt
ls -l@

Теперь попробуйте создать жесткую ссылку, например:

/usr/bin/ln originalfile.txt hardlink.txt

Затем попробуйте создать символическую ссылку, например:

/usr/bin/ln -s originalfile.txt symboliclink.txt

Теперь откройте каталог в Finder с помощью open .и создайте псевдоним.

В эмуляторе терминала, который вы открывали ранее, другой lsдолжен выдать нам это:

Testarossa:test tonyw$ ls -l@
total 2528
-rw-r--r--  2 tonyw  staff      19 25 Jan 15:51 file.txt
-rw-r--r--@ 1 tonyw  staff  426048 25 Jan 15:52 file.txt alias
com.apple.FinderInfo        32 
com.apple.ResourceFork  850686 
-rw-r--r--  2 tonyw  staff      19 25 Jan 15:51 hard.txt
lrwxr-xr-x  1 tonyw  staff       8 25 Jan 15:53 symbolic.txt -> file.txt

Графический интерфейс Finder также должен привести к этому:

Графический интерфейс Finder с исходным файлом, жесткой ссылкой и символической ссылкой.

Обратите внимание, что графический интерфейс Finder отображает символическую ссылку как псевдоним.

Символическая ссылка — это не то же самое, что псевдоним. Настоящий псевдоним имеет расширенные атрибуты, чем символическая ссылка.

В графическом интерфейсе Finder нет способа сказать, что жесткая ссылка является чем-то иным, кроме файла.

Для любых символических ссылок слева от атрибутов есть буква «l», и lsкоманда сообщает нам, куда она указывает.

Когда вы попробуете это, что именно вы получите?

Итак, чтобы воспользоваться этой идеей, можем ли мы в любом случае заставить OSX/Finder перемаркировать символические ссылки как таковые, а не как псевдонимы?
... невозможно сказать, что жесткая ссылка - это не что иное, как файл. Это потому, что нет никакой разницы. Когда вы создавали originalfile.txt, вы создавали файл с одной жесткой ссылкой, а когда вы создавали hardlink.txt, это была вторая жесткая ссылка на тот же файл. Невозможно (в поисковике, в командной строке или где-либо еще) сказать, какое имя было исходным, а какое «ссылкой». Они обе ссылки. Каждый файл имеет хотя бы одну жесткую ссылку.

OS X может создавать и то, и другое, но по-разному. Поскольку вы, кажется, используете псевдоним слова, это ярлык файла (или каталога), который был создан в Finder для всего, что вы там видите, тогда как символическая ссылка (символическая ссылка) может быть создана в экземпляре оболочки, запущенном вашим терминальным приложением с помощью с помощью команды:

ln -s <source file path><target file path>

Символическая ссылка не может быть создана непосредственно в окне Finder (косвенно, возможно, путем вызова сценария AppleScript из сценария оболочки или наоборот).

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

$ alias listall=ls -al`

Это определяет псевдоним listallдля команды ls -alдля вывода списка всех файлов в текущем каталоге. В этом контексте «псевдоним» описывает псевдонимы команд — aliasна самом деле это встроенная команда оболочки bash для создания таких псевдонимов.

Я не эксперт по файловой системе OS X, просто пользователь и сценарист, но из того, что я прочитал, причина, по которой псевдоним Finder не ломается в OS X, заключается в том, что он содержит уникальный серийный номер для своего целевого файла (называемого номер inode, существующий для каждого файла и каталога), который не зависит от пути к файлу. Это означает, что если вы переместите цель в другой каталог, псевдоним по-прежнему будет указывать на нее, тогда как символическая ссылка не работает, потому что она использует путь к файлу цели.

Вы не можете изначально создавать символические ссылки (символические ссылки) в Finder , только псевдонимы. Однако вы можете использовать AppleScript для создания символических ссылок , если это то, что вам в конечном итоге нужно.

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

  • Псевдонимы - это соглашения Finder ; это означает, что они работают только в Finder, а не в среде UNIX OS X. Это небольшие файлы данных, и ваша оболочка (bash, sh, zsh и т. д.) не знает, как их интерпретировать.

  • Символические ссылки (символические ссылки для краткости) — это ярлыки , являющиеся частью файловой системы *NIX. Finder рассматривает их как квази-псевдонимы, вы можете их видеть и использовать, но они не содержат никаких дополнительных метаданных, которые содержат псевдонимы Finder.

  • Жесткие ссылки очень похожи на псевдонимы в Finder, за исключением того, что они не содержат путь к исходному файлу. Жесткие ссылки отображаются в Finder как обычные файлы; вы не будете знать, что работаете не с исходным файлом, а со связанным. Жесткие ссылки — это то, что lnсоздается по умолчанию, когда вы опускаете -sфлаг.

Для получения дополнительной информации я написал об этом более подробно в этом ответе .

Суть в том, что вы сможете создавать символические ссылки и жесткие ссылки только в Терминале (среда UNIX OS X), но использовать их глобально. Вы сможете создавать и использовать псевдонимы только в Finder. (IMO) Из-за этого я держусь подальше от псевдонимов и использую исключительно символические ссылки.

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