如何在Linux中对文件进行符号链接?

chrissygormley 1865 linux symlink

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

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

它是否正确?

hsz.. 3587

要创建新的符号链接(如果已存在符号链接,则会失败):

ln -s /path/to/file /path/to/symlink

要创建或更新符号链接:

ln -sf /path/to/file /path/to/symlink

  • @micapam`ln`语法类似于`cp`语法,例如_source_ _destination_. (371认同)
  • 这里有一个助记符:l(i)n(k)-s(ymbolic)<target> <可选名称>(最后一个参数是可选的这一事实可以帮助你弄清楚它不是目标)(顺便说一句,忽略了符号链接的路径在当前目录中创建一个与目标相同的基本名称的链接) (148认同)
  • 我花了几分钟试图弄清楚为什么这对我不起作用.它创建了一个自循环链接.似乎/ path/to/file应该是绝对的而不是相对于"当前文件夹".或许在答案中指出这一点? (65认同)
  • @AbhishekAnand已经有几年了,但我只是想留下它*确实*与相对路径一起工作的说明; 它只需要相对于生成的符号链接的目录而不是当前目录.你写的第一个路径参数实际上是逐字的,这个文本将出现在符号链接中; 这就是为什么,当它是相对的时,它必须是相对于链接的. (48认同)
  • @micapam正如`cp`是`CoPy`,`ln`是'LiNk`.第一和第三个字母. (29认同)
  • @micapam有没有让你更容易记忆的助记符?也许"ln -s实际链接",实际按字母顺序排在第一位? (9认同)
  • @UncleZeiv在手册中,它说`ln [-Ffhinsv] source_file [target_file]`,`ln [-Ffhinsv] source_file ... target_dir`,`link source_file target_file`,所以调用第一个参数`target`可能会搞乱如果他们以后再去手册,那就是人们的想法.XD (4认同)
  • 与Windows mklink相反的顺序.叹. (2认同)

cyborg.. 288

ln -s TARGET LINK_NAME

在哪里-s使它具有象征意义.

  • 我喜欢这样说:`ln -s where-the-symlink-should-point where-to-place-the-symlink-its`. (22认同)
  • _TARGET和LINKNAME_是更好的记忆方式。btw删除符号链接使用:`unlink LINK_NAME` (2认同)

codaddict.. 276

ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

  • 除了它不是新的符号链接名称.它是包含名称的新符号链接的名称或完整路径(相对于cur dir或绝对路径). (3认同)
  • 比公认的答案更好,简洁明了。 (2认同)

rui.. 91

ln -s target linkName

您可以在这里查看手册页:

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

  • 很高兴提到"目标"而不仅仅是"文件" (6认同)

Brady Traino.. 82

(因为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 Original Newfile(符号链接) (2认同)

小智.. 23

ln -s source_file target_file

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

  • 与"man ln"相比,这是"目标"的相反定义,称为"ln -s TARGET LINK_NAME" (4认同)

Mike.. 19

原来的问题:


'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"来访问它,或者只需打开一个终端窗口并键入man ln即可获得相同的信息.该手册页明确指出:

ln [OPTION] ... [-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将当前存在的文件(第一个参数)链接到新链接(第二个参数)*


我想建议的最后一个选项是你可以创建自己的手册页,这些手册页易于阅读,并且很容易找到/记住.只需创建一个简单的shell脚本,为您提供所需的提示.例如:

在.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的例子


miku.. 16

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.


Ankit Raj.. 12

在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


小智.. 11

ln -s sourcepath linkpathname

注意:

-s使用符号链接而不是硬链接


Fizer Khan.. 10

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

cd myfolder
ln -s target

它将创建target内部的符号链接myfolder.

一般语法

ln -s TARGET LINK_NAME


Garo.. 9

这是Stack Overflow,所以我假设你想要代码:

以下所有代码均假定您要创建一个名为/tmp/link链接的符号链接/tmp/realfile.

注意:虽然此代码检查错误,但它不会检查是否/tmp/realfile确实存在!这是因为死链接仍然有效,并且根据您的代码,您可能(很少)想要在真实文件之前创建链接.


Shell(bash,zsh,...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

真的很简单,就像你在命令行(它是shell)上做的那样.所有错误处理都由shell解释器完成.此代码假定您有一个工作的shell解释器/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.在其他情况下,我将失败原因打印到标准错误输出.


vernonner3vo.. 7

我想提出一份简洁英文版的描述.

 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中的软盘驱动器相关联.要实际创建一个符号链接SIMILAR(在当前目录中,实际上为WINE执行此操作)更复杂;使用"winecfg"实用程序):

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


Prem S.. 6

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

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

例如:

ln -s file1 link1