Symbolic Link和Shortcut有什么区别?


Answers:


57

我认为重要的是,快捷方式只是一个文件。它们有一个大小(很小,只引用它们指向的位置),并且需要一个应用程序支持该文件类型才能使用。

符号链接是文件系统级别的,所有内容都将其视为原始文件。应用程序不需要特殊支持即可使用符号链接。


6
树行走命令(如UNIX工具什么findtardu,等)需要了解符号链接,或者他们可能会做一些非常愚蠢的事情。例如,盲目跟随符号链接会在文件系统中创建循环,这很糟糕
dmckee 2011年

9
@dmckee; 很好,尽管没有应用程序需要特定的支持来关注他们,但他们确实需要特定的支持以遵循他们!
Phoshi 2011年

是的,不需要支持就可以使用它们,但需要了解它们。
dmckee 2011年

@Phoshi的确切含义是“它们需要一个应用程序来支持该文件类型才能使用。” 你能举个例子解释一下吗?
极客2012年

6
@Geek:“快捷方式”实际上是保存另一个文件的文件路径的文件。当您阅读它时,会阅读一个特殊格式的文件,该文件告诉您接下来要查找的位置。如果您的应用程序不监听,而只是逐字读取文件,那么您就不会关注它。一个符号链接是文件系统级别的,它是文件系统本身,它持有数据的“真实”路径,当您尝试访问它时,您将检索指向的数据。
Phoshi 2012年

20

“符号链接”实际上可以从功能上充当目录或文件的替代,并且通常在Unix / Linux环境中使用。尽管Windows显然对此提供了支持,但是我还没有实际使用它。

“快捷方式”只是一个常规文件,该文件具有对目标文件或目录的引用以及其他一些要显示的图标之类的内容。与符号链接不同,您不能在DOS中“ cd ./shortcut-name”(在Unix / Linux中,您可以“ cd ./symlink-name”,它的作用就像真实的子目录一样)。

同样,在大多数Windows应用程序中,当您在任何“文件”->“打开GUI”对话框中单击“快捷方式”时,文件名字段都将填充该快捷方式的文件名以及其子目录,而在Unix / Linux中,GUI会处理符号链接作为路径(无需修改文件名字段)。


在Unix / Linux中,还有“硬链接”,它们仅适用于文件(不适用于目录)。这些是文件系统中的自然文件名条目,它们恰好指向与其他位置的另一个文件名条目相同的文件数据(不必位于同一目录中)。
兰道夫·理查森2011年

4
@Randolf:1) Windows中也存在硬链接。2) Shell快捷方式的一项功能是自动跟踪目标–如果移动了目标,大多数情况下快捷方式将继续起作用。(在AD域中,甚至可以通过计算机跟踪文件;例如,如果将HD移动到其他位置。)3)符号链接的一种用法是将文件或目录重定向到备用位置–它们可以指向文件(与结点不同) )和目录(与硬链接不同),跨文件系统(与硬链接不同),甚至AFAIK甚至都可以指向网络位置。
grawity 2011年

最近的评论,我不确定我是否不知道我在使用shorcuts,但是我不得不为我的vimrc文件创建一个符号链接而不是快捷方式(我引用了我在其中使用的dotfiles项目一个单独的目录)。
making3

10

正如其他人提到的,符号链接是文件系统级别可用的链接之一,这使得它对应用程序透明。我发现此文档非常有帮助(尤其是“裁剪/展开/拼接外部结点/符号链接”部分)。而且那里的工具看起来也不错。(通过提及此内容和mklink,希望更多的搜索可以找到此讨论。)

快捷方式是文件,而不是真实的链接,并且通常仅在Windows UI(用户界面)解释后才作为链接成功跟随。例如,当您双击文件夹快捷方式时,Windows会将您重定向到该其他位置。(这包括大多数应用程序调用的通用“文件打开”和“文件保存”对话框。)在我的桌面上,我有一个指向该文件夹的快捷方式:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ G

快捷方式的文件名是:C:\ Users \ user5 \ Desktop \ Games.lnk,即使Windows取消显示.lnk扩展名并仅显示“ Games”,即使您取消选中“隐藏已知文件类型的扩展名”也是如此。但是,如果您打开命令提示符并执行一个目录,则会看到它:

