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

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

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

这是否正确?

2172520 次浏览

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

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

创建或更新符号链接:

ln -sf /path/to/file /path/to/symlink
ln -s target linkName

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

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

ln -s TARGET LINK_NAME

-s使其具有象征性。

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.
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
ln -s source_file target_file

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

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

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

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

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

cd myfolderln -s target

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

通用语法

ln -s TARGET LINK_NAME

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

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

和大局,所以你不会得到它混淆与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)

对于最初的问题:


'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

这里有一些方法可以帮助你记住:

首先,有手册页#0。您可以通过在谷歌中搜索“man ln”来访问它,或者只需打开终端窗口并输入man ln,您就会得到相同的信息。手册页明确指出:

ln[选项]…[-T]目标LINK_NAME(第一种形式)


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

cp /file/that/exists /location/for/new/filemv /file/that/exists /location/its/moving/toln /file/that/exists /the/new/link

#0将当前存在的文件(第一个参数)复制到新文件(第二个参数)。
#0将当前存在的文件(第一个参数)移动到新的位置(第二个参数)

同样,#0将当前存在的文件(第一个参数)链接到新链接(第二个参数)*


我想建议的最后一个选择是,您可以创建自己的手册页,这些手册页易于阅读和查找/记住。只需制作一个简单的外壳脚本,为您提供所需的提示。例如

在您的.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 symecho "File to link to:"read filln -s $fil $sym}
alias 'symlink'=makesymlink

*-很明显,它们都可以采用不同的参数并做不同的事情,并且可以处理文件和目录……但前提是相同的
♦-使用bash shell的示例

ln -s sourcepath linkpathname

备注:

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

如何在流浪汉中创建符号链接。步骤:

  1. 在流浪文件中创建一个同步文件夹。例如config.vm.synced_folder"F:/Sun的/源代码/太阳的/lms","/源"F:/Sun的源代码, /source:-目录路径里面的流浪者
  2. 流浪并键入流浪ssh并转到源目录,例如cd源
  3. 验证源代码文件夹结构在源代码目录中是否可用。例如 /source/local
  4. 然后转到与浏览器关联的文件所在的来宾机目录。获得文件备份后。例如sudo mv本地local_bk
  5. 然后创建符号链接,例如sudo ln-s /source/local本地。本地平均链接名称(您要链接的来宾机器中的文件夹名称)如果需要删除符号链接:-键入sudo rm本地

在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_Cuser@user-DT:[~/Desktop/soft]# ls -lrttotal 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_Alrwxrwxrwx 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

有两种类型的链接:

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

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

在您的情况下符号链接:

ln -s source target

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

你可以创建硬链接

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

ln source link

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

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

例如:

ln -s file1 link1

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

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

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

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

您可以导航到要创建符号链接的文件夹并运行命令或为您的符号链接指定FULL PATH,而不是NAME-OF-YOR-SYMLINK。

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDERln -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

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

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

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

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


shell(bash、zsh、…)

#!/bin/shln -s /tmp/realfile /tmp/link

非常简单,就像您在命令行(即shell)上执行的操作一样。所有错误处理都由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/perlif( symlink("/tmp/realfile", "/tmp/link") != 1) {print STDERR "Can't create the symlink: $!\n"}

这段代码假设您在/usr/bin/perl处有一个perl 5解释器。symlink仅在可以创建链接时返回1。在其他情况下,我将失败原因打印到标准错误输出中。

链接基本上有两种类型:

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

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

示例1:

ln /root/file1 /root/file2

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

示例2:

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

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

如果你删除一个源文件,那么你将不会有任何到目标的软件。

当你这样做:

ls -lai

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

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