xiaq's Blog

Windows 趣闻之 File System Redirector

计算机网络课的第一次实验在 Windows 平台上做的(好吧后面的都是……),网络基本命令中的 arp, ping, tracert 什么的和 Unix 下并没有什么区别,但是 nbtstat 在 Unix 下貌似没有对应的等价物了。

幸好不久前 alick 要做 PDF 转换服务于是配了一台 Windows Server 2008R2 VM (ws.tuna.tsinghua.edu.cn),上面还跑了 cygwin 和 openssh server,于是就直接 ssh 上去(实际上是 mosh)来做计网实验了。

不过奇葩的事情发生了:

~$ nbtstat
zsh: command not found: nbtstat

第一反应是 Windows 版本太高没有 nbtstat 了……远程桌面过去开 cmd 之后发现是有 nbtstat 的,用文件管理器也可以看到 C:\Windows\System32 下确实有 nbtstat.exe。但是在 cygwin 下:

~$ ls /cygdrive/c/Windows/System32/nbtstat.exe
ls: cannot access /cygdrive/c/Windows/System32/nbtstat.exe: No such file or directory

在 Cygwin 下看到的文件系统和 cmd/文件管理器中看到的文件系统是不一样的……

放狗搜了下,发现我果然不孤单,一样有人在 Cygwin 上用 nbtstat 未遂。一位貌似 Cygwin developer 的人(他的头像是那个简陋的 Cygwin logo)回复提到是 File System Redirector 作祟。

Cygwin 是 32bit 应用程序,而 ws.tuna.tsinghua.edu.cn 是 64bit 的 OS。简单的说这是 WOW64 (Windows 32-bit on Windows 64-bit) 的一个 hack,32bit 的应用程序跑在 64bit 系统上时 C:\Windows\System32 实际上是 C:\Windows\SysWoW64。而 nbtstat.exe (因为某种神奇的原因)是 64bit-only 的,所以就直接 command not found 了。

还好这个 hack 保留了一个绕过的方法,使用 C:\Windows\Sysnative 还是可以访问真正的 system32 的。所以解决方案就是把这个目录加到 PATH 中:

~$ export PATH=/cygdrive/c/Windows/Sysnative:$PATH
~$ which nbtstat
/cygdrive/c/Windows/Sysnative/nbtstat

继续做作业吧喵……




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee