Windows系统创建软链接、硬链接的方法| Tower Jing::Thanksgiving

Windows系统创建软链接、硬链接的方法

============首先先白活一下儿有可能是众所周知的概念,各位可以忽略此段直接到下一个{wd}的分割线============
之前在使用linux系统时,经常会用到创建链接的操作,所谓链接,就是创建一个符号,将这个符号指向一个文件或者目录,
个人理解,也可以说是这个符号是指向文件或者目录的一个指针。

软链接也叫符号链接,关于这两种链接的区别,将在{zh1}说明。

我在linux经常使用软链接,主要用途下面举个例子:

比如在编译apache之后,会产生如下目录,/usr/local/apache2.0/
这时的启动apache的命令就是:
/usr/local/apache2.0/bin/apachectl start

接下来,我要将apache2.0升级到apache2.2,
那么我的启动apache2.2的命令就是:
/usr/local/apache2.2/bin/apachectl start

现在,我要将系统中所有用到/usr/local/apache2.0/bin/apachectl start的地方(例如启动脚本,crontab等)
都换成/usr/local/apache2.2/bin/apachectl start

很累,万一想从2.2版本,切换回2.0版本,还要再都改一遍。

我的方法是创建一个软链接,在最开始编译好apache2.0时,创建软链接命令如下:

ln -s /usr/local/apache2.0/ /usr/local/apache2

这样,apache2就是apache2.0的一个软链接了,
现在,我的/usr/local/目录下除了apache2.0还有了apache2.2,
那么我只要取消原来的apache2软链接:
unlink /usr/local/apache2 【这里需要特别注意的是,apache2{zh1}不要加”/”】
再重新创建软链接:
ln -s /usr/local/apache2.2/ /usr/local/apache2

这样,我其他地方启动apache的脚本统一写成:
/usr/local/apache2/bin/apachectl start

通过切换软链接的方式,来启动不同版本的apache,方便又省事儿,而且,如果从2.0切换至2.2之后,发现有问题,还可以通过这种方式快速的切换回2.0版本。

好了,贫了这么半天,来说说windows下如何创建链接吧,
今天发现电脑的E盘只剩下200多M了,一看自己的eclipse的workspace占用了6个多G,于是乎,有了转移workspace目录的想法,C盘还有10多个G,就放在C盘吧。

============windows自带的命令行下如何创建硬链接============

先来一句话说明windows创建硬链接的方法:
命令行中执行:
fsutil hardlink create <新文件名> <现有文件名>
例如:
fsutil hardlink create e:\target.txt e:\source.txt

则在E盘根目录创建了名为”target.txt”的,指向E盘根目录的source.txt的硬链接,需要说明的是:
硬链接文件有两个限制(Unix/Linux 和 Windows 也都如此)
(1) 不允许给目录创建硬链接;
(2) 只有在同一文件系统中的文件之间才能创建链接。

在windows下,创建硬链接还必须是在同一个卷(分区)下。

很显然,这个并不能符合我转移workspace的需求,于是乎~~~~~~
为了转移workspace后,不影响现在eclipse的使用,决定采用软链接的方式。
============windows如何创建软链接============

上网上搜索了资料,得知可以使用如下三种方法来实现,Junction,GNU utilities for Win32,Total Commander
(这三个软件在下面的”本文软件网址”中,都附有链接,可以到其网站上去下载)

下面分别说说这三种的不同用法以及主要区别,

情景:workspace转移后在c:\workspace,要求访问e:\workspace等于访问c:\workspace,

首先,Junction,
命令如下:
junction -s e:\workspace c:\workspace
加-s的意思是对子目录执行递归操作,
命令行会显示:
Created: e:\workspace
Targetted at: c:\workspace
好了,现在华丽的访问e:\workspace吧,已经跟c:\workspace一模一样了,
而且,我向e:\workspace加入了200M的文件,并没有占用E盘的空间,而是占用C盘的空间。

好,现在来删除e:\workspace软链接,使用如下命令:
junction -d e:\workspace
命令行会显示:Deleted e:\workspace.
这时的e:\workspace已经没有了,c:\workspace还完好无缺。

满足要求!

【网上有人提到过:
需要注意的是,Explorer 对待 symbolic link 有一个很奇怪的行为。
那就是,在 Explorer 里一个 symbolic link 跟被它 link 的目录没有区别,
删除这个 symbolic link 将会删除被 link 的目录下的所有文件!

但是我在vista系统下测试,删除了e:\workspace,c:\workspace仍然好好的存在。

