【SymbolicLink】利用软连接将已安装程序搬迁到其他盘符

Windows硬链接 软链接 符号链接 快捷方式 区别 Windows支持4种”链接”机制,分别是shortcut(快捷方式)、hard link(硬链接)、junction point(软链接)、symbolic link(符号链接)。接下来我们一起来看看他们的区别: 1)shortcut/快捷方式 以.lnk文件方式存在,适用于Explorer等应用程序。 非NTFS内置机制,从Win95开始得到支持。FAT32支持。 同时适用于文件、目录... 阅读详情

0x00 前言

一个基于 Sybmolic Link 的很有意思的解决方案:
mklink /D <产生一个不占空间的等价目录位置> <占空间的目录位置>
可用于将安装好的程序目录剪切到其他位置,在原位置生成一个标志链接,以达到腾出硬盘空间的同时不影响使用。
例如,把游戏已经安装到 C 盘了,之后想挪到 D 盘去,但担心剪切过去游戏就玩不了了。
假如直接剪切,会带来复杂的文件依赖问题,这样可以给C盘腾出来了还不用考虑各种文件依赖问题。

简单来说,陪伴我快 7 年了的笔记本,它的磁盘空间不怎么够。
C 盘有个模拟器,连程序带数据一起 17.9G,我给他剪切到 D 盘去。
现在几个盘均衡负载啦,看起来都还不错 ~
但是,无论是点桌面上的模拟器快捷方式、或是在 D 盘找到模拟器的 exe 文件打开,
都会报错 —— “有文件找不到”。
在这里插入图片描述

0x01 原理解释

我们会有这样一种经验:
很多程序,我们把整个文件夹剪切到其他地方之后,虽然一个文件都没少,就是没法用了。
这其实是因为,很多通过安装包安装的程序,通常使用绝对路径来定义每个资源应该去哪个位置获取。
例如 C:/abc/Emulator.exe,我们把 abc 文件夹挪到 D 盘,但这个路径却不会跟着我们的剪切而变化。
这样一来,程序执行中需要找资源的时候,路径所对应的位置却什么都找不到。

我们平日里见到的“绿色版”的程序其实就是这些路径由相对路径来定义。
例如 当前目录/bin/emulator.exe,所以文件夹在哪,不影响程序在这个 当前目录 找到对应的资源。

0x02 解决方案

在 Linux 里,有一个特别好用的办法叫做 soft link。
可以理解为呼叫转移,我们把手机号 DEST 呼叫转移给 SRC,这样我们给这两个号码打电话的时候其实都是在给 SRC 打,我需要 DEST/abc.txt 的时候,机器会自动把 SRC/abc.txt 给我。
这个操作在 linux 里可以写为 ln -s <dest_path> <src_path>
例如 ln -s /home/chendian /home/chend,可以解决在不同机器上名字不同,但又不想改 path 的问题。

但在 Windows 里,用 git bash 来这样操作,却是不行的。
我们可以发现,SRC 和 DEST 虽然连接起来了,但他们俩都占用了 17.9G 的空间,
看来 Windows 的事,还是得交给命令行,去查阅了一些资料,这种方案是完美而有效的:
mklink /D <dest_path> <src_path>,例如 mklink /D "C:\Program Files\MuMu" "D:\MuMu"

完整的操作过程如下所示:

  • C 盘的原有一个目录 MuMu 占用空间 17.9G,
  • MuMu 被剪切到 D 盘,C 盘没有 MuMu 文件夹了,桌面上 MuMu.exe 的快捷方式用不了了
  • mklink /D "C:\Program Files\MuMu" "D:\MuMu"
  • C 盘出现一个 MuMu 占用空间 0
  • D 盘的 MuMu 占用空间 17.9G
  • 桌面、开始菜单里的快捷方式都可以无知觉地继续正常工作

0x03 延伸阅读

关于 symlink 的介绍,这篇我觉得写的很好,摘抄一下。
reference: https://blog.51cto.com/u_15449929/4764192

符号链接(Symlink,Softlink)
是对文件或目录的引用,实际上符号链接本身是一个“记录着所引用文件或目录的绝对或相对路径”的特殊文件,通过符号链接的操作都会被重定向到目标文件或目录。对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文件或目录,但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身。

同时适用于文件、目录。这是一种超级shortcut,文件大小为0字节和不占用空间。

