提问人:chrisg 提问时间:12/23/2009 最后编辑:Peter Mortensenchrisg 更新时间:7/30/2020 访问量:2208957
如何在 Linux 中符号链接文件?[已结束]
How can I symlink a file in Linux? [closed]
问:
这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。
4年前关闭。
我想在 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
cp
cp
CoPy
ln
LiNk
ln -s target linkName
您可以在此处查看手册页:
评论
ln -s TARGET LINK_NAME
使它具有象征意义的地方。-s
评论
unlink LINK_NAME
ln -s where-the-symlink-should-point where-to-place-the-symlink-itself
rm
/
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
评论
man ln
ln -s TARGET LINK_NAME
我想介绍一下已经提出的描述的更通俗易懂的英文版本。
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
如果您位于要创建符号链接的目录中,请忽略第二个路径。
cd myfolder
ln -s target
它将创建内部的符号链接。target
myfolder
一般语法
ln -s TARGET LINK_NAME
(因为一张 ASCII 图片胜过一千个字符。
箭头可能是一个有用的助记符,特别是因为它几乎完全是 Emacs 的 dired 中的样子。
而且大局观,所以你不会把它与Windows的版本混淆
Linux操作系统:
ln -s target <- linkName
窗户:
mklink linkName -> target
你也可以把这些看作是
ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"
应该还不存在,它将被创建,而应该已经存在 (IIRC)。from-here
to-here
(我总是混淆各种命令和参数是否应该涉及预先存在的位置,或者应该创建一个位置。
编辑:对我来说,它仍在慢慢沉入;我在笔记中还有另一种写法。
ln -s (target exists) (link is made)
mklink (link is made) (target exists)
评论
dired
S
ln -s oldname newname
对于原始问题:
'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 [选项]...[-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 脚本,即可为您提供所需的提示。例如♦:
在您的 .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 -s sourcepath linkpathname
注意:
-s 创建符号链接而不是硬链接
如何在流浪者中创建符号链接。 步骤:
- 在 vagrant 文件中创建一个同步文件夹。例如config.vm.synced_folder “F:/Sunburst/source/sunburst/lms”, “/source” F:/Sunburst/source/sunburst/lms :- 其中源码,/source :- 流浪者内部的目录路径
- Vagrant up 并键入 vagrant ssh 并转到源目录,例如 cd source
- 验证源代码文件夹结构在源目录中是否可用。例如 /source/local
- 然后转到与浏览器关联的文件的来宾计算机目录。获取文件备份后。例如 sudo mv 本地local_bk
- 然后创建符号链接,例如 sudo ln -s /source/local local。本地平均链接名称(要链接的客户机中的文件夹名称) 如果您需要删除符号链接:- 键入 sudo rm local
在 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
有两种类型的链接:
符号链接:引用指示另一个文件的抽象位置的符号路径
硬链接:指物理数据的具体位置。
在您的例子中,符号链接:
ln -s source target
您可以参考 http://man7.org/linux/man-pages/man7/symlink.7.html
您可以创建太硬的链接
指向文件的硬链接与原始目录条目无法区分;对文件的任何更改实际上都与用于引用文件的名称无关。硬链接通常不引用目录,也可能不跨越文件系统。
ln source link
若要创建符号链接/软链接,请使用:
ln -s {source-filename} {symbolic-filename}
例如:
ln -s file1 link1
我发现人员信息中的术语“目标”和“目录”有点令人困惑。
目标是我们正在符号链接到的文件夹和实际符号链接的目录(不是您将符号链接到的目录),如果有人遇到同样的困惑,请不要感到孤独。
这是我对创建符号链接(在 linux 中)的解释:
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
您可以导航到要创建符号链接的文件夹并运行命令,或者指定符号链接的 FULL PATH 而不是 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
我希望这对那些(仍然)有点困惑的人有所帮助。
这是 Stack Overflow,所以我假设你想要代码:
以下所有代码都假定您要创建一个名为 的符号链接,该链接链接到 。/tmp/link
/tmp/realfile
注意:虽然此代码会检查错误,但它不会检查是否真的存在!这是因为死链接仍然有效,并且根据您的代码,您可能(很少)希望在真实文件之前创建链接。/tmp/realfile
外壳 (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 解释器。 如果可以创建链接,则仅返回 1。在其他情况下,我将失败原因打印到标准错误输出中。/usr/bin/perl
symlink
评论
链接基本上有两种类型:
符号链接(软):链接到指示另一个文件的抽象位置的符号路径
硬链接:指向物理数据的具体位置的链接。
示例 1:
ln /root/file1 /root/file2
以上是一个硬链接示例,您可以在其中获得物理数据的副本。
示例 2:
ln -s /path/to/file1.txt /path/to/file2.txt
上面的命令将创建一个指向 file1.txt 的符号链接。
如果删除源文件,则不会有任何内容到达目标。
当您执行以下操作时:
ls -lai
您将看到符号链接有不同的 inode 编号。
有关更多详细信息,您可以在 Linux 操作系统上阅读 ln 的手册页。
评论
hard link where you can have a copy of your physical data
- 我认为我们不创建物理数据的副本。只是相同物理数据的另一个名称。
评论
man ln