Как я могу создать символическую ссылку в Терминале?

Какая команда используется для создания символической ссылки/мягкой ссылки?

Ответы (7)

┌── ln(1) link, ln -- make links
│   ┌── Create a symbolic link.
│   │                         ┌── the optional path to the intended symlink
│   │                         │   if omitted, symlink is in . named as destination
│   │                         │   can use . or ~ or other relative paths
│   │                   ┌─────┴────────┐
ln -s /path/to/original /path/to/symlink
      └───────┬───────┘
              └── the path to the original file/folder
                  can use . or ~ or other relative paths
$ echo content > original
$ ln -s original symlink
$ ls -la original symlink
-rw-r--r--  1 grgarside  staff    8 28 Jan 18:44 original
lrwxr-xr-x  1 grgarside  staff    8 28 Jan 18:44 symlink -> original
$ cat symlink
content

Для получения дополнительной информации о ln(1) см . справочную страницу .

Путь к символической ссылке не является обязательным; если опущено, lnпо умолчанию создается ссылка с тем же именем, что и у адресата, в текущем каталоге:

$ cd ~/Documents
$ ln -s ../Pictures
$ ls -l Pictures
lrwxr-xr-x  1 user  staff  11 Feb  1 17:05 Pictures -> ../Pictures

Чтобы создать символическую ссылку для замены системного каталога (например, если вы хотите, чтобы она /Usersуказывала на другой диск), вам необходимо отключить защиту целостности системы . Вы можете повторно включить его после настройки символической ссылки.

Если бы только справочные страницы были такими же ясными, как ваш ответ!
в разрешении отказано :S можете ли вы дать мне подсказку? пытаюсь создать символическую ссылку для пользователей, чтобы я мог использовать ее на другом жестком диске, а ssd имеет только символическую ссылку. Благодарность
@Ewoks /Users защищен SIP. Вы можете отключить защиту целостности системы , чтобы настроить символическую ссылку (и снова включить ее позже, если хотите). Я добавил это к ответу.
Вам не нужно отключать SIP для символической ссылки на папки / файлы, защищенные SIP, например, ln -s /Users /Users/myuser/all-usersработает отлично. Вам нужно отключить SIP только в том случае, если вы хотите создать символическую ссылку в папке, защищенной SIP (как если бы вы хотели создать там любую другую запись каталога).
@patrix Я интерпретировал комментарий как желание заменить / Users символической ссылкой, а не создавать символическую ссылку, указывающую на / Users - разве это не то, что было задумано?
@grgarside Вот как я понимаю эвоков. Но я не так читаю ваше редактирование ответа.
@patrix Я отредактировал свой ответ, чтобы уточнить; не стесняйтесь редактировать дальше.
Забавный факт: оригиналу не обязательно существовать на самом деле. Команда ln -s "This directory is no longer in use" READMEбудет совершенно законной, и тогда любой, кто ее выполнит ls -l, увидит сообщение.
Для справки в будущем: вам не нужно перемещать / Users в macOS для экономии места. Вы можете изменить пути к домашним каталогам пользователей по отдельности в Системных настройках в разделе «Пользователи и группы», щелкнув правой кнопкой мыши записи списка пользователей.
Я всегда создавал неработающие символические ссылки, когда пытался ln -s ./original/source/ ../path/to/symlink, поэтому .оператор действительно все испортил для меня, используя весь путь с ~исправленным.
@caramba я никогда не пробовал ./original/source/; я бы использовал original/source.
ты волшебник

Команда называется ln. При использовании с опцией -sбудет создана символическая ссылка в текущем каталоге:

ln -s /any/file/on/the/disk linked-file
Должен ли связанный файл существовать первым? Я получаю сообщение о том, что файл не найден.
Не файл (если это так, вы получите сообщение об ошибке), а все каталоги по любому пути. Если вы застряли, не стесняйтесь задать новый вопрос, используя кнопку «Задать вопрос» в правом верхнем углу. Включите ссылку на этот вопрос, чтобы обеспечить контекст.
Символическая ссылка не должна существовать до запуска этой команды. Но насколько я знаю, требуется правильный путь. Если папка выходного файла не существует до запуска этой команды, вы также получите сообщение No such file or directoryоб ошибке.
@AlxVallejo Я продолжал получать ту же ошибку, вызванную глупой ошибкой, которую я использовал ls(по привычке) вместо ln! (обязательно проверьте это)

Я знаю, что этот вопрос явно касается Терминала, но если вы находитесь в Стране графического интерфейса и не хотите входить в Страну терминалов, вы можете использовать SymbolicLinker . Это помещает опцию «Создать символическую ссылку» в меню «Службы» в Finder.

Контекстное меню для папки с подменю «Службы» с выделенным пунктом «Создать символическую ссылку».

Контекстное меню для символической ссылки с выделенным пунктом «Создать символическую ссылку».

Я хотел бы знать, почему за это проголосовали, чтобы с этого момента я мог давать более качественные ответы :)
вероятно, потому что вопрос был «Как я могу создать символическую ссылку в Терминале?» Но я тебя не минусую :)
Означает ли это, что просто невозможно сделать это из Mac Gui без установки программного обеспечения? Кроме того, я не могу отделаться от мысли, что это можно было сделать с помощью Automator.
@EdwardFalk Я думаю, что в El Capitan вы можете удерживать Command+ Optionпри перетаскивании файла ... позже обновлю ответ
@BenLeggiero Это псевдоним.
@BenLeggerio, разница объясняется здесь: apple.stackexchange.com/questions/2991/…
Это должно быть абсолютно выполнимо с Automator...
@Wowfunhappy Не стесняйтесь опубликовать свой собственный ответ с подробным описанием того, как это сделать! 😁

Это просто ln -s <source> <destination>.

ln -s /some/dir/ ~/Desktop/dir

Вы также можете создать символическую ссылку для каталога, используя ту же команду

ln -s "$(pwd)" ~/Desktop/dir

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

Простой .(точка) даст pwd. Не надо мудреных аргументов :)
@mylogon хахаха, иногда я люблю поразмышлять. упростил мой ответ!
@mylogon я только что понял, что это .не работает на macOS. на линуксе еще не пробовал. использование ./привело к этому foo -> ./foo, который указывает на себя.
Какую полную команду вы набрали?

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

Например, если я попытаюсь создать символическую ссылку на папку «Изображения» внутри папки «Загрузки», в то время как cd находится в домашнем каталоге моего пользователя , это не сработает:

Users\stevebauman >_ ln -s Pictures Downloads

Вместо этого вы должны использовать:

Users\stevebauman >_ ln -s /Users/stevebauman/Pictures /Users/stevebauman/Downloads
Не совсем так - ссылку приходится разворачивать оттуда, где так работает ln -s ../Pictures Pictures. Ссылка работает так, как если бы вы перешли туда, где вы храните ссылку

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

$ ln -s '/any file/could have (special chars)/or spaces/test' '/some/other place/file'

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

$ pwd