可以使用相对、绝对路径。假设创建symbolic link时使用了相对路径,保存到NTFS中的就是相对路径,不会隐式转换成绝对路径。

可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。

在Explorer中删除symboliclink,不影响target。

删除target,symboliclink仍将存在,但失效了,变得不可用。

文件类型是.SYMLINK

它们可以像普通文件一样操作,但所有对符号链接的操作都实际作用于目标对象。符号链接对用户而言是透明的,符号链接看上去和普通的文件和文件夹没有区别,操作方法也一模一样。

对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文件或目录,但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身,符号链接不但可以应用于本地系统,还可以应用 UNC 路径。

创建符号链接不仅可以当作快捷方式使用,最重要的是重定向链接符可以被程序读取然后重定向真正的位置,这是快捷方式无法做到的。

0xFF 实际效果演示

这个指令是在命令行中使用的,
所以我们需要先使用管理员权限打开 CMD:

在这里插入图片描述

本例中:
“D:\MuMu” 是 17.9G 的目录,是源文件夹
“C:\Program Files\MuMu” 是 0B 大小的 SymLink,是生成的链接文件夹

C:\Program Files>mklink /D "C:\Program Files\MuMu" "D:\MuMu"
为 C:\Program Files\MuMu <<===>> D:\MuMu 创建的符号链接

C:\Program Files>dir
 驱动器 C 中的卷是 System
 卷的序列号是 787D-CF6D

 C:\Program Files 的目录

2022/08/05  13:16    <DIR>          .
2022/08/05  13:16    <DIR>          ..
2022/05/24  15:56    <DIR>          Lenovo
2022/03/06  15:09    <DIR>          Mendeley Reference Manager
2022/08/05  13:16    <SYMLINKD>     MuMu [D:\MuMu]
2022/06/03  23:31    <DIR>          NVIDIA Corporation
2021/04/11  22:41    <DIR>          TENCENT
2016/04/02  09:48    <DIR>          ThinkPad
               0 个文件              0 字节
              61 个目录 25,995,014,144 可用字节

C:\Program Files>cd MuMu

C:\Program Files\MuMu>dir
 驱动器 C 中的卷是 System
 卷的序列号是 787D-CF6D

 C:\Program Files\MuMu 的目录

2022/08/05  12:41    <DIR>          .
2022/08/05  12:41    <DIR>          ..
2022/08/05  12:41    <DIR>          emulator
               0 个文件              0 字节
               3 个目录 46,871,433,216 可用字节

C:\Program Files\MuMu>

资源管理器里看起来依然是一个快捷方式的样子
但在上文中我们知道,这并不是快捷方式的 MuMu.lnk 文件,而是 SYMLINKD 格式的。
2022/08/05 13:16 <SYMLINKD> MuMu [D:\MuMu]

在这里插入图片描述

Windows中创建软链接 Windows中创建软链接 简介 有没有遇到过以下情况, 游戏项目研发时,策划与美术资源分离,希望能同时整合到项目中,但又不希望全部混在一起 有些时候会将一部分资源放到U盘或者移动硬盘中,在公司希望能映射到某些其它的地方 … 往往希望能有一种方式,可以将指定的目录映射到其它的目录的某个位置上,可以不用真的拷贝文件,只是以软链接的方式访问。本文将借助于工具Junction来展示一种可实现的方式... 阅读详情

相关推荐

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并Bin文件

本文通过OutconvertBin.py实现了 C2000 Bootloader+UserApp 的「ELF 转 BIN+BIN 合并」全流程自动化,核心优势如下: 架构适配:严格遵循 C28x 16 位大端格式,生成的 BIN 文件可直接烧录; 自动化程度高:一键完成清理、转换、合并,无需手动执行多个命令; 可追溯性:生成 CRC32 校验值,便于验证文件完整性; 量产友好:合并后的merged.bin支持一次性烧录,提升量产效率。

昔时扬尘处 149

符号链接(Symbolic Link)详解:链接文件新世界!

符号链接是一种特殊的文件,它包含了对其他文件或目录的路径信息。通过符号链接,我们可以在文件系统中创建一个称为"链接文件"的文件,并且这个文件指向了另一个文件或目录的位置。符号链接文件可以像普通文件一样被操作和访问,而不会破坏原始文件结构。通过本篇博客的学习,我们详细了解了符号链接的概念、原理、特点和使用方法。我们学习了如何创建和删除符号链接,以及符号链接在文件共享和访问、件安装和依赖管理、文件备份和迁移等方面的应用场景。同时,我们也了解了符号链接的注意事项和局限性。

