Как создать символическую ссылку на файл в Linux?
Я хочу сделать символическую ссылку в Linux. Я написал эту команду bash, где первый путь-это папка, в которую я хочу связать, а второй путь-скомпилированный источник.
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
это правильно?
17 ответов:
чтобы создать новую символическую ссылку (не получится, если она уже существует):
ln -s /path/to/file /path/to/symlinkсоздать или обновить ссылку:
ln -sf /path/to/file /path/to/symlink
(потому что изображение ASCII стоит тысячи символов.)
стрелка может быть полезной мнемоникой, тем более, что это почти точно так, как это выглядит в Emacs' dired.
и большая картина, чтобы вы не путали ее с версией Windows
Linux:
ln -s target <- linkNameWindows:
mklink linkName -> targetвы также можете посмотреть на них, как
ln -s "to-here" <- "from-here" mklink "from-here" -> "to-here"The
from-hereне существует, он будет создан, аto-hereдолжен уже существовать (IIRC).(Я всегда путаюсь в том, должны ли различные команды и аргументы включать в себя уже существующее местоположение или одно из них.)
EDIT: он все еще медленно погружается для меня; у меня есть другой способ, который я написал в своих заметках.
ln -s (target exists) (link is made) mklink (link is made) (target exists)
к исходному вопросу:
'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'это действительно создаст символическую ссылку (
-s) из файла/директории:<basebuild>/IpDome-kernel/kernelв вашей новой ссылке
/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
вот несколько способов, чтобы помочь вам запомнить:
во-первых, есть man page for
ln. Вы можете получить доступ к этому через поиск "man ln" в google, или просто откройте окно терминала и введитеman lnи вы получите та же информация. На главной странице четко указано:ln [опция]... [- T] TARGET LINK_NAME (1-я форма)
если необходимость искать или читать через man-страницу каждый раз не для вас, может быть, вам будет легче запомнить, что все команды nix работают одинаково:
cp /file/that/exists /location/for/new/file mv /file/that/exists /location/its/moving/to ln /file/that/exists /the/new/link
cpкопирует файл, который существует в данный момент (первый аргумент) в новый файл (второй аргумент).mvперемещает существующий файл (первый аргумент) на новое место (второй аргумент)
Аналогичным образомlnсвязывает существующий файл (первый аргумент) с новой ссылкой (второй аргумент)*
последний вариант, который я хотел бы предложить, это вы можете создать свои собственные man-страницы, которые легко читать и легко (для вас) найти/запомнить. Просто сделайте простой сценарий оболочки, который дает вам подсказку вам нужно. Например♦:
в свой .файл bash_aliases вы можете разместить что-то вроде:
commandsfx() { echo "Symlink: ln -s /path/to/file /path/to/symlink" echo "Copy: cp /file/to/copy /destination/to/send/copy" } alias 'cmds'=commandsfxтогда, когда вам это нужно, из командной строки типа
cmdsи ты вернешься на правильный синтаксис таким образом, вы можете быстро прочитать и понять его. Вы можете сделать эти функции такими продвинутыми, как вы хотели бы получить какую информацию вы нужно, это зависит от вас. Вы даже можете сделать их интерактивными, поэтому вам просто нужно следовать подсказкам.. что-то вроде:makesymlink() { echo "Symlink name:" read sym echo "File to link to:" read fil ln -s $fil $sym } alias 'symlink'=makesymlink* - ну, очевидно, что все они могут принимать разные параметры и делать разные вещи и могут работать с файлами, а также каталогами... но предпосылка та же
♦ - примеры использования оболочки bash
ln [-Ffhinsv] source_file [target_file] link, ln -- make links -s Create a symbolic link. A symbolic link contains the name of the file to which it is linked. An ln command appeared in Version 1 AT&T UNIX.
если вы находитесь в директории, где вы хотите создать ссылку, а затем игнорировать второй путь.
cd myfolder ln -s targetон создаст символическую ссылку
targetвнутриmyfolder.общий синтаксис
ln -s TARGET LINK_NAME
создание символических ссылок или ссылок на Linux:
откройте bash prompt и введите следующую команду, чтобы сделать символическую ссылку на ваш файл:
A) перейдите в папку, в которой вы хотите создать мягкую ссылку и введите команду, как указано ниже:
$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-fileB) перейти к новому пути имени файла и типа:
$ ls -lrt (To see if the new-file is linked to the file or not)пример:
ls -lrt
lrwxrwxrwx 1 user user 24 Aug 6 23:40 new-file -> /home/user/file
Note: Where, A -> B Means, A is symbolically linked to B
Я хотел бы представить более простую английскую версию уже представленных описаний.
ln -s /path-text/of-symbolic-link /path/to/file-to-hold-that-textкоманда "ln "создает файл ссылки, а"-s " указывает, что тип ссылки будет символьным. Пример файла символьной ссылки можно найти в установке WINE (используя "ls-la"для отображения одной строки содержимого каталога):
lrwxrwxrwx 1 me power 11 Jan 1 00:01 a: -> /mnt/floppyстандартная информация о файле находится слева (хотя обратите внимание, что первый символ-это " l "для" link"); имя файла- " a:" и "- > " также указывает, что файл является ссылкой. Он в основном рассказывает WINE, как Windows "Drive a:" должен быть связан с дисководом гибких дисков в Linux. Чтобы на самом деле создать символическую ссылку, подобную этой (в текущем каталоге, и на самом деле сделать это для WINE сложнее; используйте утилиту "winecfg"):
ln -s /mnt/floppy a: //will not work if file a: already exists
это переполнение стека, поэтому я предполагаю, что вы хотите код:
все следующий код предполагает, что вы хотите создать символическую ссылку с именем
/tmp/linkссылки/tmp/realfile.осторожностью: хотя этот код проверяет наличие ошибок, он не проверяет, если
/tmp/realfileна самом деле существует ! Это связано с тем, что мертвая ссылка все еще действительна, и в зависимости от вашего кода Вы можете (редко) захотеть создать ссылку перед реальным файлом.
Shell (bash, ЗШ, ...)
#!/bin/sh ln -s /tmp/realfile /tmp/linkочень просто, так же, как вы бы сделали это в командной строке (которая является оболочкой). Вся обработка ошибок выполняется интерпретатором оболочки. Этот код предполагает, что у вас есть рабочий интерпретатор оболочки в
/bin/sh.при необходимости, вы все еще можете реализовать собственную обработку ошибок с помощью
$?переменная, которая будет установлена только в 0, если ссылка была успешно создана.C и C++
#include <unistd.h> #include <stdio.h> int main () { if( symlink("/tmp/realfile", "/tmp/link") != 0 ) perror("Can't create the symlink"); }
symlinkтолько возвращает 0, когда ссылка может быть создана. В других случаях я используюperrorрассказать больше о проблеме.Perl
#!/usr/bin/perl if( symlink("/tmp/realfile", "/tmp/link") != 1) { print STDERR "Can't create the symlink: $!\n" }этот код предполагает, что у вас есть интерпретатор perl 5 в
/usr/bin/perl.symlinkвозвращает 1, Если ссылка может быть создана. В других случаях я печатаю причину сбоя в стандартный вывод ошибок.
чтобы создать символическую ссылку / мягкую ссылку, используйте:
ln -s {source-filename} {symbolic-filename}например:
ln -s file1 link1
существует два типа ссылок:
символические ссылки: обратитесь к символическому пути, указывающему абстрактное расположение другого файла
жесткие ссылки: обратитесь к определенному местоположению физических данных.
в вашем случае символические ссылки:
ln -s source targetвы можете обратиться к http://man7.org/linux/man-pages/man7/symlink.7.html
вы можете создать слишком жесткие ссылки
жесткая ссылка на файл неотличима от исходная запись каталога; любые изменения в файле фактически не зависят от имени, используемого для ссылки на файл. Жесткие ссылки обычно не относятся к каталогам и не могут охватывать файловые системы.
ln source link
Я нахожу немного запутанной терминологию "цель" и "каталог" в информации о человеке.
цель-это папка, на которую мы ссылаемся, а каталог-фактическая символическая ссылка (а не каталог, на который вы будете ссылаться), если кто-то испытывает ту же путаницу, не чувствуйте себя одиноким.
Это моя интерпретация создания символической ссылки (в Linux):
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINKвы можете перейти в папку, где вы хотите создать ссылку и выполните команду или укажите полный путь для вашей символической ссылки вместо имени вашей символической ссылки.
cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINKили
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINKЯ надеюсь, что это помогает тем (все еще) слабо смущенным.
Как создать символическую ссылку в vagrant. Шаги:
- в файле vagrant создайте синхронизированную папку. например, конфиг.виртуальная память.synced_folder "F:/Sunburst/source/sunburst/lms", " / source" F:/Sunburst/source/sunburst/lms : - где исходный код, / source : - путь к каталогу внутри vagrant
- Vagrant up и введите vagrant ssh и перейдите в исходный каталог, например, cd source
- убедитесь, что структура папок исходного кода доступна в исходном каталоге. например /источник/местный
- затем перейдите в каталог гостевой машины, где файлы, которые связаны с браузером. После получения резервной копии файла. например sudo mv local local_bk
- затем создайте символическую ссылку, например sudo ln-s /source/local local. local mean link-name (имя папки на гостевой машине, которую вы собираетесь связать) если вам нужно удалить символическую ссылку : - введите sudo rm local
Comments