Answers:
我认为重要的是,快捷方式只是一个文件。它们有一个大小(很小,只引用它们指向的位置),并且需要一个应用程序支持该文件类型才能使用。
符号链接是文件系统级别的,所有内容都将其视为原始文件。应用程序不需要特殊支持即可使用符号链接。
find
,tar
,du
,等)都需要了解符号链接,或者他们可能会做一些非常愚蠢的事情。例如,盲目跟随符号链接会在文件系统中创建循环,这很糟糕。
“符号链接”实际上可以从功能上充当目录或文件的替代,并且通常在Unix / Linux环境中使用。尽管Windows显然对此提供了支持,但是我还没有实际使用它。
“快捷方式”只是一个常规文件,该文件具有对目标文件或目录的引用以及其他一些要显示的图标之类的内容。与符号链接不同,您不能在DOS中“ cd ./shortcut-name”(在Unix / Linux中,您可以“ cd ./symlink-name”,它的作用就像真实的子目录一样)。
同样,在大多数Windows应用程序中,当您在任何“文件”->“打开GUI”对话框中单击“快捷方式”时,文件名字段都将填充该快捷方式的文件名以及其子目录,而在Unix / Linux中,GUI会处理符号链接作为路径(无需修改文件名字段)。
正如其他人提到的,符号链接是文件系统级别可用的链接之一,这使得它对应用程序透明。我发现此文档非常有帮助(尤其是“裁剪/展开/拼接外部结点/符号链接”部分)。而且那里的工具看起来也不错。(通过提及此内容和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支持两个文件的新符号链接类型和目录。
“许多文件系统命令已经更新,可以理解符号链接的含义。例如,删除命令知道不跟随链接,这将导致目标的删除,而是删除链接。但是,因为并非所有应用程序可能会正确处理符号链接,创建符号链接需要默认情况下只有管理员才具有的新的“创建符号链接”特权。”
“符号链接与快捷方式的不同之处在于,它们提供了通向所需数据对象的透明*路径,并带有快捷方式(.lnk),必须读取并解释快捷方式文件的内容,然后打开其引用的文件(即,这是一个两步过程。当应用程序使用符号链接时,它可以立即访问该符号链接所引用的数据对象(即,这是一个单步过程)。”
资料来源:http : //schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html
有时,最好有一个功能示例,所以我不能解释我如何使用此功能。
我使用Google驱动器备份文件,但有时我想备份特定文件夹中的文件(我无法将其移动到../google驱动器中)。特别是在Windows 10通用应用程序中,配置文件等存储在appdata中,大多数时候我无法更改此位置。
我使用Windows本地stikynot应用程序,并且想备份我的笔记,因此在这里使用了符号链接。Google云端硬盘将链接识别为实际文件,并且可以正常同步文件,而实际文件仍位于appdata文件夹中。
当我在本地拥有不希望与云同步的项目文件夹之类的文件时,我会使用快捷方式(复制,过去->粘贴快捷方式)。