Windows 的 mklink 与抽象泄漏法则

来源:互联网 发布:帝国cms演示站 编辑:程序博客网 时间:2024/06/16 03:31

每个 Linux 迷都会对 Windows 下的快捷方式深恶痛绝。

这不是快捷方式的错,事实上 KDE 和 GNOME 下的对应快捷方式的东西(确切的说是程序启动器,就是那种把图标、命令、参数和描述捆在一起的东西)工作的还要更差劲些。关键是每次在 Windows 下需要建立一个 LINK 时,Linux 迷总是找不到一个对应的方法(因为不存在),而此时长得最像 link 的就是快捷方式。毫无疑问,光长得像是不能解决问题的,结果就是可怜的快捷方式要挨骂了。

其实新版的 Windows 下是可以建立 link 的,在命令行输入 mklink 即可。那就是一个削弱版的 ln 命令(或者用 MS 的说法叫做 Starter 版本)。

有了 mklink 命令,现在我们可以把以前放在 C 盘的东西——比如我的音乐放到其它分区了。

等等,本来就可以把整个“我的文档”放到别的分区,何必用 LINK?这不是你的问题,这是有些白痴程序员犯的错误!不管你相信与否,很多程序员到今天还在大量使用绝对路径,他们写出的软件“必须”安装在特定的位置,否则就会在某年某月某个雨后的下午给你一个让你风中凌乱的惊喜。而且——很多这类白痴程序员居然正在微软这一级别的一流软件公司里面供职,所以你逃也逃不掉,跑也跑不了。

或者,可以把 NTFS 分区挂到指定的文件夹?可以,但是只能粗线条的解决问题,粒度不够细。对于上面的用户文件夹例子可行,但如果你要把某个程序的临时文件夹剥离出来怎么办?新建个分区?

只有 mklink 能够完美解决问题,不是吗?

可惜不是,想想抽象泄漏法则。

Windows 的文件体系和 *nix 不同,它是基于盘符的,这使得微软的开发人员常常会进行一个假设:不同盘符下的文件就是不同分区上的文件!通常这是对的,有了 mklink 以后就不是了。

后果倒不太严重。我们在 C: 提示符下执行 mklink /J A D:/A。现在,进入 C:/A 并且试图把里面的文件移动到 D 盘根目录试试看?你看到了不同,本来应该瞬间完成的任务(在同一分区下移动文件),变得慢吞吞的(系统开始执行 复制 + 删除 的动作),因为某个程序员做了那个本来不那么愚蠢的假设。再试试用 Mesh 来同步 C:/A,你发现那是做不到的。你以为那是相同的抽象,结果泄漏了。

没有什么是完美的,OS 也不例外。

PS. Linux 的桌面长得越来越像 Windows,Windows 的命令行开始模仿 Linux。苹果在旁边做鄙视状……(不过我需要的是便宜量足,所以除非苹果你能出1W以下的真4核机,我还是会继续买宏基)

PS II. 先前说 Linux 的桌面越来越像 Windows 是不对的,GNOME 和 KDE 现在都可以比 Windows 炫,而且有很多创新。但很多人把目光盯在超炫的特效上,我觉得那是不对的。华丽的特效不等于好的用户体验,要向苹果看齐。

PS III. 说 Windows 的命令行模仿 Linux 也是不对的,cmd 实在是太差劲,无论是剪贴复制那样的基础操作还是颜色、缓冲区等设置都实在太让人失望。而 PowerShell 虽强,离开了 .Net 能做的也不多。嗯,回头说 cmd 的复制粘贴,前几天我以前公司的 IT 经理发来段错误报告,居然用的是截图,cmd 虽然差劲,但总算也可以 Select All => 回车 来复制文本输出啊,不晓得他是怎么当 IT 的,就算不知道管道或重定向,连复制都不会,tmd。

原创粉丝点击