我想在Linux中建立符号链接。我写了这个Bash命令,其中第一个路径是我要链接到的文件夹,第二个路径是编译后的源。

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


这是正确的吗?

评论

您可能应该在unix.stackexchange.com
问这个问题
也许是superuser.com。

#1 楼

要创建新的符号链接(如果已经存在符号链接,将失败):
ln -s /path/to/file /path/to/symlink

要创建或更新符号链接:
ln -sf /path/to/file /path/to/symlink


评论


@micapam ln语法类似于cp语法,例如源目的地。

–安德烈
2014年4月6日在16:26

这是给您的助记符:l(i)n(k)-s(ymbolic) <可选名称>(最后一个参数是可选参数的事实有助于您确定它不是目标)(顺便说一句,符号链接的路径会在当前目录中创建一个与目标名称相同的链接)

– UncleZeiv
2014年5月22日14:55

@micapam就像cp是CoPy一样,ln是LiNk。第一个和第三个字母。

–科尔·约翰逊(Cole Johnson)
2014年8月15日在20:48

我花了几分钟试图弄清楚为什么这对我不起作用。它创建了一个自循环链接。似乎/ path / to / file应该是绝对的,而不是相对于“当前文件夹”的。也许在答案中指出这一点?

– Abhishek Anand
15年5月24日在3:56



@AbhishekAnand已经有几年了,但是我只想留意它确实适用于相对路径。它只需要相对于生成的符号链接的目录是相对的,而不是当前目录。实际上,作为第一个路径参数编写的实际上是将在符号链接内的文本;这就是为什么当它是相对的时,它必须相对于链接。

– JoL
17 Mar 27 '17在15:34

#2 楼

ln -s TARGET LINK_NAME


-s使其具有象征意义。

评论


TARGET和LINKNAME是更​​好的记忆方式。 btw用于删除符号链接使用:取消链接LINK_NAME

– Silvan
17年7月6日在12:52

我喜欢这样说:ln -s符号链接应指向自己放置符号链接的位置。

–totymedli
18-3-14的15:00

@Silvan您可以通过rm删除符号链接,但是大多数人不知道删除尾随的/。

– FreeSoftwareServers
18年11月6日,11:27



#3 楼

ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME


评论


比公认的答案更好,简洁明了。

–乔什·哈布达斯(Josh Habdas)
18'八月7'在11:09



除了不是新的符号链接名称。它是包含该名称的新符号链接的名称或完整路径(相对于cur dir或绝对路径)。

–David Spector
18-09-15在16:47

ln -s EXISTING_FILE_OR_DIRECTORY {到/} SYMLINK_NAME的可选路径,并且不要在符号链接上加上斜杠,因为它不是目录

–今日
19年7月11日在4:49



#4 楼

ln -s target linkName


您可以在此处查看手册页:

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

评论


值得一提的是“目标”而不是“文件”

–艾莉亚丝(Alyas)
16年4月15日在9:22

#5 楼

(因为ASCII图片值得一千个字符。)

箭头可能是一个有用的助记符,特别是因为这几乎完全像它在Emacs的导航中的样子。

总的来说,不要把它与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)。

(我总是对各种命令和参数应该包含一个预先存在的位置还是要包含的位置感到困惑。)

编辑:它仍然在缓慢地沉没为了我;我在笔记中写了另一种方式。

ln -s (target exists) (link is made)
mklink (link is made) (target exists)


评论


在Emacs的指引下,这非常简单,将光标放在目标上,按S,然后输入要在其中创建链接的目录。缩短了想象所需结果与打字之间的距离。参见gnu.org/software/emacs/manual/html_node/emacs/…。

–防撞训练师
2014年8月2日,0:33



我的助记符打开:ln -s Original Newfile(符号链接)

– robstarbuck
16年7月29日在15:41



这对我有用

–海德·阿里(Haider Ali)
18年4月16日在7:32

#6 楼

ln -s source_file target_file


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

评论


与man ln相比,它是“目标”的相反定义,后者称为ln -s TARGET LINK_NAME

– Wisbucky
17 Mar 25 '17 at 0:33

#7 楼

原始问题:


'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的手册页。您可以通过在Google中搜索“ man ln”来访问此文件,也可以打开终端窗口并键入man ln,您将获得相同的信息。该手册页明确指出:



ln [OPTION] ... [-T]目标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 "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 shell的示例

#8 楼

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.


#9 楼

在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


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B


#10 楼

ln -s sourcepath linkpathname

注意:

-s使符号链接代替硬链接

#11 楼

