Я хочу сделать символическую ссылку в Linux. Я написал эту команду Bash, где первый путь - это папка, на которую я хочу создать ссылку, а второй путь - это скомпилированный исходный код.
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
Это правильно?
Ответ 1
Чтобы создать новую символическую ссылку (не получится, если символическая ссылка уже существует):
ln -s /path/to/file /path/to/symlink
Чтобы создать или обновить символическую ссылку:
ln -sf /path/to/file /path/to/symlink
Ответ 2
В 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).
(Я не уверен, должны ли различные команды и аргументы включать уже существующее местоположение или они должны быть созданы.)
ln -s (target exists) (link is made)
mklink (link is made) (target exists)
Ответ 3
К исходному вопросу:
'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 ln» в Google, или просто откройте окно терминала и введите текст man ln и вы получите ту же информацию. На странице руководства четко указано:
ln [OPTION] ... [-T] TARGET LINK_NAME (первая форма)
Если необходимость каждый раз искать или читать справочную страницу – не для вас, возможно, вам будет легче запомнить, что все команды 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» связывает существующий в данный момент файл (первый аргумент) с новой ссылкой (второй аргумент).Последний вариант, который я хотел бы предложить, - вы можете создавать свои собственные справочные страницы, которые легко читать и легко (для вас) найти/запомнить. Просто создайте простой сценарий оболочки, который даст вам нужную подсказку. Например:
в вашем файле .bash_aliases вы можете разместить что-то вроде:
commandsfx() {
echo "Символическая ссылка: ln -s /path/to/file /path/to/symlink"
echo "Копирование: cp /file/to/copy /destination/to/send/copy"
}
alias 'cmds'=commandsfx
Затем, когда вам это понадобится, просто введите в командной строке «cmds» и вы получите правильный синтаксис, который вы можете быстро прочитать и понять. Вы можете сделать эти функции настолько продвинутыми, насколько хотите, чтобы получить необходимую информацию, решать вам. Вы даже можете сделать их интерактивными, чтобы вам просто нужно было следовать подсказкам... Что-то вроде этого:
makesymlink() {
echo "Имя символической ссылки:"
read sym
echo "Ссылка на файл:"
read fil
ln -s $fil $sym
}
alias 'symlink'=makesymlink
Ответ 4
Создание символических ссылок или софт-ссылок в Linux:
Откройте командную строку 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)
Пример:
user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user 0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user 0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B
Ответ 5Весь следующий код предполагает, что вы хотите создать символическую ссылку с именем /tmp/link, указывающим на /tmp/realfile.
ВНИМАНИЕ : Хотя этот код проверяет наличие ошибок, он НЕ проверяет, существуют ли /tmp/realfile на самом деле! Это связано с тем, что мертвая ссылка все еще действительна, и в зависимости от вашего кода вы можете (редко) захотеть создать ссылку до реального файла.
Оболочка (bash, zsh, ...)
#!/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 "Не удалось создать symlink: $!\n"
}
В этом коде предполагается, что у вас есть интерпретатор Perl 5 в /usr/bin/perl. Symlink возвращает 1, если ссылка может быть создана. В других случаях я печатаю причину сбоя в стандартном выводе ошибок.
Linux