Windows硬链接 软链接 符号链接 快捷方式
http://blog.nsfocus.net/shortcuthard-linkjunction-pointsymbolic-link/
Windows支持4种”链接”机制,分别是shortcut、hard link、junction point、symbolic link。本文针对这4种机制进行简要介绍,可作为速查手册存在。
先吐个槽,天朝很多与本问题相关的技术文章,在术语层面相当混乱,作者的一知半解以及不使用规范术语,给本就容易混淆的概念带来更大的误导。
Windows支持4种”链接”机制,分别是shortcut、hard link、junction point、symbolic link。本文针对这4种机制进行简要介绍,可作为速查手册存在。
先吐个槽,天朝很多与本问题相关的技术文章,在术语层面相当混乱,作者的一知半解以及不使用规范术语,给本就容易混淆的概念带来更大的误导。
--------------------------------------------------------------------------
1) shortcut/快捷方式
以.lnk文件方式存在,适用于Explorer等应用程序。
非NTFS内置机制,从Win95开始得到支持。FAT32支持。
同时适用于文件、目录。
只能使用绝对路径。
可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。
删除shortcut,不影响target。
--------------------------------------------------------------------------
2) (file) hard link
假设本文读者具有*nix基础,此处不做hard link的语义解释。
NTFS内置机制,从Windows NT 4开始得到支持。FAT32不支持。
只适用于文件。
只能使用绝对路径。
hard link与target file必须位于同一volume,可以简单理解成不能跨盘符。
在Explorer中删除hard link,不影响target file。
删除target file,不影响hard link。事实上由于hard link的语义,此时剩下的
hard link就是原始数据的唯一访问点。
相关Win32 API:
CreateHardLink()
CreateHardLinkTransacted()
创建:
mklink /H "hard link name" "target file"
fsutil.exe hardlink create "hard link name" "target file"
查看:
fsutil.exe hardlink list "hard link name"
fsutil.exe hardlink list "target file"
二者效果一样,hard link的语义本就如此。
--------------------------------------------------------------------------
3) (directory) junction point/soft link/reparse point
junction point也叫soft link,这是微软官方文档里说的:
Hard Links and Junctions
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006
junction point的底层机制是NTFS的reparse point:
Reparse Points
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365503
Junction v1.06
http://www.sysinternals.com
http://technet.microsoft.com/en-us/sysinternals/default.aspx
https://technet.microsoft.com/en-us/sysinternals/bb896768
How to create and manipulate NTFS junction points
https://support.microsoft.com/en-us/kb/205524
NTFS内置机制,从Windows 2000/XP开始得到支持。
只适用于目录。Vista的"C:\Documents and Settings\"是指向"C:\Users\"的
junction point,这样一些使用了硬编码"C:\Documents and Settings\"的老程序可
以在Vista上正常工作。
只能使用绝对路径。即使创建junction point时使用了相对路径,保存到NTFS中时将
隐式转换成绝对路径。
junction point必须与target directory位于同一local computer,可以简单理解成
不能跨主机。不能使用UNC路径;假设Z是通过网络映射生成的盘符,同样不适用于Z。
在local computer范围内,可以跨盘符。
在Explorer中删除junction point,有两种情况。对于Windows 2000/XP/2003,会同
步删除target directory,这真是一个奇葩的行为。注意,我们强调,在Explorer中
删除,高版本的Total Commander没有这个奇葩行为。对于Vista及之后版本,不影响
target directory,这才是人类所能理解的行为。
删除target directory,junction point仍将存在,但失效了,变得不可用。这个很
好理解,因为此时junction point指向不存在的目录。
diskmgmt.msc
右键选中某volume
更改驱动器号和路径
添加
装入以下空白NTFS文件夹中
这个功能用的就是junction point机制,还可以用mountvol.exe完成操作。
创建:
mklink /J "junction point name" "target directory" // 生成的Reparse Data相比junction.exe要多
linkd.exe "junction point name" "target directory" // Windows Resource Kits
查看:
dir /A:L /S "path"
fsutil.exe reparsepoint query "junction point name" // 有Reparse Data的16进制转储
linkd.exe "junction point name" // 不能查看junction.exe生成的"junction point"
删除:
fsutil.exe reparsepoint delete "junction point name" // 不建议使用
linkd.exe "junction point name" /D // 可以删除junction.exe生成的"junction point"
它这个行为不是我们期望的效果,比如"target directory"下有普通文件,上述命令
会删除"junction point"下的普通文件,但不会删除"junction point",同时
"target directory"下的普通文件仍然存在。这个效果我不能理解。在Explorer中操
作无法达到这种效果。
sysinternals的junction.exe:
junction.exe "junction point name" "target directory" // 创建
junction.exe "junction point name" // 查看
junction.exe -q -s "path" // 递归查看
junction.exe -d "junction point name" // 删除
我猜junction.exe提供-d参数,就是因为Windows 2000/XP/2003的Explorer奇葩行为,
这个-d不影响target directory。
示例:
"dir /A:L /S c:\
2009/07/14 13:08 "JUNCTION" Documents and Settings [C:\Users]
"junction.exe "C:\Documents and Settings"
C:\Documents and Settings: JUNCTION
Print Name : C:\Users
Substitute Name: C:\Users
"junction.exe -q -s c:\
\\?\c:\\Documents and Settings: JUNCTION
Print Name : C:\Users
Substitute Name: C:\Users
--------------------------------------------------------------------------
4) symbolic link
Symbolic Links
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365680
symbolic link不是soft link,不要跟着SB瞎起哄。
NTFS内置机制,从Vista开始得到支持。
同时适用于文件、目录。这是一种超级shortcut。
可以使用相对、绝对路径。假设创建symbolic link时使用了相对路径,保存到NTFS
中的就是相对路径,不会隐式转换成绝对路径。
可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。
在Explorer中删除symbolic link,不影响target。
删除target,symbolic link仍将存在,但失效了,变得不可用。
相关Win32 API:
CreateSymbolicLink()
CreateSymbolicLinkTransacted()
创建:
mklink "file symbolic link name" "target file"
mklink /D "directory symbolic link name" "target directory"
注意不指定/D时创建file symbolic link,指定/D创建directory symbolic link。
--------------------------------------------------------------------------
Windows硬链接 软链接 符号链接 快捷方式的更多相关文章
- UNIX环境编程学习笔记(10)——文件I/O之硬链接和符号链接
lienhua342014-09-15 1 文件系统数据结构 UNIX 文件系统通过 i 节点来存储文件的信息.如图 1 所示为一个磁盘柱面上的 i 节点和数据块示意图.其中 i 节点是一个固定长度的 ...
- WINDOWS 的 MKLINK : 硬链接,符号链接 : 文件符号链接, 目录符号链接 : 目录联接
玩转WIN7的MKLINK 引言: 换了新电脑,终于再次使用上啦WIN7 ,经过一个周每天重装N次系统,... ... ... ... 在xp系统下,junction命令要用微软开发的小程序 junc ...
- Linux硬链接和符号链接(转)
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引节点来进行连接.在Li ...
- linux 硬链接 软链接
硬链接 链接文件的INode和源文件相同,删除互不影响,不支持跨分区,不支持目录 软链接 链接文件有单独的INode,其Block中存储源文件的INode信息,相当于windows中 的快捷方式 ln ...
- linux笔记-硬链接和符号链接
硬链接:指多个路径名(不同目录下的不同文件名)指向同一个硬盘数据,用其中的随便哪个文件打开修改数据,都会在其他文件打开中更新, 原因就是硬链接和“原”文件inode相同,每增加或者删除一个链接,链接计 ...
- Unix硬链接和符号链接(转)
首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文 ...
- linux下符号链接和硬链接的区别
存在2众不同类型的链接,软链接和硬链接,修改其中一个,硬链接指向的是节点(inode),软链接指向的是路径(path) 软连接文件 软连接文件也叫符号连接,这个文件包含了另一个文件的路径名,类似于wi ...
- 理解 Linux 的硬链接与软链接【转】
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html 从 inode 了解 Linux 文件 ...
- 理解 Linux 的硬链接与软链接(待研究)
从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux ...
随机推荐
- SearchView监听关闭正确方案
SearchView往往需要在关闭的时候清除筛选的数据后加载全部数据,但是oncloseListener在高版本的andorid是不起作用的 ,正确的做法应该是取得searchview中那个close ...
- 转换流 InputStreamReader
通常接触到字节流和字符流,但是有一个流是这两个流的桥梁,inputStreamReader 字符流的结构如下 可以看到inputStreamReader是继承Reader ,它的子类是FileRead ...
- Python 子进程不能input
from threading import Thread from multiprocessing import Process def f1(): name = input('请输入名字') #EO ...
- ThinkPHP5 远程代码执行漏洞被入侵日志,升级最新版本解决
2018年12月9日,ThinkPHP团队发布了一个补丁更新,修复了一处由于路由解析缺陷导致的代码执行漏洞.该漏洞危害程度非常高,默认环境配置即可导致远程代码执行.经过启明星辰ADLab安全研究员对T ...
- 2018上C语言程序设计(高级)作业- 第3次作业成绩
作业地址 https://edu.cnblogs.com/campus/hljkj/CS2017-01/homework/1779 评分准则 第一次作业各项成绩包括三项: 完成PTA所有题目:13分 ...
- centos7下部署node应用程序
一.安装node 二.安装nginx 三.使用express写一个简单的demo,并且使用pm2部署 四.错误 invalid PID number "" in "/ru ...
- SQL的修炼
查询所有区有多少人,从而得知一个区有多少设备. ###############################################select o2.ORG_ENDDATE as name ...
- zznuoj 1195 : 猴子选大王(结构体专题)
题目描述 n只猴子围坐成一个圈,按顺时针方向从1到n编号.然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王. ...
- Introduction tp Operating System
一.虚拟化 为了让用户告诉操作系统如何利用虚拟机功能,OS提供给应用程序一些接口——系统调用,也会说提供了一个标准库. CPU通过分时达到虚拟化. 内存物理模型只是一个字节数组,读写修改需要制定地址. ...
- 校园管家(Android开发团队项目)NABCD
N(Need)需求: 现如今数据越来越零碎化,繁杂化,身为在校大学生的我们也因此对于时间的利用率也相应减少,为了时间的充分利用,减少在冗杂的信息中耽误的时间,充分利用大学资源,因此我们打算做一个专门发 ...