m0_72410588的博客 1万+

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1415

/硬链接

硬链接(p91) 通过索引节点链接,一个文件有多个有效路径名,多个文件名指向同一索引节点。 #include<unistd.h> int link("已存在文件","硬链接文件"); 创建 int unlink("文件名"); 如果该文件对应的inode有多个文件名, 删除一个代表硬链接数减一,减为0才删除该文件。 软链接 类似win的快捷方式,文件中包含被链接文件的路径。 int symlink("已存在文件","连接文件"); 创建 int readlink("连接文件",buf

瑞_板凳精神 653

符号链接symlink_Linux中的Symlink教程–如何创建和删除符号链接

符号链接symlinkA symlink (also called a symbolic link) is a type of file in Linux that points to another file or a folder on your computer. Symlinks are similar to shortcuts in Windows. 符号链接(也称为符号链接)是Linu...

cumian8165的博客 1万+

软链接(Symbolic Link)

软链接(Symbolic Link),在类 Unix 系统中通常被称为符号链接,允许为文件或目录创建一个指向另一个文件或目录的引用。软链接类似于 Windows 系统中的快捷方式。软链接非常有用,特别是需要在不同位置引用同一个文件或目录,或者当你需要重命名或移动文件系统的一部分而不影响指向它们的链接时。

qq_45921549的博客 1198

硬链接和符号链接详解

文件属性连接: 链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。 在硬链接的情况下,参数中的“目标”被链接至[链接名]。如果[链接名]是一个目录名,系统将在该目录之下建立一个或多个与“目...

白衣不染尘的博客 2万+

linux迁移件安装,迁移到 Linux:安装

所有的 Linux 打包系统和工具都会让人迷惑,但是这篇面向初学者的教程可以帮助你搞明白。如你所见,众所瞩目的 Linux 已经用在互联网,以及 Arduino、Beagle 和树莓派主板等设备上,或许你正在考虑是时候尝试一下 Linux 了。本系列将帮助你成功过渡到 Linux。如果你错过了本系列的早期文章,可以在这里找到它们:安装件要在你的计算机上获得新件,通常的方法是从供应商处获得件产...

weixin_30588427的博客 547

Linux || 软链接和硬链接

linux系统中,链接可以分为两种:1.硬链接(Hard Link)2.连接或者符号连接(Symbolic Link)

qq_60271706的博客 2103

【操作系统-109】软链接

符号链接(symlink 或软链接)是一种特殊的文件,它存储了另一个文件或目录的路径信息。不同于硬链接,符号链接不直接指向文件的 inode,而是存储目标路径。当访问符号链接时,操作系统会自动解析符号链接并将操作重定向到目标文件或目录。基于符号链接的共享方式是一种灵活而强大的文件管理方式,它允许在不同位置创建指向相同文件或目录的快捷方式。通过符号链接,可以轻松地实现文件共享、跨文件系统访问、版本管理、系统维护等功能。与硬链接相比,符号链接提供了更多的灵活性,尤其是在处理跨文件系统和目录的共享时。

m0_69378371的博客 1238

macOS上的符号链接Symlink是什么,以及该怎么使用

前言 最近开始使用MacBook工作,在安装git的时候得到了可以把"symlink"放在桌面的提示,就想看一下什么是symlink,发现中文的文档基本都是机翻和转帖,翻译的也是驴唇不对马嘴的,我就找到这篇文章并翻译了一下,希望能给想了解symlink的同学省点自己找的时间。 macOS上的符号链接Symlink是什么,以及该怎么使用 符号链接(Symbolic links),也被称为Symlinks,是一类特殊的文件,指向系统上的其他文件或者目录,可以认为是macOS上的一种比较先进的别名(aliase)

qq_34037455的博客 7068

符号链接symlink_什么是符号链接或符号链接? 如何为WindowsLinux创建Symlink?

符号链接symlinkSymbolic Links are also known as Symlinks. Symlinks are used to create a shortcut for a given file or folder. Symlinks are very useful for different purposes which also prevents copy the sa...

cunjiu9486的博客 4390

如何在windows上创建软链接、文件夹映射

