Как символически связать файл в 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

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"

на 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

вот несколько способов, чтобы помочь вам запомнить:

во-первых, есть страница для 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 и введите следующую команду, чтобы сделать символическую ссылку на файл:

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

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