如果位于要创建符号链接的目录中,请忽略第二个路径。

cd myfolder
ln -s target


它将在target内创建myfolder的符号链接。

常规语法

ln -s TARGET LINK_NAME


#12 楼

这是堆栈溢出,因此我假定您需要代码:
以下所有代码均假定您要创建一个名为/tmp/link的符号链接,该符号链接链接到/tmp/realfile
注意:尽管此代码检查错误,但它不会检查/tmp/realfile是否确实存在!这是因为无效链接仍然有效,并且根据您的代码,您可能(很少)要在真实文件之前创建链接。

Shell(bash,zsh等)
 #!/bin/sh
ln -s /tmp/realfile /tmp/link
 

非常简单,就像您可以在命令行(shell)上一样。所有错误处理均由外壳解释器完成。该代码假定您在/bin/sh处具有有效的shell解释器。
如果需要,您仍可以使用$?变量来实现自己的错误处理,该变量只有在成功创建链接后才会设置为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"
}
 

此代码假定您在/usr/bin/perl上有一个perl 5解释器。如果可以创建链接,则symlink仅返回1。在其他情况下,我会将失败原因打印到标准错误输出。

评论


增加了说明,对于无效链接也要小心。我没有检查这个,因为不能认为这是不需要的,而且因为文件测试不再是主题

–加罗
18-2-2在10:51



#13 楼

我想提供已经介绍过的描述的普通英语版本。

 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


Standard文件信息的内容在左边(尽管请注意第一个字符是“ link”的“ l”);文件名是“ a:”,“->”也表示文件是链接。它基本上告诉WINE Windows将“ Drive A:”与Linux中的软盘驱动器相关联。实际创建一个与此类似的符号链接(在当前目录中,并且为WINE实际执行此操作更复杂;请使用“ winecfg”实用程序):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists


#14 楼

要创建符号链接/软链接,请使用:

ln -s {source-filename} {symbolic-filename}


例如:

ln -s file1 link1


#15 楼

链接有两种类型:符号链接:表示另一个文件的抽象位置的符号路径。

硬链接:指物理数据的特定位置。

在您的情况下,符号链接:

ln -s source target


您可以参考http://man7.org/linux/man-pages/man7/ symlink.7.html

您可以创建太硬的链接

与文件的硬链接无法与原始目录条目区分开;对文件的任何更改实际上都独立于用于引用文件的名称。硬链接通常可能不指向目录,并且可能不会跨越文件系统。

ln source link


#16 楼

链接基本上有两种类型:

符号链接(软):指向符号路径的链接,该路径指示另一个文件的抽象位置

硬链接:链接到特定位置的链接物理数据。

示例1:

ln /root/file1 /root/file2


以上是硬链接的示例,您可以在其中获得物理数据的副本。

示例2:

ln -s /path/to/file1.txt /path/to/file2.txt


以上命令将创建指向file1.txt的符号链接。

如果删除源文件,则软目标中将没有任何内容。

执行此操作时:

ls -lai

会发现符号链接有不同的inode编号。

有关更多详细信息,您可以在Linux OS上阅读ln的手册页。

评论


硬链接,您可以在其中获得物理数据的副本-我认为我们不会创建物理数据的副本。相同物理数据的另一个名称。

–亚历山大·拉琴科(Alexander Radchenko)
19-09-2 17:51



#17 楼

我发现手册信息中的术语“目标”和“目录”有些混乱。

目标是我们进行符号链接的文件夹,以及实际符号链接的目录(而不是您将要进行符号链接的目录),如果有人遇到相同的困惑,请不要感到孤独。

这是我对创建Symlink(在Linux中)的解释:

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK


您可以导航到要在其中创建目录的文件夹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


我希望这可以帮助那些仍然困惑的人。

#18 楼

如何在无业游民中创建符号链接。
步骤:


在流浪者文件中创建一个同步文件夹。例如config.vm.synced_folder“ F:/ Sunburst / source / sunburst / lms”,“ / source”
F:/ Sunburst / source / sunburst / lms:-其中源代码,/ source:-目录路径在流浪汉中
流浪汉,键入vagrant ssh并转到源目录,例如cd source
验证源代码文件夹结构在源目录中是否可用。例如/ source / local
,然后转到来宾计算机目录,该文件是与浏览器关联的文件。获得文件备份后。例如sudo mv local local_bk
然后创建符号链接,例如sudo ln -s / source / local local。本地平均链接名称(要链接的来宾计算机中的文件夹名称)
,如果需要删除符号链接:-键入sudo rm local