Ответ 1
Чтобы создать новую символическую ссылку (не удастся, если уже существует символическая ссылка):
ln -s /path/to/file /path/to/symlink
Чтобы создать или обновить символическую ссылку:
ln -sf /path/to/file /path/to/symlink
Я хочу создать символическую ссылку в Linux. Я написал эту команду bash, где первый путь - это папка, в которую я хочу установить ссылку, а второй путь - скомпилированный источник.
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
Правильно ли это?
Чтобы создать новую символическую ссылку (не удастся, если уже существует символическая ссылка):
ln -s /path/to/file /path/to/symlink
Чтобы создать или обновить символическую ссылку:
ln -sf /path/to/file /path/to/symlink
ln -s TARGET LINK_NAME
Где символ -s
делает его символьным.
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
ln -s target linkName
Вы можете посмотреть man-страницу здесь:
(Потому что изображение ASCII стоит тысячи символов.)
Стрела может быть полезной мнемонической, тем более, что это почти так, как она выглядит в Emacs.
И большая картина, чтобы вы не путали ее с версией Windows
Linux:
ln -s target <- linkName
Окна:
mklink linkName -> target
Вы также можете посмотреть на них как
ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"
От from-here
не должно существовать, оно должно быть создано, в то время как to-here
должно быть уже (IIRC).
(Меня всегда путают в том, должны ли различные команды и аргументы включать ранее существовавшее местоположение или одно из них.)
РЕДАКТОР: Он все еще медленно погружается для меня; У меня есть другой способ, который я написал в своих заметках.
ln -s (target exists) (link is made)
mklink (link is made) (target exists)
ln -s source_file target_file
В исходный вопрос:
'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 [OPTION]... [-T] TARGET LINK_NAME (1-я форма)
Если вам приходится искать или читать справочную страницу каждый раз не для вас, возможно, вам будет легче запомнить, что все команды 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
связывает существующий файл (первый аргумент) с новой ссылкой (второй аргумент) *
Последний вариант, который я хотел бы предложить, - это создать свои собственные страницы руководства, которые легко читать и легко (для вас) найти/запомнить. Просто создайте простую оболочку script, которая даст вам подсказку, в которой вы нуждаетесь. Например, ♦:
В вашем файле .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.
Откройте приглашение Bash и введите указанную ниже команду, чтобы сделать символическую ссылку на ваш файл:
A) Откройте папку, в которой вы хотите создать мягкую ссылку, и введите команду, как указано ниже:
$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s/home/user/file new-file
B) Перейдите к вашему пути и введите новый тип файла:
$ 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 sourcepath linkpathname
Примечание:
-s создает символические ссылки вместо жестких ссылок
Если вы находитесь в каталоге, в котором хотите создать символическую ссылку, затем игнорируйте второй путь.
cd myfolder
ln -s target
Он создаст символическую ссылку target
внутри myfolder
.
Общий синтаксис
ln -s TARGET LINK_NAME
Это переполнение стека, поэтому я предполагаю, что вы хотите код:
Весь следующий код предполагает, что вы хотите создать символическую ссылку с именем /tmp/link
которая ссылается на /tmp/realfile
.
ВНИМАНИЕ: Несмотря на то, что этот код проверяет наличие ошибок, он НЕ проверяет, существует ли /tmp/realfile
! Это связано с тем, что мертвая ссылка по-прежнему действительна и в зависимости от вашего кода вы можете (редко) захотеть создать ссылку перед реальным файлом.
#!/bin/sh
ln -s /tmp/realfile /tmp/link
Реальный прост, как и вы делали это в командной строке (это оболочка). Вся обработка ошибок выполняется интерпретатором оболочки. Этот код предполагает, что у вас есть интерпретатор рабочей оболочки в /bin/sh
.
При необходимости вы все равно можете реализовать свою собственную обработку ошибок, используя $?
переменная, которая будет установлена только в 0, если ссылка была успешно создана.
#include <unistd.h>
#include <stdio.h>
int main () {
if( symlink("/tmp/realfile", "/tmp/link") != 0 )
perror("Can't create the symlink");
}
symlink
возвращает 0 только при создании ссылки. В других случаях я использую perror
чтобы больше рассказать о проблеме.
#!/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 /path-text/of-symbolic-link /path/to/file-to-hold-that-text
Команда "ln" создает файл link-FILE, а "-s" указывает, что тип ссылки будет символическим. Пример файла символической ссылки можно найти в установке WINE (используя "ls -la" для отображения одной строки содержимого каталога):
lrwxrwxrwx 1 me power 11 Jan 1 00:01 a: -> /mnt/floppy
Стандартная файловая информация находится слева (хотя обратите внимание, что первый символ - "l" для "link" ); имя файла - "a:", а "- > " также указывает, что файл является ссылкой. В основном это говорит WINE, как Windows "Диск A:" должна быть связана с флоппи-диском в Linux. Чтобы фактически создать символическую ссылку, похожую на нее (в текущем каталоге и на самом деле сделать это для WINE, сложнее, используйте утилиту winecfg):
ln -s /mnt/floppy a: //will not work if file a: already exists
Чтобы создать символическую ссылку/софт-ссылку, используйте:
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" в информации о человеке.
Цель - это папка, в которую мы привязываемся, и каталог - фактическая символическая ссылка (а не каталог, на который вы будете ссылаться), если кто-то испытывает ту же путаницу, не чувствуйте себя в одиночестве.
Это моя интерпретация создания Symlink (в Linux):
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
Вы можете перейти к папке, в которой вы хотите создать символическую ссылку, и запустить команду или указать FULL PATH для вашей символической ссылки вместо 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
Надеюсь, это поможет тем (тем не менее) запутаться.
ссылки в основном бывают двух типов:
символические ссылки (Soft): ссылка на символический путь, указывающий на абстрактное местоположение другого файла
жесткие ссылки: ссылка на конкретное местоположение физических данных.
Пример 1: ln/root/file1/root/file2
Выше приведен пример жесткой ссылки, где вы можете получить копию своих физических данных.
Пример 2: ln -s/path/to/file1.txt/path/to/file2.txt
Выше команда создаст символическую ссылку на file1.txt.
Если вы удалите исходный файл, у вас не будет ничего к месту назначения в Soft
когда вы делаете:
ls -lai
Вы увидите, что есть другой номер инода для символических ссылок.
Для более подробной информации вы можете прочитать man of ln на вашем Linux OS.
Спасибо
Как создать символическую ссылку в бродяге. Шаги: