我想在 Linux 中建立一个符号链接。我已经编写了这个 Bash 命令,其中第一个路径是我想要链接到的文件夹,第二个路径是编译的源。
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
它是否正确?
创建一个新的符号链接(如果符号链接已经存在,将会失败):
ln -s /path/to/file /path/to/symlink
要创建或更新符号链接:
ln -sf /path/to/file /path/to/symlink
ln -s TARGET LINK_NAME
-s
使它具有象征意义的地方。
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
(因为 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)
ln -s source_file target_file
对于原来的问题:
'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 的示例
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.
打开 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
ln -s sourcepath linkpathname
笔记:
-s创建符号链接而不是硬链接
如果您位于要创建符号链接的目录中,则忽略第二个路径。
cd myfolder
ln -s target
它将创建target
inside的符号链接myfolder
。
一般语法
ln -s TARGET LINK_NAME
这是堆栈溢出,所以我假设您需要代码:
以下所有代码都假定您要创建一个名为/tmp/link
链接到的符号链接/tmp/realfile
。
注意:虽然此代码检查错误,但它不检查是否/tmp/realfile
实际存在!这是因为死链接仍然有效,并且根据您的代码,您可能(很少)希望在真实文件之前创建链接。
#!/bin/sh
ln -s /tmp/realfile /tmp/link
非常简单,就像您在命令行(即 shell)上执行的操作一样。所有错误处理都由 shell 解释器完成。此代码假定您在/bin/sh
.
$?
如果需要,您仍然可以使用仅在成功创建链接时才设置为 0的变量来实现自己的错误处理。
#include <unistd.h>
#include <stdio.h>
int main () {
if( symlink("/tmp/realfile", "/tmp/link") != 0 )
perror("Can't create the symlink");
}
symlink
只有在可以创建链接时才返回 0。在其他情况下,我perror
用来更多地说明问题。
#!/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。在其他情况下,我将失败原因打印到标准错误输出。
我想提供一个更简单的英文版本的描述。
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
要创建符号链接/软链接,请使用:
ln -s {source-filename} {symbolic-filename}
例如:
ln -s file1 link1
链接基本上有两种类型:
符号链接(软):链接到指示另一个文件的抽象位置的符号路径
硬链接:链接到物理数据的具体位置。
示例 1:
ln /root/file1 /root/file2
以上是硬链接的示例,您可以在其中拥有物理数据的副本。
示例 2:
ln -s /path/to/file1.txt /path/to/file2.txt
上述命令将创建指向 file1.txt 的符号链接。
如果你删除一个源文件,那么你将没有任何东西到目的地。
当你这样做时:
ls -lai
您会看到符号链接有不同的 inode 编号。
有关更多详细信息,您可以阅读 Linux 操作系统上的 ln 手册页。
有两种类型的链接:
符号链接:指的是指示另一个文件的抽象位置的符号路径
硬链接:指物理数据的具体位置。
在您的情况下,符号链接:
ln -s source target
你可以参考http://man7.org/linux/man-pages/man7/symlink.7.html
你可以创建太硬的链接
文件的硬链接与原始目录条目无法区分;对文件的任何更改实际上都独立于用于引用文件的名称。硬链接通常不会引用目录,也可能不会跨越文件系统。
ln source link
我发现 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
我希望这对那些(仍然)有点困惑的人有所帮助。
如何在 vagrant 中创建符号链接。脚步: