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



Я хочу сделать символическую ссылку в Linux. Я написал эту команду bash, где первый путь-это папка, в которую я хочу связать, а второй путь-скомпилированный источник.



ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 


это правильно?

959   17  

17 ответов:

чтобы создать новую символическую ссылку (не получится, если она уже существует):

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

вы можете посмотреть на странице здесь:

http://linux.die.net/man/1/ln

(потому что изображение ASCII стоит тысячи символов.)

стрелка может быть полезной мнемоникой, тем более, что это почти точно так, как это выглядит в Emacs' dired.

и большая картина, чтобы вы не путали ее с версией Windows

Linux:

ln -s target <- linkName

Windows:

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 source_file target_file

http://unixhelp.ed.ac.uk/CGI/man-cgi?ln

к исходному вопросу:


'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

ln -s sourcepath linkpathname

Примечание:

- s создает символические ссылки вместо жестких ссылок

создание символических ссылок или ссылок на Linux:

откройте bash prompt и введите следующую команду, чтобы сделать символическую ссылку на ваш файл:

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  /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. Шаги:

  1. в файле vagrant создайте синхронизированную папку. например, конфиг.виртуальная память.synced_folder "F:/Sunburst/source/sunburst/lms", " / source" F:/Sunburst/source/sunburst/lms : - где исходный код, / source : - путь к каталогу внутри vagrant
  2. Vagrant up и введите vagrant ssh и перейдите в исходный каталог, например, cd source
  3. убедитесь, что структура папок исходного кода доступна в исходном каталоге. например /источник/местный
  4. затем перейдите в каталог гостевой машины, где файлы, которые связаны с браузером. После получения резервной копии файла. например sudo mv local local_bk
  5. затем создайте символическую ссылку, например sudo ln-s /source/local local. local mean link-name (имя папки на гостевой машине, которую вы собираетесь связать) если вам нужно удалить символическую ссылку : - введите sudo rm local

Comments

    Ничего не найдено.