live with scope
序
上一篇谈到用Vagrant
管理虚拟机, 但总需要一个ssh
工具登录虚拟机. 目前, 微软官方并不提供ssh
(似乎官方的ssh
已经在开发日程上了), 你需要安装. 你或者安装一些工具, 会自带ssh
程序, 如git for Windows
, 只是程序并不在系统path
中, 需要自己添加以方便命令行使用. 或者你安装ssh
客户端, 如putty
, xshell
. 其中推荐xshell
, 功能强大, 提供密钥的生成和管理, 会话创建和管理. 又或者安装Cygwin
.
这里假设你只是通过ssh
到虚拟机来开发Linux
程序, 在xshell
和Cygwin
之间, 我个人推荐Cygwin
. 两个原因: 1, xshell
未ssh
前提供的原生shell
是Windows
的虚拟DOS
, 你可能会在登录前后变换shell
命令. 2, xshell
在有主题配色时, 登录虚拟机并使用tmux
命令时, 会在面板间串色. A
面板使用Vim
, B
面板使用Bash
, 色彩总是互相影响. 这个问题非常恼火, 但多方查询没找到解决方法. 但Cygwin
也有不满意的地方, 其使用的mintty
功能太羸弱, 连基本的多标签都不支持.
Cygwin
Cygwin
提供了一个软件层, 用于Linux
系统API
到Windows
系统API
的翻译, 能提供最接近原生Linux
的体验. 不过, 因为增加了一层翻译, 也导致当安装软件过多时, 运行较大软件时, 会相当慢. 虽然, 你可以通过Cygwin
安装KDE
或Gnome
桌面, X11
框架, 但强烈不推荐.
在官网下载setup-x86_64.exe
, 运行, 在下载点选择时推荐163的, 速度很快. 在程序包选择时, 建议除了默认外, 只安装极少量你必须的包, 毕竟你主要的开发环境在虚拟机上. 提供ssh
工具和vim
编辑器是默认安装的.
Cygwin
本身提供gcc
的程序包, 但如果你一定需要的话, 会发现它有三个版本, gcc
, cygwin-gcc
, mingw-gcc
. 它们有一点区别, gcc
编译的程序只能在Cygwin
环境下运行, mingw-gcc
编译的程序可以在Windows
环境下运行, cygwin-gcc
编译的程序需要cygwin.dll
库才能在Windows
下运行(印象中是这么个区别, 建议别趟这个坑).
安装好Cygwin
后, 如上一篇所述, cd
到项目目录, vagrant up
开启虚拟机, vagrant ssh
登录虚拟机. Ctrl-D
退出虚拟机, vagrant halt
关闭虚拟机.
apt-cyg
一个Cygwin
的包管理工具,可使用命令行安装需要的程序包。工具主页是https://github.com/transcode-open/apt-cyg
.
默认情况下, 当你想安装新的程序包, 运行之前下载的setup-x86_64.exe
, 在包选择界面选择, 再下载安装. 非常非常难以理解, 一个模拟Linux
环境的工具, 安装程序时却不能在自身环境中完成. 于是, 有这么个工具.
就使用体验来看, 从各个方面都不要期望它和apt-get
同等级好用。它安装时自动安装依赖包,但删除包时则没有处理无依赖的包。
安装
lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
常用命令:
安装包:
apt-cyg install pkgname
移除包:
apt-cyg remove pkgname
更新包缓存:
apt-cyg update
下载包:
apt-cyg download pkgname
显示包信息:
apt-cyg show pkgname
生产包依赖的树:
apt-cyg depends pkgname
生成依赖包的树:
apt-cyg rdepends pkgname
列出本地包:
apt-cyg list [regexp]
列出所有包:
apt-cyg listall [regexp]
显示指定类的所有包:
apt-cyg category [Base|Devel|Ruby...]
搜索包含指定文件的本地包:
apt-cyg search filepath
搜索包含指定文件的所有包:
apt-cyg searchall filepath
指定源镜像:
apt-cyg mirror [url | http://mirrors.163.com/cygwin/]
指定包下载路径:
apt-cyg cache [dirpath]
制作portable版Cygwin
如果你有多台机器, 每次都要重复安装一遍Cygwin
, 特别是每次都要选择相同的程序包, 是比较痛苦的. 因此, 确保安装好后, 包括你需要的各种软件, 将其制作成便携版, 可随处解压使用才是解决之道.
本地机器:
压缩打包安装目录
导出注册表:
reg export HKLM\SOFTWARE\Cygwin abc.reg
另一台机器:
解压缩安装目录
修改注册表相关根目录
导入注册表:
reg import abc.reg
卸载Cygwin
如何完整删除电脑上的Cygwin
, 是的, 总有这种需要.
删除下载包目录
停止服务:
cygrunsrv -L, cygrunsrv -S, cygrunsrv -R
删除安装目录
删除注册表:
reg delete HKLM\SOFTWARE\Cygwin /f
,reg delete HKCU\SOFTWARE\Cygwin /f
删除环境变量:
PATH
,CYGWIN
特权命令
Windows
的UAC
权限控制在某些时候还是比较烦人的. 你可能需要运行一个特权命令, 而在图标上右击选择以管理员身份运行一个特权版的Cygwin
总感觉很Low
, 且不同的工作目录要来回切换也麻烦. 但cygwin
没有root
用户也没有sudo
这样的提权工具, 多方查找后, 这里可以近似实现一个.
新建脚本sudo,并添加到PATH路径中:
#!/usr/bin/bash
cygstart --action=runas "$@"
如果需要运行特权命令,会弹出一个新的特权cygwin
窗口,运行命令后退出. 虽然, 感觉也不怎么样好.