Как символически связать файл в 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 <- linkName
Windows:
mklink linkName -> target
вы также можете посмотреть на них, как
ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"
на 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
вот несколько способов, чтобы помочь вам запомнить:
во-первых, есть страница для 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 и введите следующую команду, чтобы сделать символическую ссылку на файл:
A) перейти к папке, где вы хотите создать мягкую ссылку и typeout команду, как указано ниже:
$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file
B) Goto ваш путь к имени нового файла и тип:
$ 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. Чтобы на самом деле создать символическую ссылку, подобную этой (в текущем каталоге, и на самом деле сделать это для вина сложнее; используйте утилиту "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
Я нахожу немного запутанным терминологию "target" и "directory" в информации о человеке.
цель-это папка, с которой мы связываемся, и каталог фактической символической ссылки (а не каталог, с которым вы будете связываться), если кто-то испытывает ту же путаницу, не чувствуйте себя одиноким.
Это моя интерпретация создания символической ссылки (в 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 создайте синхронизированную папку. e.G config.виртуальная память.synced_folder "F:/Sunburst/source/sunburst/lms", " / source" F:/Sunburst/source/sunburst/lms : - где исходный код, / source : - путь к каталогу внутри vagrant
- Vagrant up и введите vagrant ssh и перейдите в исходный каталог e.G источник cd
- убедитесь, что структура папок исходного кода доступна в исходном каталоге. например /источник/местный
- затем перейдите в каталог гостевой машины, где файлы, которые связаны с браузером. После получения резервной копии файла. e.g sudo MV local local_bk
- затем создайте символическую ссылку e.G sudo ln-s / источник / локальный локальный. локальное среднее имя ссылки (имя папки в гостевой машине, которую вы собираетесь связать) если вам нужно удалить символическую ссылку: - введите sudo rm local