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

How to symlink a file in Linux?

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

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

这是正确的吗?


要创建新的symlink(如果symlink已经存在,则失败):

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

要创建或更新符号链接:

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


1
ln -s TARGET LINK_NAME

其中,-s使其成为符号。


1
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME


1
ln -s target linkName

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

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


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

箭头可能是一种有用的助记法,尤其是因为它在Emacs的dired中几乎就是这样。

大图片,这样你就不会把它和Windows的版本混淆了。

Linux:

1
ln -s target <- linkName

窗户:

1
mklink linkName -> target

你也可以把这些看成

1
2
ln -s"to-here" <-"from-here"
mklink"from-here" ->"to-here"

from-here还不应该存在,它应该被创建,而to-here应该已经存在(IIRC)。

(我总是搞不清各种命令和参数是应该涉及到一个预先存在的位置,还是要创建一个位置。)

编辑:对我来说,它仍然慢慢沉入水中;我有另一种方式在我的笔记中写作。

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


1
ln -s source_file target_file

http://unixhelp.ed.ac.uk/cgi/man-cgi?自然对数


对于原始问题:

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

这确实会从文件/目录创建一个符号链接(-s

1
<basebuild>/IpDome-kernel/kernel

到您的新链接

1
/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

以下是一些帮助您记住的方法:

首先,这是ln的手册页。你可以通过在谷歌搜索"man ln"来访问它,或者只需打开一个终端窗口,输入man ln就可以得到相同的信息。手册页清楚地说明:

ln [OPTION]... [-T] TARGET LINK_NAME (1st form)

< /块引用>

如果每次都要搜索或阅读一个手册页不适合你,也许你会更容易记住所有nix命令的工作方式相同:

1
2
3
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_别名文件中,可以放置如下内容:

1
2
3
4
5
6
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,您将以一种可以快速阅读和理解的方式返回正确的语法。你可以让这些功能像你想得到什么样的信息一样高级,这取决于你自己。你甚至可以让他们互动,所以你只需要按照提示就可以了。类似:

1
2
3
4
5
6
7
8
9
makesymlink() {
    echo"Symlink name:"
    read sym
    echo"File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

*-很明显,它们都可以接受不同的参数,做不同的事情,可以处理文件和目录…但前提是一样的?-使用bash shell的示例


1
2
3
4
5
6
7
8
9
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.

创建符号链接或软链接:在Linux

开放式的提示和下面提到的bash命令让a符号链接到您的文件。

a)goto的文件夹在你想创建一个软链接和印出命令下面提到:

$ 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 -s sourcepath linkpathname

注:

S是符号链接,硬链接,而不是


如果您在要创建symlink的目录中,则忽略第二个路径。

1
2
cd myfolder
ln -s target

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

一般语法

1
ln -s TARGET LINK_NAME


所以我认为这是你想要的堆栈溢出的代码:

下面的代码assumes所有你想创建一个符号链接的链接的/tmp/realfile/tmp/link命名。

警告:虽然本代码的错误检查,它是检查是否存在不/tmp/realfile!这是因为a死链接仍然是有效的和可能取决于你的代码(很少)你想在创建链接真实的文件。

外壳(bash、zsh、……)

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

真正简单的,就像你会做它在命令行(这是壳)。完成所有的错误处理是由shell解释器。本代码assumes,你有一个工作在/bin/shshell解释器。

如果需要,你可以实现你自己的错误处理由沉默变$?希望只使用的设置为0,如果你点击链接创建。

C和C + +

1
2
3
4
5
6
7
#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

1
2
3
4
5
#!/usr/bin/perl
if( symlink("/tmp/realfile","/tmp/link") != 1) {
  print STDERR"Can't create the symlink: $!
"
}

你有一本assumes Perl 5代码解释器在/usr/bin/perlsymlink只读返回1如果链接可以创建。在其他情况下的失效原因,我打印到标准错误输出。


我想提出一个更简单的英语版本的描述已经提出。

1
 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

"ln"命令创建一个链接文件,而"-s"指定链接类型为符号。可以在葡萄酒安装中找到符号链接文件的示例(使用"ls-la"显示目录内容的一行):

1
 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

标准的文件信息资料在左边(尽管注意第一个字符是"link"的"l");文件名是"a:",并且"->"也表示文件是链接。它基本上告诉Wine Windows"Drive A:"如何与Linux中的软盘驱动器相关联。要实际创建一个与之类似的符号链接(在当前目录中,对葡萄酒执行此操作更为复杂;请使用"winecfg"实用程序):

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

创建一个符号链接或软链接,使用:

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

例如:

1
ln -s file1 link1

有两类型的链接:

符号:符号链接路径问题的摘要显示一个文件的位置)

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

符号链接在您的案例:

1
ln -s source target

你可以man7.org问题,http://///man7 Linux手册页/ symlink.7.html

你可以创建硬链接太

硬链接文件是一个目录indistinguishable从原始输入;任何改变文件的名称是有效的独立应用的参考文件。硬链接可能不正常问题,可以跨文件系统目录的困境。

1
ln source link

链接基本上有两种类型:

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

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

示例1:ln/root/file1/root/file2

上面是硬链接的一个例子,您可以从中获得物理数据的副本。

示例2:ln-s/path/to/file1.txt/path/to/file2.txt

上面的命令将创建到file1.txt的符号链接。

如果删除源文件,则在软件中不会有任何内容指向目标

当你这样做的时候:

莱莱

您将看到符号链接有一个不同的inode编号。

有关更多详细信息,您可以在Linux操作系统上阅读man of ln。

谢谢


我找到一位terminologies到位的"目标"和"目录"在你的信息。

目标是一个文件夹,我们symlinking和目录的符号链接(不是实际目录,你将symlinking),如果任何人都经历同样的混乱,不要单独使用。

这是我的解释:创建一个符号链接(Linux):

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

你可以浏览到文件夹你想创建的符号链接和运行命令或指定完整的路径的符号链接的名字--"你的链接。

1
2
cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

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

我希望这帮助到那些一点困惑(安静)。


在vagrant创建符号链接。步骤:

  • 在vagrant文件创建一个同步的文件夹。e.g config.vm.synced _文件夹"F:/ / / / LMS源旭日阳光","源"F:/ / / / LMS源旭日阳光:哪里的源代码,在vagrant:目录路径
  • vagrant型vagrant SSH和去源源e.g光盘目录
  • 验证您的文件夹结构中的源代码是可用的源目录。e.g /源/局域网
  • 然后去客户机目录在文件浏览器,这是副的。后得到的文件备份。本地局域网_ BK e.g sudo MV
  • 创建符号链接,然后e.g sudo ln S /源/本地局域网。链路本地均值(文件夹名称的名称在客户机和你要链接)如果你需要解除链接:sudo RM型局域网