软/硬链接: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