Windows subsystem for Linux
昨天晚上俄罗斯世界杯开踢了,看起来足球世界还是没怎么变,梅罗仍然统治世界,沙特仍然被欧洲球队打穿,中国队仍然四年一度的缺席……但是技术的世界却是日新月异,连微软都拥抱开源了,Windows subsystem for Linux (WSL) 简直是在赤裸裸的勾引程序员扔掉Mac投奔Windows。
既有Windows的桌面和Office套件,又可以方便的使用Linux的工具链,这样的生活不要太美好!当然前期坑是少不了的,经过两年时间的改进,wsl团队解决了不少问题(比如本文将提到的文件权限问题),个人觉得已经可以入坑了。当前时间节点18年6月,版本windows 10 1803, build 17134。
WSL的介绍和安装请看下这里:
- Frequently Asked Questions
- Install the Windows Subsystem for Linux
- What’s new for the Command Line in Windows 10 version 1803
文件读写权限配置
启动WSL,windows的硬盘会自动mount到linux系统下,但是早期版本所有windows文件的owner和group都会设置为root,读写权限则是从windows系统下继承过来。经常可以看到一片绿油油的777权限的文件和文件夹列表,这显然和linux系统中的最佳实践不符的,特别是从Git上拉下来的文件的权限都被改变了,而且对这些文件使用chmod或者chown是不起作用的,简直没法忍。
在 Insider Build 17063 中,wsl加入了DrvFs功能,在WSL和Windows文件系统中充当桥梁,使WSL的文件权限可以支持更多的Metadata和更多的Mount选项。详细介绍看这里 Chmod/Chown WSL Improvements。
使用简单命令就可以用drvfs重新mount硬盘:
1 | sudo umount /mnt/c |
或者使用添加umask和fmask等参数:
1 | sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111 |
但是每次使用时手动mount也太麻烦了,这时正好用上另一个新特性 Automatically Configuring WSL。把下面automount的选项添加到/etc/wsl.conf
文件中就可以了。
1 | [automount] |
现在重启WSL的console, windows硬盘上的文件和文件夹都拥有正常权限了。但是坑还没有完,如果这时用mkdir命令创建一个空文件夹,就会发现新的文件夹还是777权限。这可能是wsl的一个bug (Issue 1801, Issue 352),console默认的umask值仍然是0000。work-around的方法是在.profile、.bashrc、.zshrc或者其他shell配置文件中重新设置一下umask。
1 | #Fix mkdir command has wrong permissions |