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

351

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

Патрик
источник

Ответы:

543
┌── 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указывать на другой диск), вам необходимо отключить защиту целостности системы . Вы можете снова включить его после настройки символической ссылки.

Grg
источник
63
Если бы только справочные страницы были так же ясны, как и ваш ответ!
Адриан Линч
разрешение отказано: S вы можете дать мне подсказку? пытаясь создать символическую ссылку для пользователей, чтобы я мог использовать ее на другом жестком диске, а ssd имеет только символическую ссылку. спасибо
Ewoks
2
@patrix Я отредактировал свой ответ, чтобы уточнить; не стесняйтесь редактировать дальше.
grg
4
Интересный факт: оригинал не должен существовать. Команда ln -s "This directory is no longer in use" READMEбыла бы совершенно законной, и тогда любой выполняющий ls -lувидит сообщение.
Эдвард Фальк
1
Для дальнейшего использования: вам не нужно перемещать / Users в macOS для экономии места. Вы можете изменить пути к домашним каталогам пользователей по отдельности в Системных настройках в разделе «Пользователи и группы», щелкнув правой кнопкой мыши записи списка пользователей.
Питер В.
73

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

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

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

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

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

Бен Легжеро
источник
3
Я хотел бы знать, почему за это проголосовали, так что теперь я могу делать более качественные ответы :)
Бен Легжеро,
10
вероятно, потому что вопрос был "Как я могу создать символическую ссылку в Терминале?" Но я не буду принижать тебя :)
vedrano
1
@ EdwardFalk Я думаю, что в El Capitan, вы можете удерживать Command+ Optionво время перетаскивания файла ...
обновлю
1
@BenLeggiero Это делает псевдоним.
Энди Стюарт
2
@BenLeggerio, Разница объясняется здесь: apple.stackexchange.com/questions/2991/…
MiB
28

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

TheSqrtMinus1
источник
5

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

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

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

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

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