软 / 硬链接:link/mklink 命令详解
软链接和硬链接
简介
Linux 文件系统中的链接 (link),我们可以将其视为文件的别名
链接又可分为两种:硬链接 (hard link) 与软链接 (symbolic link, 又称符号链接)
硬链接的意思是一个档案 (文件或目录) 可以有多个名称
而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。
硬链接会被视为单独的文件,但是他们指向同一个文件块 (类似于 C 语言的引用)
软链接会被视为一种特殊的文件,他的含义和内容就是指向另一个文件 (类似于 C 语言的指针)
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的空间。
区别和图示
软链接:
- 软链接,以路径的形式存在。类似于 Windows 操作系统中的快捷方式
- 软链接可以 跨文件系统 ,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软链接可以对目录进行链接
- 原文件的删除会真正删除文件,会导致软链接失效
硬链接:
- 硬链接,以文件副本的形式存在。但不占用实际空间。
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
- 原文件的删除不会真正删除文件,硬链接也不会失效
图示如下
linux 文件系统如下,文件指向一个 inode (元数据块), inode 再指向实际的数据块
硬链接是创建新的文件名,指向同一个 inode (类似于引用的概念)
软链接是创建了新的文件结构,这个文件结构的含义就是指向另一个文件结构 (类似于指针的概念)
实验验证
如下,f2 为 f1 的硬链接,f3 是 f1 的软链接
f1 和 f2 的 inode 相同,但是他们是两个独立的文件,只是指向同一个数据块
f3 则是单独的一类文件,类似于快捷方式
1 | [root@Linux]$ touch f1 #创建一个测试文件f1 |
此外
- 删除符号连接 f3, 对 f1,f2 无影响;
- 删除硬连接 f2,对 f1,f3 也无影响;
- 删除原文件 f1,对硬连接 f2 没有影响,导致符号连接 f3 失效;
- 同时删除 f1 和硬链接 f2, 源文件会被删除
linux 下的 link 命令
用法
ln [参数][源文件或目录][目标文件或目录]
参数如下
--backup[=CONTROL] 备份已存在的目标文件
-b 类似 --backup ,但不接受参数
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
windows 下的 mklink 命令
cmd 中的 mklink 原说明如下
1 | MKLINK [[/D] | [/H] | [/J]] Link Target |
- /d 给目录创建符号链接,简称符号链接、软链接
- /h 创建硬链接,简称硬链接
- /j 给目录创建联接点,简称软链接
没有指定参数时,默认文件软链接
注意:
建议使用绝对路径,必须使用英文双引号将路径括起来
命令之间必须有空格
mklink 妙用 - 释放 c 盘空间
众所周知传统 windows 电脑磁盘分多个区,容易出现 C 盘空间不够
于是,我们就可以把 C 盘的一些非系统文件 (如 user 目录,appdata 之类的) 通过目录链接 (/j
, 即软链接) 的方式转移到其他盘,而且不会影响系统使用
- 复制粘贴原目录到你想要的位置
- 在目录的原位置创建软链接
mklink /j 目录名 目录移动到的位置
比如,我把 c 盘的.cache
目录移动到 E 盘,就是 mklink /j .cache E:\.cache
参考文章
https://zhuanlan.zhihu.com/p/67366919
https://www.jianshu.com/p/b1614a073087
https://cloud.tencent.com/developer/article/1690636