2013年3月16日星期六

Win下的Unix子环境――SUA,从安装到设置入门

Win下的Unix子环境――SUA,从安装到设置入门

Windows往往被很多Linux爱好者鄙视。然而WinNT内核是一个强大的内核。完全可以用Unix的工作方式来玩Windows。早年的Win2k支持三个子系统:WindowsOS/2UNIX。现今OS/2已经没人用了,但UNIX子系统仍然保留在Win7Windows Server 2012当中,这就是SUASubsystem for UNIX based Applications

由于SUA的存在,Windows已是一个POSIX兼容系统。这给我们带来很多好处:讨厌cmd的糟糕语法,想用Bash来控制windows?没有问题!在WindowsUnix-like系统之间互相SSH登录?没有问题!习惯了grepsedawkviwcUnix实用程序?更没有问题!

归根到底,UNIX模式是一种操作方式,一种较为高效的工作方式,一种在许多领域根深蒂固的使用习惯。只要符合POSIX标准,下面的内核到底是 LinuxGNU hurdBSD还是WinNT,又有什么所谓呢?(注:这句话的说法其实不严谨,POSIX标准包含很多方面。Windows至少实现了在源代码和Shell等工具软件层面的POSIX兼容,对于一般用户已经足够。)

SUA适合以下这些用户:喜欢或被迫使用Unix-like工作环境,同时又有在Win平台下无法割舍的软件,觉得Wine和虚拟机都不尽如人意。或者仅仅是被Linux对自己笔记本糟糕的驱动支持搞毛了,不想风扇嗡嗡机身发烫。其实,SUA之外还是有些工具可选的,但可能你并不喜欢它们:玩过cygwin但讨厌它的效率低下和时不时出bugMingWXmanagerputty都只是某个领域的专门工具而不能提供完整的Unix操作体验。

下面本文将简单介绍SUA的一些入门知识。由于我使用SUA的时间也不长,本文仅仅能起到一个简单介绍的作用,更多地是给自己的一份参考笔记,如果能引起读者的兴趣和让读者在尝试时少走些弯路,那就很好了。

SUA的优缺点:

相对于cygwin这样的第三方工具,SUA是官方原生子系统,高效稳定,与系统结合紧密。可以直接调用Windows下的程序,Win下的cmd也可以直接启动SUA下的程序(无需exe扩展名,只看是否有x权限)。然而SUA不能显示非ASCII字符是一个讨厌的问题(也许有办法,但我没找到)。由于挂载文件系统不归子系统层面,要支持EXT文件系统当然还得另想办法。也不直接支持Win的反斜杠路径格式,需要转换一下。

SUA的安装

 

打开系统功能

打开或关闭Windows功能

基于UNIX的应用程序子系统

重启

下载最新的SUA基本安装包

直接从开始菜单中给出的地址下载即可

不一定需要下64位的, 不过即使下64位的, 大部分程序也是32位的

必须以Administrator安装(否则无法使用su功能)

先在lusrmgr.msc里启用Administrator

再更改Administrator和自己用户的主文件夹(所有用户全改了更好)

属性-配置文件-主文件夹

不要改配置文件路径!

最好改成自己真正的home目录 C:\user\username, 否则ssh密钥什么的都会因为目录权限不够安全而拒绝创建。

不用此路径,则需要自己设置目录权限

安装的时候除了base, 其它的原则上都不大需要, 因为都可以升级。全装也没坏处

有三个可选选项:SuToRootseuid必须要允许, 是否文件名区分大小写看情况

SuToRoot允许你使用susudo命令

文件名区分大小写之后,Windows下也会受影响,不喜欢就不用开

安装之后:

默认只提供Korn ShellC Shell,没有Bash(会是因为GPL么?)UNIX基本工具软件一般都有,但版本较为古老。如果需要升级或者安装新的软件,请往下看。

提供gcc,但默认的CC则是Visual C++cl.exe的一个ksh包装。使用CC之前需要安装VC。如果是VC678(2005)这三个版本,CC会自动从注册表中找到cl.exe的位置。如果用的更新一点的VC,则需要配置SUA下的PATH变量。使用上述老版VC,还可以安装VC上的SUA debug插件。

 

预编译软件包的安装

安装其它软件(分两种情况讨论)

一、仅仅自己手工安装几个需要用的软件:

安装包管理器

http://www.suacommunity.com/pkg_install.htm

下载bootstrap,在Administrator下安装(也可以su安装)

安装需要的软件

su或者直接进Administrator

pkg_update -L 包名称 #例如openssh

会自动分析依赖关系并下载所有安装包。

没有断点续传, 一断就挂, 断了只能ctrl c重来,网络环境不好的话让人想杀人

如果网络太差,可以考虑自己下载安装包,然后通过pkg_add命令来安装。

二、直接安装大而全的软件包:

http://www.suacommunity.com/bundles.aspx

一般来说PowerUsers bundles就够了,sudo等少数程序可以再自己装。

su或者Administrator安装

Xming可以用它提供的, 亦可以自己下载安装

装完之后再装sudo

pkg_update -L sudo

32还是64?

64bundles里面只有纯64位软件, 有部分软件没有提供纯64位版本, 故而没有包含在64bundles中。这些需要自己手工编译或者安装32bundles或者pkg_update来安装

 

 

任务管理,及对Win程序的兼容性

由于SUA是一个子系统,和cygwin不同。cygwin是运行于Windows子系统上的一个程序,通过dllcygwin环境中exe文件对Unix API的呼叫转化为对Win API的呼叫。所以很多地方和cygwin有较大差别。比如说,在Windows的任务管理器中,无法看到SUA下的各进程。SUA下的进程可以在SUA下通过 ps -A -X unix 来查看。

SUA兼容Win下的程序,可以直接启动它们。在cmd中也可以直接执行SUA中的二进制可执行文件(脚本文件不行)。

SUA不支持中文,不支持Windows路径(但可以通过 winpath2unix 或者chgpath来转换)

特别需要注意的是:但凡在Windows下没有特别设置过权限的文件,在SUA下权限都是777!这就意味着很容易误执行一个非可执行文件――后果是不可预料的。

openssh的安装配置

如果在前面已经安装过软件bundles,自然已经包含openssh

如果需要将Windows作为ssh server的话,则需要设置Windows防火墙或其它防火墙。允许 %SystemRoot%\system32\psxss.exe 侦听22端口的TCP连接。

安全问题:

无密码的guest用户被禁止ssh登录――也许需要设置一下就可以?我不清楚具体该怎么操作,但是不管怎么说,这么不安全的事情不要干

X转发

执行X client程序首先需要安装一个X Server,常用的是Xming(安装软件bundles的时候会问你要不要装Xming,也可以自行下载安装),也可以用其它的。

其次,SUAssh似乎有bug,在于――本地的所有hosts设置有时对ssh这个程序不生效!所以如果你默认的displaylocalhost:0.0的话,由于hosts文件不生效,无法解析localhost这个名称,将导致错误的结果。所以在执行ssh -X之前,请先export DISPLAY=127.0.0.1:0.0

SUA提供xterm,也可以在xterm里执行ssh

编码问题

SUA自己既然不能显示中文,SSH上自然也不能

但,如果远程主机使用GB2312编码,则SSH可以显示中文。

当然,用X转发的gnome terminal总是可以显示中文的,这是废话。

其它操作

注册表

lsreg命令可以查看注册表