背景故事

CFan编程委员会有一位叫做穷猫的桑苏在群里问到:

3880qm

大D看到这个的一瞬间就想到了软链接。为什么会想到软链接呢?因为大D觉得穷猫桑苏要表达的是这个事情:

一个目录或文件有多个入口但保持单一的物理位置

现在Windows7及以上版本已经可以支持软链接了,那么就可以用软链接帮助文件的管理了。

软链接的来源

我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。

用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。

在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。

文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

但是这样的文件在共享上存在一些困难,为解决文件共享,引入了软链接和硬链接的概念。

链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。

在Windows上的实现

在Windows上有一个命令:mklink。Linux上可以用ln命令来搞定。

但是需要指出的是Windows并不能在存在相同文件名文件的文件夹内为创建同名的软链接。

例如,文件夹a内存在文件1.txt,那么,在a文件夹内,就不能创建名为1.txt的软链接。

【真绕口令

实例

这里我们实际模仿一下穷猫桑苏的实际需求。

实践环境:Win 7 SP1

前提说明:有两个文件夹,分别命名为:解决方案、project。在解决方案目录内有一待创建软链接文件 readme.txt。

目的:实践软链接

在project中建立软链接

在project文件夹中创建readme.txt的软链接:

这时,在project文件夹内就有一个“解决方案”目录下的软链接。

修改project目录下的readme.txt,源文件也会更改。

symlink

软链接、硬链接、快捷方式的区别

软链接

  • 执行命令 mklink link_name target_name
  • 创建链接后的图标和快捷方式很像
  • 在系统中不占用空间
  • 在文件系统中不是一个单独的文件
  • 如果源文件被删除了,链接就没用了
  • 移除源文件不会影响符号链接(在操作系统中被定义为被遗弃链接)
  • 移除链接文件也不会影响源文件
  • 可交叉文件系统

硬链接

  • 执行命令 mklink /H link_name target_name
  • 在系统中占用的空间与源文件相同,但在系统中引用的是相同的对象(不是拷贝)
  • 图标和创建快捷方式的图标不同
  • 移除源文件不会影响硬链接
  • 移除硬链接不会影响源文件
  • 如果源文件被删除,它的内容依然通过硬链接存在
  • 硬链接文件的任何更改都会影响到源文件
  • 在系统中会占用跟源文件一样大小的空间(既源文件的双倍空间)

快捷方式

  • 在选择的源文件上鼠标右键,通过下拉菜单创建
  • 快捷方式在系统中跟源文件是完全分离的
  • 移除源文件不会移除快捷方式
  • 移除快捷方式不会影响到源文件

需要说明的一点是,软链接和快捷方式有根本的实质上的区别。

应用场景无外乎穷猫桑苏说的那个,再有的应用场景就是在Windows下开发PHP程序,而PHP需要在apache下运行,那么就需要把文件放到htdocs里面,或者直接修改htdocs目录下的代码,利用软链接,将htdocs目录链接到代码目录,这样代码更新后,就实现了类似“预览更新”的功能。

推荐个小软件来帮忙实现链接:Link Shell Extension

版权声明
转载保留版权: 大D技研室 | 《关于软链接的那点事儿》
本文链接地址:https://www.dadclab.com/archives/3880.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , 标签