C:\Users\user5\Desktop>dir "g*"
 Volume in drive C has no label.
 Volume Serial Number is 900...
 Directory of C:\Users\user5\Desktop
03/08/2014  05:30 PM             1,710 Games.lnk
               1 File(s)          1,710 bytes
               0 Dir(s)  246,818,222,080 bytes free

我可以使用\ D选项(对于目录)使用符号链接创建等效项:

C:\Users\user5\Desktop>mklink /D mysymlink  "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G

C:\Users\user5\Desktop>cd mysymlink

C:\Users\user5\Desktop\mysymlink>

(由于这是一个文件夹链接,因此也可以选择目录连接(\ J)。)Windows资源管理器,就像该控制台和大多数应用程序一样,将使您“向下”浏览该明显的子目录,而不是(a)重定向“跨越”到其他位置或(b)失败。

快捷键的行为不像子目录。我可以使用以下命令调用Windows UI的默认文件行为(这将在Windows资源管理器中打开“ G”文件夹):

C:\Users\user5\Desktop>"Games.lnk"

而mysymlink被列为真正的子目录(请参见计数),并且不能以这种方式启动:

C:\Users\user5\Desktop>dir "my*"
 Volume in drive C has no label.
 Volume Serial Number is 900...

 Directory of C:\Users\user5\Desktop

03/29/2014  06:08 PM    <DIR>          mysubdir
03/29/2014  05:40 PM    <SYMLINKD>     mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
               0 File(s)              0 bytes
               2 Dir(s)  246,816,153,600 bytes free

C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.

相反,您不能将目录更改为快捷方式:

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

Windows UI允许您右键单击以编辑快捷方式的属性。或者,尽管十六进制编辑器的显示效果更好,但以下代码准确显示了.lnk文件中实际存储的内容(二进制数据):

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

而尝试在实际的子文件夹上执行记事本会弹出“拒绝访问”错误消息,并且记事本为空。

相反,如果创建文件符号链接(而不是文件夹符号链接),则可以使用记事本启动它。在以下notepad.exe调用中,前两个工作正常,第三个失败(打开.LNK文件,即二进制gobbledegook)。

C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt

C:\Users\user5\Desktop>notepad.exe "symplain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"

这不仅仅是控制台。将快捷方式复制到记事本到我的桌面,然后尝试将三个快捷方式分别拖放到其上,它表现出完全相同的行为。(因为与双击不同,拖放使应用程序可以解释快捷方式。)

关于目录符号链接和联结之间的区别,请参阅此讨论,这是一个非常有用的描述

“ Windows解析符号链接和目录链接的方式的主要区别在于处理的位置。Windows处理本地系统上的符号链接,即使它们引用了远程文件服务器上的位置。Windows也会处理引用远程文件的目录链接。服务器本身上的文件服务器。因此,服务器上的符号链接可以引用只能从客户端访问的位置,例如其他客户端卷,而目录连接不能访问。为了解决此问题,Windows Vista支持两个文件的新符号链接类型和目录。

“许多文件系统命令已经更新,可以理解符号链接的含义。例如,删除命令知道不跟随链接,这将导致目标的删除,而是删除链接。但是,因为并非所有应用程序可能会正确处理符号链接,创建符号链接需要默认情况下只有管理员才具有的新的“创建符号链接”特权。”


2

“符号链接与快捷方式的不同之处在于,它们提供了通向所需数据对象的透明*路径,并带有快捷方式(.lnk),必须读取并解释快捷方式文件的内容,然后打开其引用的文件(即,这是一个两步过程。当应用程序使用符号链接时,它可以立即访问该符号链接所引用的数据对象(即,这是一个单步过程)。”

资料来源:http : //schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html


0

有时,最好有一个功能示例,所以我不能解释我如何使用此功能。

我使用Google驱动器备份文件,但有时我想备份特定文件夹中的文件(我无法将其移动到../google驱动器中)。特别是在Windows 10通用应用程序中,配置文件等存储在appdata中,大多数时候我无法更改此位置。

我使用Windows本地stikynot应用程序,并且想备份我的笔记,因此在这里使用了符号链接。Google云端硬盘将链接识别为实际文件,并且可以正常同步文件,而实际文件仍位于appdata文件夹中。

当我在本地拥有不希望与云同步的项目文件夹之类的文件时,我会使用快捷方式(复制,过去->粘贴快捷方式)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.