Как символическую ссылку на файл в Linux?
Я хочу сделать символическую ссылку в Linux. Я написал эту команду bash, где первый путь - это папка, в которую я хочу перейти, а второй путь - это скомпилированный источник.
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
Это правильно?
18 ответов
Чтобы создать новую символическую ссылку (произойдет сбой, если символическая ссылка уже существует):
ln -s /path/to/file /path/to/symlink
Чтобы создать или обновить символическую ссылку:
ln -sf /path/to/file /path/to/symlink
ln -s target linkName
Вы можете взглянуть на справочную страницу здесь:
(Потому что картинка 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 [ОПЦИЯ]... [-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
связывает существующий файл (первый аргумент) с новой ссылкой (второй аргумент) *
Последний вариант, который я хотел бы предложить, заключается в том, что вы можете создавать свои собственные справочные страницы, которые легко читать и легко (для вас) найти / запомнить. Просто создайте простой сценарий оболочки, который даст вам подсказку, которая вам нужна. Например, ♦:
В вашем файле.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
Создание символических ссылок или Soft-ссылок в 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)
Пример:
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 [-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.
Это переполнение стека, поэтому я предполагаю, что вы хотите код:
Весь следующий код предполагает, что вы хотите создать символическую ссылку с именем /tmp/link
это ссылки на /tmp/realfile
,
ВНИМАНИЕ: хотя этот код проверяет наличие ошибок, он не проверяет, /tmp/realfile
на самом деле существует! Это связано с тем, что недействительная ссылка все еще действительна и в зависимости от вашего кода вы можете (редко) захотите создать ссылку перед реальным файлом.
Оболочка (баш, зш,...)
#!/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 sourcepath linkpathname
Замечания:
-s делает символические ссылки вместо жестких ссылок
Если вы находитесь в каталоге, где вы хотите создать символическую ссылку, тогда игнорируйте второй путь.
cd myfolder
ln -s target
Это создаст символическую ссылку target
внутри myfolder
,
Общий синтаксис
ln -s TARGET LINK_NAME
Я хотел бы представить более понятную английскую версию описаний, уже представленных.
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" для "ссылки"); имя файла - "a:", а "->" также указывает, что файл является ссылкой. Это в основном говорит WINE, как Windows "Drive 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
Ссылки в основном бывают двух типов:
символические ссылки (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.
Спасибо
Я нахожу немного сбивающим с толку термины "цель" и "каталог" в информации о человеке.
Цель - это папка, на которую мы создаем символическую ссылку, и каталог фактической символической ссылки (а не каталог, на который вы будете ссылаться), если кто-то испытывает такую же путаницу, не чувствуйте себя одиноким.
Это моя интерпретация создания Symlink (в Linux):
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
Вы можете перейти к папке, в которой вы хотите создать символическую ссылку, и запустить команду или указать полный путь для символической ссылки вместо 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
Я надеюсь, что это помогает тем (все еще) немного запутанным.
Есть два типа ссылок:
символические ссылки: Ссылка на символический путь, указывающий абстрактное местоположение другого файла.
жесткие ссылки: обратитесь к конкретному местоположению физических данных.
В вашем случае символические ссылки:
ln -s source target
вы можете обратиться к http://man7.org/linux/man-pages/man7/symlink.7.html
Вы можете создавать слишком жесткие ссылки
Жесткая ссылка на файл неотличима от исходной записи каталога; любые изменения в файле фактически не зависят от имени, используемого для ссылки на файл. Жесткие ссылки обычно не ссылаются на каталоги и могут не охватывать файловые системы.
ln source link
Как создать символическую ссылку в vagrant. шаги:
- В бродячем файле создайте синхронизированную папку. например, config.vm.synced_folder "F:/Sunburst/source/sunburst/lms", "/source" F:/Sunburst/source/sunburst/lms:- где исходный код, /source:- путь к каталогу внутри бродяги
- Vagrant up и введите vagrant ssh и перейдите в исходный каталог, например, cd source
- Убедитесь, что структура вашего исходного кода доступна в исходном каталоге. например / источник / местный
- Затем перейдите в каталог гостевой машины, где находятся файлы, связанные с браузером. После получите резервную копию файла. например, sudo mv local local_bk
- Затем создайте символическую ссылку, например, sudo ln -s /source/local local. локальное среднее значение link-name (имя папки на гостевой машине, на которую вы собираетесь связать), если вам нужно удалить символическую ссылку: - Введите sudo rm local