<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Life - WeiG &#187; symbollink</title>
	<atom:link href="http://www.weigblog.com/tag/symbollink/feed" rel="self" type="application/rss+xml" />
	<link>http://www.weigblog.com</link>
	<description>Yet another Life</description>
	<lastBuildDate>Thu, 05 Jan 2012 03:13:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Vista的Symbolic Link</title>
		<link>http://www.weigblog.com/2007/06/15/vista-symbol-link.html</link>
		<comments>http://www.weigblog.com/2007/06/15/vista-symbol-link.html#comments</comments>
		<pubDate>Fri, 15 Jun 2007 06:36:41 +0000</pubDate>
		<dc:creator>Wei</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[hardlink]]></category>
		<category><![CDATA[symbollink]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.weigblog.com/2007/06/15/vista-symbol-link.html</guid>
		<description><![CDATA[以前一直是只有Unix-like系统上面才有Symbol Link的概念。在Unix下，Symbol Link带来了无数的好处（当然也是有缺点的）。 简单的例子，假如你创建了一堆具有相对链接的东西（比如网站上面用的页面）。如果某个文件的位置发生了变化，你会如何操作？在以前的Windows中，就要逐一修改HTML页面，指向新的位置，却难免少改了一个两个文件的。而Symbol Link正好解决这样的问题。只需要在老的位置创建一个Symbol Link，这样所有指向老的link的地方，都会自动转到新的位置。 另一个例子，在编译程序的时候（尤其是你使用Make的时候），比如lib/dll/&#8230;之类的东西有版本的区别，Unxi一般是这样写的：libxxxx-1.0.0.so，libxxxx-1.0.1.so。如果在Make文件中直接指定这些文件，不仅在版本升级的时候改起来很麻烦，而且一旦少改了一个，很可能出现莫名其妙的错误。Symbol Link上~~~ Vista开始直接支持Symbol Link了（Dev Ref），你可以使用mklink（CLI APP）来创建Symbol Link。从GUI上看，Symbol Link就是表示为一个0字节的快捷方式。在CLI里面，面向目录的Symbol Link被表示为&#60;JUNCTION&#62;和&#60;SYMLINKD&#62;；而面向文件的，则被表示为&#60;SYMLINK&#62;;。mklink也支持Hard Link，创建的Hard Link直接表示为和target文件一样的一个新文件。 Symbol Link和Shortcut Link是不一样的，这里我举个我刚刚完成的例子： 例子1： 前提：我使用的虚拟机是Virtual Box。刚刚装好的时候，我创建了一个Ubuntu的虚拟机。硬盘文件达到了3.5GB，这时我希望把这个文件复制到别的盘，以便节省我的硬盘空间。（这个例子其实没有Symbol Link也是完全可以的） 如果没有Symbol Link，我会这样做：首先复制Ubuntu.vdi文件到新的地方，然后启动Virtual Box修改硬盘文件的位置。 而我现在是这样做的：复制Ubuntu.vdi到新的地方，然后用mklink创建一个Symbol Link。搞定，Virtual Box仍然没有任何的变化。 当然，我使用的这个例子，不用Symbol Link也不会增加多少麻烦，可如果真的是需要修改的内容很多，那么手工修改，自然就不太适合了。不过，在这个例子中，仍然有个局限。图中的F:\是我的一个USB移动硬盘。估计有人想到了：现在移动硬盘是F:\。如果我在接入这块移动硬盘前，先 插了一个其他的存储设备，占用了F:\。那么，在之前指向F:\的Symbol Link仍然是无效的。这只能怪该死的微软，非要用字母表示分区，还是动态的。如果向Unix那样，可以任意把不同的设备挂在指定的目录中，也就没有这个 事儿了。 例子2： 前提：Vista有个Public文件夹，用来存放和用户无关的照片、音乐等。而我把MP3都复制到了Public\Music文件夹中。之前的做法是，在%HOMEPATH%\Music下创建一个Shortcut link到%PUBLIC%\Music。 使用Symbol Link可以近乎完美的解决这个问题：删除%HOMEPATH%\Music文件夹，创建一个名为%HOMEPATH%\Music的JUNCTION，指向%PUBLIC%\Music文件夹。这样的结果就是，一步多于的操作都没有，就把Music重定向到Public了。开始菜单、Favorite Link，总之以前所有指向%HOMEPATH%\Music的地方，全都自动转向%PUBLIC%\Music了。 更关键的是，以后即便不希望这种重定向发生，需要做的也只是删除Symbol Link即可。 那么Hard Link和Symbol Link有什么区别呢？在Vista中，Symbol Link其实是创建了一个指向目标文件的索引，所以当Symbol Link指向的文件被删除时，访问Symbol Link就会出现File not found的错误（就好像是快捷方式指向的文件被删除了）；而Hard Link则更像是文件的另一个名字（它们虽然同名，却存储在同一片磁盘空间中），创建一个Hard Link仅仅相当于给文件添加一个“别名”，而只有当所有的名字都被删除时，文件才会真正的删除。 举例来说，如果有文件Test.txt，创建一个名为TS的Symbol Link；当文件Test.txt被删除以后，再编辑TS的时候，就会得到一个“找不到文件”的错误。而同样是Test.txt，创建一个名为TH的Hard [...]]]></description>
			<content:encoded><![CDATA[<p>以前一直是只有Unix-like系统上面才有Symbol Link的概念。在Unix下，Symbol Link带来了无数的好处（当然也是有缺点的）。</p>
<p>简单的例子，假如你创建了一堆具有相对链接的东西（比如网站上面用的页面）。如果某个文件的位置发生了变化，你会如何操作？在以前的Windows中，就要逐一修改HTML页面，指向新的位置，却难免少改了一个两个文件的。而Symbol Link正好解决这样的问题。只需要在老的位置创建一个Symbol Link，这样所有指向老的link的地方，都会自动转到新的位置。</p>
<p>另一个例子，在编译程序的时候（尤其是你使用Make的时候），比如lib/dll/&#8230;之类的东西有版本的区别，Unxi一般是这样写的：libxxxx-1.0.0.so，libxxxx-1.0.1.so。如果在Make文件中直接指定这些文件，不仅在版本升级的时候改起来很麻烦，而且一旦少改了一个，很可能出现莫名其妙的错误。Symbol Link上~~~</p>
<p>Vista开始直接支持Symbol Link了（<a href="http://msdn2.microsoft.com/en-us/library/aa365680.aspx">Dev Ref</a>），你可以使用mklink（CLI APP）来创建Symbol Link。从GUI上看，Symbol Link就是表示为一个0字节的快捷方式。在CLI里面，面向目录的Symbol Link被表示为&lt;JUNCTION&gt;和&lt;SYMLINKD&gt;；而面向文件的，则被表示为&lt;SYMLINK&gt;;。mklink也支持Hard Link，创建的Hard Link直接表示为和target文件一样的一个新文件。</p>
<p style="text-align: center"><img src="/wp-content/uploads/images/SymbolLink_01.jpg" /></p>
<p>Symbol Link和Shortcut Link是不一样的，这里我举个我刚刚完成的例子：</p>
<p><strong>例子1：</strong></p>
<p>前提：我使用的虚拟机是Virtual Box。刚刚装好的时候，我创建了一个Ubuntu的虚拟机。硬盘文件达到了3.5GB，这时我希望把这个文件复制到别的盘，以便节省我的硬盘空间。（这个例子其实没有Symbol Link也是完全可以的）</p>
<p>如果没有Symbol Link，我会这样做：首先复制Ubuntu.vdi文件到新的地方，然后启动Virtual Box修改硬盘文件的位置。</p>
<p>而我现在是这样做的：复制Ubuntu.vdi到新的地方，然后用mklink创建一个Symbol Link。搞定，Virtual Box仍然没有任何的变化。</p>
<p>当然，我使用的这个例子，不用Symbol Link也不会增加多少麻烦，可如果真的是需要修改的内容很多，那么手工修改，自然就不太适合了。不过，在这个例子中，仍然有个局限。图中的F:\是我的一个USB移动硬盘。估计有人想到了：现在移动硬盘是F:\。如果我在接入这块移动硬盘前，先 插了一个其他的存储设备，占用了F:\。那么，在之前指向F:\的Symbol Link仍然是无效的。这只能怪该死的微软，非要用字母表示分区，还是动态的。如果向Unix那样，可以任意把不同的设备挂在指定的目录中，也就没有这个 事儿了。</p>
<p><strong>例子2：</strong></p>
<p>前提：Vista有个Public文件夹，用来存放和用户无关的照片、音乐等。而我把MP3都复制到了Public\Music文件夹中。之前的做法是，在%HOMEPATH%\Music下创建一个Shortcut link到%PUBLIC%\Music。</p>
<p>使用Symbol Link可以近乎完美的解决这个问题：删除%HOMEPATH%\Music文件夹，创建一个名为%HOMEPATH%\Music的JUNCTION，指向%PUBLIC%\Music文件夹。这样的结果就是，一步多于的操作都没有，就把Music重定向到Public了。开始菜单、Favorite Link，总之以前所有指向%HOMEPATH%\Music的地方，全都自动转向%PUBLIC%\Music了。 更关键的是，以后即便不希望这种重定向发生，需要做的也只是删除Symbol Link即可。</p>
<p>那么Hard Link和Symbol Link有什么区别呢？在Vista中，Symbol Link其实是创建了一个指向目标文件的索引，所以当Symbol Link指向的文件被删除时，访问Symbol Link就会出现File not found的错误（就好像是快捷方式指向的文件被删除了）；而Hard Link则更像是文件的另一个名字（它们虽然同名，却存储在同一片磁盘空间中），创建一个Hard Link仅仅相当于给文件添加一个“别名”，而只有当所有的名字都被删除时，文件才会真正的删除。</p>
<p>举例来说，如果有文件Test.txt，创建一个名为TS的Symbol Link；当文件Test.txt被删除以后，再编辑TS的时候，就会得到一个“找不到文件”的错误。而同样是Test.txt，创建一个名为TH的Hard Link；当文件Test.txt被删除后，再编辑TH，仍然是可以的。因为此时TH仍然指向以前Test.txt的空间，而删除Test.txt，只是删除了存储Test.txt文本的一个别名而已，文件实际上并没有删掉。</p>
<p>那么似乎Hard Link更实用一些？其实不一定，就象之前所说的，Hard Link只是指向同一磁盘区域的一个“别名”，那就是说，如果Hard Link和目标文件不在同一个分区上，别名也就不复存在了。所以Hard Link和目标文件被要求放在同一磁盘分区中。显然，Symbol Link的适用范围更广一些。</p>
<p><strong>Update Aug. 17th, 2007  23:03 PST：</strong>好像有个问题，%USERPROFILE%\Links是存放显示在Explorer左侧的Favorite Links的地方，但这里貌似不支持创建指向Symbol Link（或Junction）的快捷方式。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.weigblog.com/2007/06/15/vista-symbol-link.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