————————————————–

再来看看GNU utilities for Win32
先下载,下载后,是个zip压缩包,解压缩后,会看到如下的一个目录结构:
UnxUtils\usr\local\wbin
这里面的N多命令,其中的ln.exe就是咱们要使用的来,
【PS:UnxUtils\bin这个目录下有个sh.exe,我一运行就报错,不用去管它,感觉这个就是个加载器,运行后会加载到它的shell环境中,
我把UnxUtils\usr\local\wbin设置在了系统的环境变量中,也可以和方便的在cmd中直接使用每个命令。】

像在linux下一样,在cmd中执行
ln -s c:\workspace e:\workspace
命令行提示:
ln: symbolic links are not supported on this system

阿门,不支持,放弃~~~正如网上所说,这个工具包的ln只能创建硬链接。
虽然ln不支持,但是这个软件包的其他命令还是很不错滴,例如grep,可以很方便的搜索windows文件了,要比windows的垃圾搜索好很多。

————————————————–

来看看Total Commander吧,
下载下来是个安装包,{zx1}的版本已经内置了中文,安装时可以选择中文,并且可以不安装其他的语言,以节省空间。

下载,安装,并没有发现可以做软链接的功能,忽略。
但是这个作为资源管理器的替代者倒是很强大,又发现了个很好滴工具。

————————————————–

总结:在windows下创建软链接,使用junction。

============本文软件网址============

Windows Sysinternals > 下载 > File and Disk Utilities > Junction v1.04

GNU utilities for Win32

Total Commander

============本文windows命令部分参考============

硬链结和符号链接的区别

Q: how to create a symbolic link under Win2K, WinXP, and above?

NTFS 下的硬链接(hard link)与符号链接(symbolic link)

============附:硬链结和符号链接的区别============

硬连接记录的是目标的 inode,符号连接记录的是目标的 path。
软连接就像是快捷方式,而硬连接就像是备份!符号连接可以做跨分区的 link;而 硬连接由于 inode 的缘故,只能在本分区中做 link.所以,符号连接的使用频率要高的多。

存在两种不同类型的链接,软链接和硬链接。修改其中一个,硬连接指向的是节点(inode),而软连接指向的是路径(path)

软链接文件

  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的问题(或曰“现象”),链接文件甚至可以循环链接自己。类似于编程语言中的递归。

命令格式:
代码:
ln [-s] source_path target_path

硬链接文件

  info ln 命令告诉您,硬链接是已存在文件的另一个名字,硬连接的命令是

代码:
ln -d existfile newfile

引用:
硬链接文件有两个限制

  1、不允许给目录创建硬链接;
  2、只有在同一文件系统中的文件之间才能创建链接。

  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改

代码:
$umask 022
$ cp /etc/httpd/conf/httpd.conf /usr/sam

原来前面做的试验,改变了系统默认的umask值,现在改回来为022,
举个httpd.conf文件做例 子

代码:
$ ln httpd.conf httpd1.conf
$ ln -s httpd.conf httpd2.conf

{dy}条为硬链接,第二条为软链接

代码:
$ ls -li

代码:
总用量 80
1077669 -rw-r–r– 2 sam adm 34890 10月 31 00:57 httpd1.conf
1077668 lrwxrwxrwx 1 sam adm 10 10月 31 00:58 httpd2.conf ->; httpd.conf
1077669 -rw-r–r– 2 sam adm 34890 10月 31 00:57 httpd.conf

可以看到,使用ls -li,软连接只产生了10字节的快捷而已,硬连接却实实在在的的拷贝。最前面的inode硬链接和源文件是一样的,而软链接不一样,具体看一下回复

对http1.conf进行编辑,可以发现httpd.conf也发生了一样的变化

代码:
$ rm httpd.conf

现在删除链接的源文件,来比较不同之处

代码:
$ ls -l
总用量 44
drw-r–r– 2 sam adm 4096 10月 30 20:14 file6
-rw-r–r– 1 sam adm 34890 10月 31 00:57 httpd1.conf
lrwxrwxrwx 1 sam adm 10 10月 31 00:58 httpd2.conf ->; httpd.conf

我的结论就是:硬链结只有全部被删除的时候,文件才无法访问,但是软链接,只要他的源文件消失了,这个文件就无法访问了。软链接就是记录了文件路径的一种特殊文件。

差..好文!! (还没评价)

No Messages

Leave a Message


郑重声明:资讯 【Windows系统创建软链接、硬链接的方法| Tower Jing::Thanksgiving】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——