Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows Subsystem for Linux使用全记录 #6

Open
oneone1995 opened this issue Nov 3, 2017 · 4 comments
Open

Windows Subsystem for Linux使用全记录 #6

oneone1995 opened this issue Nov 3, 2017 · 4 comments
Labels

Comments

@oneone1995
Copy link
Owner

oneone1995 commented Nov 3, 2017

Windows Subsystem for Linux使用全记录

微软大概为了和OS X竞争,在windows环境下加入了一个linux子系统,据说是目前最好用的Linux发行版(滑稽)。我个人看来的话是有学习linux或者某些业务场景需要使用但不想装虚拟机的话wsl确实是一个不错的选择,事实上也确实比虚拟机流畅。


安装

在我安装的时候需要在设置中的针对开发人员选项中勾选开发人员模式,然后在控制面板中启用或关闭Windows功能中勾选适用于Linux的Windows子系统,最后在cmd中输入bash命令等待下载完成即可。最新的windows周年更新后貌似可以直接在应用商店下载(搜索Ubuntu),我没有尝试过。


使用Cmder

当然你不用也没有关系,wsl自带了一个终端,我觉得它太丑,所以找到了cmder。可以在cmder官网下载解压后直接可以使用。cmder默认终端是cmd,因此你可以直接输入bash命令来进入wsl,如果觉得这样比较麻烦,你可以在设置中新增一个task来快速打开,就像下面这样:

cmder_setting

需要在右边输shell启动命令的地方输入

%windir%\system32\bash.exe ~ -cur_console:p:n 

这样设置完之后在cmder中点击create new console那个绿色的加号旁边的三角便能看到刚刚新增的wsl条目。如果你想将wsl在你打开cmder之后便立即启动则需要在下图的start up中设置:

start_up_setting

到这里之后你每次启动cmder便会自动进入wsl


安装zsh

这部分网上教程比较多,和其它任意linux发行版安装方式都类似。不再多说,给两个我安装时的参考链接。


服务自启动

wsl中的服务目前貌似是不会自启动的,比如你每次启动wsl都需要手动去启动redis服务。这个坑我在网上搜索之后找到一个曲线救国的方式来解决,即每次启动wsl时候调用一个启动服务的脚本,下面是一个例子:
在wsl主目录下新建一个autostart.sh来作为启动服务的脚本,例子中是一个启动redis服务的命令:

#!/bin/bash
sudo service redis-server start
bash

然后修改上文中提到的cmder启动wsl的命令在后面加上一个参数:

%windir%\system32\bash.exe ~ -cur_console:p:n  -c ~/autostart.sh

这样便能在wsl启动时候去执行主目录下的autostart.sh服务启动脚本,但是这里还有一个坑,如果仅仅这么做每次启动都会让你输入密码,这样还是会稍显麻烦,因此我们还需要将sudo的密码给去掉。像下面这么做

cd /etc
sudo vim sudoers

然后sudoers的结尾加上

# username是你的用户名,不是root,比如我是wangl,则我这里是wangl ALL=(ALL) NOPASSWD:ALL
username ALL=(ALL) NOPASSWD:ALL

我这里是去掉了所有sudo的密码,如果你觉得这样做有安全问题那么可以针对特定的命令来设置不使用密码,这个自己去找资料。

到这里应该就可以像任意linux发行版一样正常使用。像redis、mongo、nginx之类的服务都可以在wsl里面跑,我甚至有段时间直接用它作为ssh工具连接服务器。唯一不方便的地方是不能后台,一旦关闭cmder或者其它终端工具的窗口wsl便被关闭了。这里另一个曲线救国的方式是利用win10的多桌面,在另一个桌面开着cmder窗口,做一个假后台,但实际上如果强迫症没有特别严重也没什么必要。


总结

随着微软爸爸不停的更新,以及社区的活跃,wsl势必是会越来越好的,我室友刚开始使用的时候全是bug,等我使用的时候已经几乎没有什么特别严重的bug了。如果你遇到什么问题可以先查查应该已经有不少人在你之前踩过坑,知乎相关话题、Google、Baidu都能查到不少,也可以去github上提issue。


参考

(完 2017年11月2日)

@oneone1995 oneone1995 added the blog label Nov 3, 2017
@learner1999
Copy link

我密码想不起来了怎么办……

@oneone1995
Copy link
Owner Author

@learner1999

  1. 将默认登录用户改为root, cmd下输入下面的命令:
lxrun /setdefaultuser root
  1. 输入bash进入wsl,现在已经是root用户登录了。在root用户下使用passwd命令更改对应用户的密码:
passwd your_username
  1. 切回对应用户:
lxrun /setdefaultuser your_username

@iugo
Copy link

iugo commented Apr 21, 2018

@oneone1995 新版本的更新密码方式已经变了, https://docs.microsoft.com/en-us/windows/wsl/user-support#for-fall-creators-update-and-later

在 2017 年秋季之后, WSL 已经正式进驻 Microsoft Store, 更加方便安装使用, 并且同时支持多发行版.

@oneone1995
Copy link
Owner Author

@iugo hi,非常感谢指出问题。因为我的wsl不是通过商店安装的,无法按ubuntu的命令进入实验。我看了你发的文档,理解的意思是在秋季更新之后使用Microsoft Store安装的wsl需要用ubuntu那个命令来设置默认用户并修改密码。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants