Pho*_*shi 65

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

符号链接是文件系统级别,一切都将其视为原始文件。应用程序无需特殊支持即可使用符号链接。

  • @dmckee; 很好的一点,虽然没有应用程序需要特定的支持来跟随它们,但它们确实需要特定的支持来*不*跟随它们! (11认同)
  • 树遍历命令(任何像 unix 实用程序 `find`、`tar`、`du` 等)*做* 需要了解符号链接,否则他们可能会做一些非常愚蠢的事情。例如,盲目跟随符号链接会在文件系统中创建循环,这就是*坏*。 (7认同)
  • @Geek:“快捷方式”实际上是一个包含另一个文件的文件路径的文件。当您阅读它时,您会阅读一个特殊格式的文件,该文件会告诉您接下来要查看的位置。如果您的应用程序不监听,而只是逐字读取文件,那么您就不会遵循它。符号链接是文件系统级别的,它是文件系统本身保存数据的“真实”路径,当您尝试访问它时,您会检索指向的数据。 (7认同)

Ran*_*son 23

“符号链接”实际上可以以功能方式替代目录或文件,并且通常用于 Unix/Linux 环境。尽管在 Windows 中显然支持此功能,但我还没有看到任何实际使用它。

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

此外,在大多数 Windows 应用程序中,当您在任何文件->打开 GUI 对话框中单击快捷方式时,您的文件名字段将填充该快捷方式的文件名,并且它充当子目录,而在 Unix/Linux 中,GUI 处理一个符号链接作为路径(不修改文件名字段)。

  • @Randolf:**1)** Windows 中也存在硬链接。**2)** shell 快捷方式的一项功能是自动目标跟踪 - 如果目标移动,大多数情况下快捷方式将继续工作。(在 AD 域中,甚至可以通过计算机跟踪文件;例如,如果您将 HD 移到别处。)**3)** 符号链接的一种用途是将文件或目录重定向到备用位置——它们可以指向文件(与连接不同)和目录(与硬链接不同)、跨文件系统(与硬链接不同)以及 AFAIK 甚至可以指向网络位置。 (5认同)

Jon*_*mbs 14

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

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

快捷方式的文件名是:C:\Users\user5\Desktop\Games.lnk,尽管 Windows 禁止使用 .lnk 扩展名并且只显示“游戏”,即使您取消选中“隐藏已知文件类型的扩展名”。但是如果你打开一个命令提示符并做一个目录,你会看到它:

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
Run Code Online (Sandbox Code Playgroud)

我可以使用 \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>
Run Code Online (Sandbox Code Playgroud)

(目录连接 (\J) 也是一个选项,因为这是一个文件夹链接。)Windows 资源管理器,就像这个控制台和大多数应用程序一样,会让你“向下浏览”这个明显的子目录,而不是 (a) 重定向“穿越”到不同的位置或 (b) 失败。

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

C:\Users\user5\Desktop>"Games.lnk"
Run Code Online (Sandbox Code Playgroud)

而 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.
Run Code Online (Sandbox Code Playgroud)

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

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.
Run Code Online (Sandbox Code Playgroud)

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

C:\Users\user5\Desktop>notepad.exe "Games.lnk"
Run Code Online (Sandbox Code Playgroud)

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

相反,如果我创建一个文件符号链接(不是文件夹符号链接),我可以用记事本启动它。在下面的 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"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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