Linux

Как я могу создать символическую ссылку на файл в Linux

Я хочу сделать символическую ссылку в 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/perlSymlink  возвращает 1, если ссылка может быть создана. В других случаях я печатаю причину сбоя в стандартном выводе ошибок.

Схожие статьи

Установка Linux на ARM. Подробная пошаговая инструкция и советы
Linux

Установка Linux на ARM. Подробная пошаговая инструкция и советы

Linux

Как я могу профилировать код, работающий в Linux?

Linux

Команда df в Linux не показывает правильное свободное пространство после удаления файла

Linux

Защита SuperMicro IPMI BMC

×