在项目开发中,我们经常希望有一种方法将指定的目录映射到其他目录中的某个位置,这样我们就可以在一个软链接中访问文件,而不是实际复制文件。软链接也叫符号链接。该文件包含另一个文件的路径名。它可以是任何文件或目录,并且可以链接不同文件系统的文件。 准备工具 点击下载工具Junction密码:6xun 下载完成后,根据你的电脑选是64位还是32位,并直接复制到“C:\windows\system32”文件夹下。 创建软链接 打开命令行,运行命令 Junction -s D:\windows C:\..

D.Chen的博客 2248

符号链接(软链接、Symbolic link)是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。

在某些Windows操作系统(包括但不限于Windows XP、Windows Vista)中,操作系统会对文件路径的改变作一定程度的自动处理,使得快捷方式将在大多数情况下能保持有效:当快捷方式指向的目标失效而目标被移动过时,系统将自动修改快捷方式的目标到新的位置。快捷方式是普通的文件(拥有扩展名 .lnk),而非符号,因此,快捷方式可以被复制、移动、更改(某些特殊的快捷方式无法更改所有信息)或删除。这种符号链接文件里包含有一个指向目标文件的文本形式的引用,以及一个指示自己为符号链接的标志。

weixin_40191861的博客 789

win10下使用mklink将C盘内的件搬到E盘

因为之前装系统时磁盘出了点故障,所以只剩下了一个C盘,就直接把C盘分区,而且有的件安装在C盘才不会出故障,导致C盘内存不够,现在要把大内存件移动到E盘,在网上找的方法有二: 一:直接用件搬家,亲测电脑管家的搬家小工具,搬不动,卡死 二:win10使用mklink命令,这里遇到的坑在此记录一下 流程是先将c盘中的文件复制到e盘,然后我看了好多方法就是告诉你win+R打开命令窗口输入mklink命令行如下: mklink/j "原文件夹绝对路径" "转以后的文件夹绝对路径" 坑来了。。。 报错:mkli

cy311508010202的博客 4267

符号链接文件_Windows10下创建符号链接(SymbolicLink)

什么是符号连接(Symbolic Link)?符号连接从Vista开始就得到支持,属于NTFS内置的功能,符号链接适用于文件、目录。可以理解为一种超级快捷方式。支持相对路径、绝对路径。假设创建symbolic link时使用了相对路径,保存到NTFS中的就是相对路径,不会隐式转换成绝对路径。可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器等。符号链接旨在帮助迁移和应用程序与UNIX操作系统...

weixin_36266554的博客 2332

linux下添加link,Linux中的symbolic link

symbolic link,即Linux中的符号链接,此文件包含了指向另一个位置的路径,这个位置可以是任意文件或目录,也可以链接不同文件系统的文件,甚至可以链接不存在的文件,这就产生一般称为“断裂”的问题(现象),还可以不断的循环链接自己。用ln -s 命令可以生成一个符号链接,如下所示:$ln -s source_file softlink_file在对符号链接进行读写操作的时候,系统会自动把该...

weixin_34795892的博客 1195

如何windows下创建软链接symbolic link。

win7/win8 可以使用 mklink 命令,该命令格式:mklink /d(定义参数) \MyDocs(链接文件) \Users\User1\Documents(原文件)

yirongping的专栏 3495

硬链接与软链接 (符号链接)的区别与联系

linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link)。 硬链接与软链接Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。通过剖析硬链接与软链接的联系与区别,我们可更好的了解 L...

9464

linux删除_在 Linux 中怎样移除(删除)符号链接 | Linux 中国

你可能有时需要在 Linux 上创建或者删除符号链接。如果有,你知道该怎样做吗?之前你做过吗?你踩坑没有?如果你踩过坑,那没什么问题。如果还没有,别担心,我们将在这里帮助你。-- Magesh Maruthamuthu你可能有时需要在 Linux 上创建或者删除符号链接。如果有,你知道该怎样做吗?之前你做过吗?你踩坑没有?如果你踩过坑,那没什么问题。如果还没有,别担心,我们将在这里帮助你...

weixin_39552037的博客 311

KFC微信小程序源码.zip

KFC微信小程序源码.zip

上一篇: 【Requests】Bilibili Security 1024程序节 CTF记录
下一篇: 【SQLite3】使用 SQLite 为模型训练中的并行 dataloader 节省内存
糖果天王
博客等级 码龄16年 231粉丝 304原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果天王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值