Ubuntu 中的符号链接和 Windows 快捷方式有什么区别?它们是类似的概念吗?或者 Ubuntu 中是否有更类似于 Windows 快捷方式的东西?
答案1
是也不是。
为了理解这里的变化,您需要了解 inode 表和写入磁盘的数据之间的关系。
Windows 快捷方式是包含在常规文件中的路径数据。可以将它们视为仅包含文件 URI 的文本文件。摘自维基百科:
文件系统和不了解快捷方式的软件程序会将快捷方式视为普通文件。只有了解快捷方式的软件程序(例如 Windows shell 和文件浏览器)才会将其视为对其他文件的引用。
另一个区别是机制的功能:Microsoft Windows 快捷方式通常通过绝对路径(从根目录开始)引用目标,而 POSIX 符号链接可以通过绝对路径或相对路径引用目标。如果符号链接的位置和目标共享一个公共路径前缀,但在创建符号链接时尚不知道该前缀(例如,在可以在任何地方解压的存档文件中),则后者很有用。
Microsoft Windows 应用程序快捷方式包含可与目标关联的附加元数据,而 POSIX 符号链接只是将被解释为绝对或相对路径名的字符串。
Windows Vista、7 和 8还支持 NTFS 下的符号链接
符合 POSIX 规范的符号链接不是文件。相反,它们是 inode 表中的条目,由文件系统自动解析。任何软件程序在访问符号链接时,都会看到目标,无论该程序是否知道符号链接。
答案2
符号链接很像 Windows 快捷方式。它们就像指向文件系统中真实对象的别名。如果对象移动或被删除,链接就会断开。
Windows 和 Linux 都有硬链接,这非常不同。自从 XP 以来,我就没再使用过 Windows,那时,没有硬链接的 UI,但有一个 API,应用程序可以创建硬链接(用户也可以使用 Cygwin 来创建)。
硬链接是文件系统中另一个成熟的对象。您可以拥有多个链接,它们的作用都相同。但它们都指向同一个存储。如果您删除其中一个,而另一个仍然存在,则存储不会被删除,直到您删除所有链接。
答案3
无需深入探讨其背后的技术细节:
Windows 快捷方式是“常规文件”,例如文本文件或图片文件。Windows 计算机上的大多数程序都只会看到一个文件名称whatever.lnk
,而不知道如何处理它。它们通常只由文件浏览器进行特殊处理。
Linux 符号链接是“特殊文件”,对于几乎所有程序(而不仅仅是文件浏览器)来说,它们的外观和行为都像文件夹一样。
我个人一直利用符号链接来欺骗程序将数据保存在其他位置。例如,如果我知道游戏将保存文件存储在隐藏目录下,/home/UserName/.game/some/sub/folder/saves
我可以将该saves
文件夹剪切出来并粘贴到我自己定期备份的数据文件夹中/home/UserName/Gaming
,将其重命名为我想要的任何名称,然后创建指向它的符号链接saves
并将其放回我找到原始文件夹的位置。游戏不会知道发生了什么。