符号链接和快捷方式有什么区别?

符号链接和快捷方式有什么区别?

符号链接和快捷方式有什么区别?

答案1

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

符号链接是文件系统级别的,一切都可以看到它作为原始文件。应用程序无需特殊支持即可使用符号链接。

答案2

“符号链接”实际上可以充当目录或文件的替代品,在 Unix/Linux 环境中很常用。虽然 Windows 似乎支持这种功能,但我还没有看到它的实际用途。

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

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

答案3

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

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

快捷方式的文件名是:C:\Users\user5\Desktop\Games.lnk,尽管 Windows 隐藏了 .lnk 扩展名并只显示“Games”,即使您取消勾选“隐藏已知文件类型的扩展名”。但如果您打开命令提示符并执行 dir,您将看到它:

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 文件,二进制乱码)。

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 支持文件和目录的新符号链接类型。

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

答案4

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

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

我使用 Windows 原生 stikynot 应用程序,我想备份我的笔记,所以我在这里使用了符号链接。Google Drive 将链接识别为实际文件并同步文件,而实际文件仍在 appdata 文件夹中。

当我本地有文件(如项目文件夹)但不想同步到云端时,我会使用快捷方式(复制、粘贴->粘贴快捷方式)。

相关内容