金笛邮件论坛  

返回   金笛邮件论坛 > 金笛电子邮件系统 > 金笛邮件售后服务专区

回复
 
LinkBack 主题工具 显示模式
旧 2013-01-07, 16:32   #1 (permalink)
版主
 
注册日期: 2012-02-07
帖子: 281
默认 Windows系统创建软链接、硬链接的方法

============首先先白活一下儿有可能是众所周知的概念,各位可以忽略此段直接到下一个无敌的分割线============
之前在使用linux系统时,经常会用到创建链接的操作,所谓链接,就是创建一个符号,将这个符号指向一个文件或者目录,
个人理解,也可以说是这个符号是指向文件或者目录的一个指针。
软链接也叫符号链接,关于这两种链接的区别,将在最后说明。
我在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最后不要加”/”】
再重新创建软链接:
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吧,
下载下来是个安装包,最新的版本已经内置了中文,安装时可以选择中文,并且可以不安装其他的语言,以节省空间。
下载,安装,并没有发现可以做软链接的功能,忽略。
但是这个作为资源管理器的替代者倒是很强大,又发现了个很好滴工具。
————————————————–
总结:在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
第一条为硬链接,第二条为软链接
代码:
$ 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
我的结论就是:硬链结只有全部被删除的时候,文件才无法访问,但是软链接,只要他的源文件消失了,这个文件就无法访问了。软链接就是记录了文件路径的一种特殊文件。
chyb 当前离线   回复时引用此帖
回复

书签


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 17:15


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.