2106

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

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

它是否正确?

4

18 回答 18

3915

创建一个新的符号链接(如果符号链接已经存在,将会失败):

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

要创建或更新符号链接:

ln -sf /path/to/file /path/to/symlink
于 2009-12-23T09:52:24.627 回答
320
ln -s TARGET LINK_NAME

-s使它具有象征意义的地方。

于 2009-12-23T09:53:11.693 回答
312
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
于 2009-12-23T09:58:42.020 回答
98
ln -s target linkName

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

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

于 2009-12-23T09:52:45.783 回答
96

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

箭头可能是一个有用的助记符,尤其是因为它在 Emacs 的 dired 中看起来几乎完全一样。

和大图,所以你不会把它与 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)
于 2014-05-05T18:09:47.143 回答
25
ln -s source_file target_file

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

于 2013-10-14T04:13:48.410 回答
22

对于原来的问题:


'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(第一种形式)


如果您不适合每次都必须搜索或阅读手册页,那么您可能会更容易记住所有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 脚本,即可为您提供所需的提示。例如♦</sup>:

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

于 2014-08-06T13:42:42.533 回答
19
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.
于 2009-12-23T09:56:55.327 回答
16

在 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
于 2016-11-06T18:32:08.673 回答
12

ln -s sourcepath linkpathname

笔记:

-s创建符号链接而不是硬链接

于 2015-05-11T07:34:31.020 回答
11

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

cd myfolder
ln -s target

它将创建targetinside的符号链接myfolder

一般语法

ln -s TARGET LINK_NAME
于 2014-04-16T10:56:44.283 回答
11

这是堆栈溢出,所以我假设您需要代码:

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

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


外壳(bash、zsh、...)

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

非常简单,就像您在命令行(即 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。在其他情况下,我将失败原因打印到标准错误输出。

于 2018-02-01T21:11:23.743 回答
8

我想提供一个更简单的英文版本的描述。

 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”);文件名是“a:”,“->”也表示文件是一个链接。它基本上告诉 WINE Windows“驱动器 A:”是如何与 Linux 中的软盘驱动器相关联的。要实际创建一个与该符号链接类似的符号链接(在当前目录中,并且实际为 WINE 执行此操作更复杂;使用“winecfg”实用程序):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists
于 2014-04-04T14:19:20.920 回答
7

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

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

例如:

ln -s file1 link1
于 2017-07-10T19:30:17.010 回答
5

链接基本上有两种类型:

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

硬链接:链接到物理数据的具体位置。

示例 1:

ln /root/file1 /root/file2

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

示例 2:

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

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

如果你删除一个源文件,那么你将没有任何东西到目的地。

当你这样做时:

ls -lai

您会看到符号链接有不同的 inode 编号。

有关更多详细信息,您可以阅读 Linux 操作系统上的 ln 手册页。

于 2018-12-06T01:53:28.400 回答
4

有两种类型的链接:

符号链接:指的是指示另一个文件的抽象位置的符号路径

硬链接:指物理数据的具体位置。

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

ln -s source target

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

你可以创建太硬的链接

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

ln source link
于 2017-06-27T17:55:06.147 回答
4

我发现 man 信息中的术语“目标”和“目录”有点混淆。

目标是我们符号链接到的文件夹和实际符号链接的目录(不是您将符号链接到的目录),如果有人遇到同样的困惑,不要感到孤单。

这是我对创建符号链接(在 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

我希望这对那些(仍然)有点困惑的人有所帮助。

于 2017-11-16T10:35:06.983 回答
-2

如何在 vagrant 中创建符号链接。脚步:

  1. 在 vagrant 文件中创建一个同步文件夹。例如 config.vm.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。如果您需要删除符号链接,则本地平均链接名称(您要链接的客户机中的文件夹名称):- 键入 sudo rm local
于 2016-02-15T09:54:44.590 回答