美文网首页windows应用技巧工具Run noob
Windows10内置Linux子系统初体验

Windows10内置Linux子系统初体验

作者: anyesu | 来源:发表于2017-03-06 02:41 被阅读131822次
WSL

前言


前段时间,机子上的win10又偷偷摸摸升级到了一周年正式版,比较无奈。不过之前听闻这个版本已经支持内置的linux子系统,于是就怀着好奇心试玩了一把。虽然期间遇到了很多问题,但总体来说这个子系统体验还不错,在这里就分享一些关键步骤和遇到的问题,剩下的大家自己折腾吧。。

启用linux子系统


设置(16215版之后不再需要开发人员模式) Windows功能 安装ing...
  1. 系统升级到一周年正式版及以上(1607)

  2. 依次在 设置 - 更新与安全 - 针对开发人员 选项中,启用"开发人员模式"

  3. 在资源管理器中打开 控制面板\所有控制面板项\程序和功能 , 打开 启用或关闭 Windows功能 , 勾选 适用于Linux的Windows子系统(Beta)

  4. 重启电脑

  5. 命令行运行 lxrun /install /y 开始安装
    安装速度取决于网络情况,下载的文件在 %localappdata%\lxss 目录下 lxss.tar.gz (181M),解压后大概500M, rootfs 目录即为子系统根目录。

  6. 命令行运行 bash 进入Ubuntu
    默认使用的 root 帐号登录,通过指令 passwd 设置密码。

  • 注:本文脚本均在root帐号下操作,因此建议使用root帐号
  1. 毕竟爱折腾,难免会把子系统环境(lxss目录)玩坏掉,因此干正事前最好先备份下以便快速还原。注意,不要直接右键复制或者打包,可能会导致文件权限丢失的。
    xcopy %localappdata%\lxss %localappdata%\lxss.bak /E
  2. 当然,如果你比较任性也可以不执行上一步的备份操作,通过命令行运行 lxrun /uninstall /full 轻松卸载子系统,重复上面的步骤即可重装,不过要注意下载速度时好时坏哦。

通过上面的步骤,已经启用了win10自带的linux子系统(WSL),感觉逼格提升了不少。当然,怎么能满足于此呢,接下来就要做一些环境的配置和进一步的挖掘。

更换数据源(参考)


Ubuntu下我们可以通过 apt-get 命令 很方便的安装/卸载软件,由于默认的软件包仓库是位于国外的,安装软件的时候就可能遇到各种网络问题或者下载到的一些资源不完整,因此就需要切换数据源为国内的镜像站点来改善。

# 1.备份原来的数据源配置文件
cp /etc/apt/sources.list /etc/apt/sources.list_backup
# 2.编辑数据源配置文件
vi /etc/apt/sources.list

在这里我使用的是阿里云的数据源:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
# 3.更新配置
apt-get update

注:14986版之后更新了内核,第三方的镜像站可能找不到软件包资源,需要切换回官方的源。经测试中科大的源可用

deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

与 Windows 通讯


目前子系统与 Windows 之间通过以下两种方式进行通讯

  1. 通过 tcp 协议进行通讯(简单点说就是用网络,端口都是通的)
  2. 通过 /mnt/【盘符】/目录 的方式访问Windows目录

试过在Windows的资源管理器中直接对子系统环境目录下的文件所做的修改不能被子系统所识别,因此需要在bash下进行操作。

安装 zsh


目前常用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』,但是由于配置过于复杂,所以初期无人问津,很多人跑过来看看 zsh 的配置指南,什么都不说转身就走了。直到有一天,国外有个穷极无聊的程序员开发出了一个能够让你快速上手的zsh项目,叫做「oh my zsh」,Github 网址是:https://github.com/robbyrussell/oh-my-zsh。这玩意就像「X天叫你学会 C++」系列,可以让你神功速成,而且是真的。

zsh就是一款强大的虚拟终端,网上也都推荐使用 oh my zsh 来管理配置 , 不过对我来说还是不够傻瓜。于是,参考一篇文章使用 zsh 的包管理器:antigen 来管理所有功能,文章中还给了现成的配置。

  • 安装 zsh
sudo apt-get -y install zsh
  • 设置终端的 shell 环境默认为 zsh,输入以下命令(需要重启)
# 加 sudo 是修改 root 帐号的默认 shell
chsh -s `which zsh`
  • 如果上面命令无效,修改 ~/.bashrc 在开头输入:
if [ -t 1 ]; then
    exec zsh
fi
  • 安装 antigen
curl -L git.io/antigen > antigen.zsh

# 修改配置 ~/.zshrc(如果切换帐号后无法使用 zsh 则把该用户的配置文件再配一遍)
curl -L https://raw.githubusercontent.com/skywind3000/vim/master/etc/zshrc.zsh > ~/.zshrc

# 修改主题, 参考:https://github.com/robbyrussell/oh-my-zsh/wiki/themes
# 如果需要主题一直生效需要添加到 ~/.zshrc 中
antigen theme ys

# 配置修改完重新执行 zsh
  • 如果出现警告:zsh compinit: insecure directories, run compaudit for list.
chmod -R 755 ~/.antigen

安装 autojump (用法参考)


autojump 是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不受当前所在目录的限制。意思就是可以让你更快地切换目录,而不用频繁地使用 cd/tab 等命令。

  • 安装
sudo apt-get install autojump
  • zsh 下运行报错
$ autojump
Please source the correct autojump file in your shell's
startup file. For more information, please reinstall autojump
and read the post installation instructions.

参照文章 Mac终端增强技能终极 Shell 找到解决办法:

~/.zshrc 中安装插件 brew install autojump 再重新进入 zsh

由于本文使用 antigen 作为 zsh 的包管理器,所以实际操作是在 ~/.zshrc 中添加 antigen bundle autojump

使用 bash 客户端软件 cmder (参考)


Windows 自带的命令提示符 cmd 并不是很好用(文本选中、复制粘贴等等操作),在这里使用 cmder 作为替代品,体验效果很好。去 cmder 官网下载 mini版(完整版附带了模拟的bash环境,由于已经安装 linux 子系统,就不再需要了)的解压即可使用。

  • 设置启动 cmder 时直接运行 bash:
1. 进入 "Settings > Startup",
2. 选择 "Startup options > Command line",输入 "bash -cur_console:p"
启动直接运行bash
  • 通过软件底部的加号按钮新开标签页并进入 bash
1. 进入 "Settings > Startup > Tasks",
2. 选择 "bash::bash",将指令修改为 'cmd /c "bash" -cur_console:p -new_console:d:%USERPROFILE%'
新标签页
  • 设置配色主题
1. 进入 "Settings > Features > Colors",
2. "Schemes" 项下拉选择 "<ubuntu>"

小贴士:将 cmder 目录添加到环境变量 path 中或者复制快捷方式到 "C:\Windows\System32" 目录下,就可通过 win + R 快捷键快速打开了

运行图形界面程序(参考)


什么!linux 不是就这么个黑白界面的窗口吗?是的,你没看错,就是图形界面,这里用到的是 Xserver 这个东东,至于原理什么的各位自行度娘吧。

Xming
  1. 安装Xming 下载地址

  2. 安装完直接打开 Xming 即可

  3. 安装一个 firefox 测试
    apt-get install firefox

  4. 运行(在程序指令前加上"DISPLAY=:0 ")
    DISPLAY=:0 firefox

  5. 简化配置
    每次运行程序都要输入 DISPLAY=:0 挺累的,执行下列指令后重启bash即可省去这个步骤
    echo "export DISPLAY=:0.0" >> ~/.bashrc

PS:很多小伙伴反映说打开Xming没反应,这是正常现象 ( 详见评论区33楼 )。Xming是一个在后台运行的服务,在任务栏显示一个 X 的小图标即表示启动成功,无需其他操作了。要想看到画面,需要在wsl或其他远程Linux机器上使用 DISPLAY=:0 命令启动带图形界面的程序。在这里简单分析下我理解的原理:1. Xming 启动 Xserver服务用于监听;2. wsl启动程序后把界面数据发送给 Xserver;3. Xserver 接收到数据进行绘制,于是在win下就看到了图形界面。还有困惑的话请移步至下方的 vnc 版块,比Xming效果要好,类似与 win 下 远程桌面连接 的效果。

Sublime Text 3 安装


既然都可以运行图形界面了,编辑器也要换成可视化的,毕竟vim还是不太适合我。

cd /
# 下载
wget https://download.sublimetext.com/sublime-text_build-3126_amd64.deb
# 安装
dpkg -i sublime-text_build-3126_amd64.deb
# 运行
subl
什么鬼,报错了!

应该是少了什么依赖包,嗯,安装下搞定。

apt-get -y install libgtk2.0-0

启动 xfce 桌面环境(参考)


图形界面程序都能运行了,不试试ubuntu的桌面环境怎么能甘心,于是又是噼里啪啦一顿搜索。一开始参照这篇国外的教程折腾了许久,每次运行总是报一个composite的插件没加载进来,各种软件包安装一通还是不行,后来实在失去耐心就放弃了这条路。后来看到好像有人成功运行了xfce,但没有具体步骤,只能自己一顿摸索,结果还真误打误撞成功了。

# 1.安装xfce4
apt-get install xfce4
# 2.安装xubuntu桌面及附带应用
apt-get install xubuntu-desktop
# 3.启动
xfce4-session
启动报错了

解决办法:(参考

sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

再次尝试打开,现在可以看到Xming打开了三个窗口,分别是桌面、任务栏、菜单栏。逼格是提升了不少,不过确实很卡。

xfce4

使用 VNC 进行远程桌面控制(安装方法)


感谢 @lizr_4bf0 的提示,使用 VNC 来代替 Xming 以解决 Xming 下很卡的问题。

1. wsl 下安装 vnc4server
apt-get install vnc4server
2. wsl 下启动 vncserver ( 安装后首次启动需要设置访问密码 )
vncserver
3. 在 win10 的 VNC Viewer 中访问 127.0.0.1:1

注:如果 VNC Viewer 连接报错请参考

4. VNC Viewer 中只显示一个终端窗口的问题
# 修改xstartup, 将 x-window-manager 替换为刚才安装的 xfce4-session
sed -i 's$x-window-manager$xfce4-session$' ~/.vnc/xstartup
# 重启 vncserver
vncserver -kill :1
vncserver :1
5. 分辨率设置
# 先关闭
vncserver -kill :1
# 再启动并设置分辨率(注意是小写的x)
vncserver -geometry 1366x768 :1

在子系统上运行nginx


因工作项目中用到了 ssi 技术,而已经windows上已经编译好的 nginx 是不支持相对路径引用的(需要修改源码重新编译),只能委屈求全用着 Apache 。不过既然现在都能跑linux了,那就试试在linux上运行 nginx,然后在windows上进行调用。

1. 通过apt-get方式安装
sudo apt-get install nginx
# 启动报错了:
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
# 80端口实际没被占用,那应该就是ipv6的问题,将其禁用: 
vim /etc/nginx/sites-available/default
# 找到default_server ipv6only=on;注释掉
# 再次启动没报错,不过浏览器无法访问,80端口也没被使用,查看error.log
cat /var/log/nginx/error.log
# 看到错误信息:
ioctl(FIOASYNC) failed while spawning "worker process" (22: Invalid argument)
# 解决方法:禁用master进程模式
sed -i '1 a\master_process off;' /etc/nginx/nginx.conf

再次启动,终于没报错了,Windows中打开浏览器访问127.0.0.1,还真的实验成功了,不过nginx版本有点老,是1.4.6的。

2. 通过编译源码的方式安装
# 1.安装依赖包
apt-get -y install build-essential autoconf libtool libxml2-dev openssl libcurl4-openssl-dev libbz2-dev libjpeg-dev libpng12-dev libfreetype6-dev libldap2-dev libmcrypt-dev libmysqlclient-dev libxslt1-dev libxt-dev libpcre3-dev libreadline-dev
# 2.下载源码
wget http://tengine.taobao.org/download/tengine-2.1.1.tar.gz
# 3.解压
tar -zxvf tengine-2.1.1.tar.gz
# 4.进入目录
cd tengine-2.1.1
# 修改源码...
# 5.配置
./configure --prefix=/usr/anyesu/nginx
# 6.编译&安装
make && make install
# 7.修改配置文件
sed -i '1 a\master_process off;' /usr/anyesu/nginx/conf/nginx.conf
# 8.启动
/usr/anyesu/sbin/nginx

上面的步骤,我试了两台电脑,其中一台报错:

nginx: [emerg] invalid port in resolver "fec0:0:0:ffff::1" in /usr/anyesu/nginx/conf/nginx.conf:123

/etc/resolv.conf

出现的 fec0:0:0:ffff::1 是个什么鬼,度娘了一番,貌似是dsn,打开dns配置文件 /etc/resolv.conf 果然发现了这东西,应该是Windows下只分配了1个dns,所以linux就给了这么两个默认值的吧。将它们注释掉,重新启动nginx,成功运行 Tengine/2.1.1

注意,每次重启bash都会重置dns配置的

启用ssh(参考)


本地可以通过命令行打开bash,如果要远程访问(如同访问线上服务器一样),那么就需要启用ssh。

# 1.安装ssh(一般不需要这步)
apt-get install openssh-server
# 2.修改配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vim /etc/ssh/sshd_config
#=======(修改以下选项内容)=========#
# Port 23(22端口已被占用)        #
# (取消注释)ListenAddress 0.0.0.0 #
# UsePrivilegeSeparation no      #
# PermitRootLogin yes            #
# (注释)StrictModes yes         #
# PasswordAuthentication yes     #
#================================#
# 3.启动ssh
service ssh start
# 4.如果提示“sshd error: could not load host key”,则用下面的命令重新生成
rm /etc/ssh/ssh*key
dpkg-reconfigure openssh-server

使用终端工具访问,这里我用的是 WinSCP + PuTTY

WinSCP PuTTY

WSL开机启动


任务管理器

打开任务管理器我们可以发现,在运行子系统的时候,后台其实有一个bash的进程在运行,我们每开一个命令行窗口就会多一个 bash.exe,如果我们把所有的 bash.exe 都关闭则这个bash进程就关闭了(相当于是子系统关机了),跟着之前在子系统中打开的程序如nginx、sshd等也随之关闭了。为了让linux程序能够在后台继续运行,这里通过 vbs 脚本在后台打开一个 bash.exe 来保证bash进程一直开着。当然,还可以通过Windows的计划任务实现开机启动WSL并打开其中的程序。

# 1.新建开机启动脚本
vim /usr/anyesu/boot.sh
# 2.编辑
#================================================================
# #!/bin/sh
# /usr/anyesu/nginx/sbin/nginx
# service ssh start
# $SHELL  #这句很重要,挂起当前脚本进程,进而维持base.exe一直打开
#================================================================
# 3.设置权限
chmod 777 /usr/anyesu/boot.sh
# 4.创建vbs脚本(D:\linux\wsl.vbs)
#==========================================
# Set ws = CreateObject("Wscript.Shell") 
# ws.run "bash /usr/anyesu/boot.sh",vbhide
#==========================================
# 5.创建计划任务
计划任务 创建基本任务 设置任务名称 设置任务触发条件——用户登录 设置任务操作——启动 设置任务操作——运行vbs脚本 运行计划任务

关于Linux发行版本


# 打开cmd,进入bash
bash
cd /
# 下载openSUSE
wget -O openSUSE-42.2.tar.xz https://github.com/openSUSE/docker-containers-build/blob/openSUSE-42.2/docker/openSUSE-42.2.tar.xz?raw=true
# 解压
xz -d /openSUSE-42.2.tar.xz
mkdir rootfs
tar -C rootfs -xvf openSUSE-42.2.tar
# 退出bash,返回cmd
exit
# 进入子系统所在路径
cd %localappdata%\lxss
# 备份ubuntu用户空间(看下任务管理器中bash是不是彻底关闭了)
rename rootfs rootfs.ubuntu
# 使用openSUSE用户空间替换默认用户空间
move rootfs.ubuntu\rootfs rootfs
# 设置默认登录用户
lxrun /setdefaultuser root
# 重新进入bash
bash
#查看发行版本
cat /etc/issue

官方资料


2017-11-21追加


最近系统又被强更到了1709(16299.64),发现几点变化做个记录:

  1. ping命令已经可以正常使用了
  2. nginx的master模式也能正常使用不会报错了
  3. 发现nginx、ssh之类的,能正常启动不报错但怎么也无法绑定端口。后来查了github上的 issues 发现是wegame(原tgp)的锅,原因是使用了一个win10上已失效的特性,wegame的开发表示会尽快修复。临时解决办法:删除文件 %systemroot%\system32\drivers\QMTgpNetflow764.sys 后重启bash,如无法删除先关闭应用或卸载再重装wegame(最好重启电脑),重装后先删除 QMTgpNetflow764.sys 再运行wegame。
  4. 内核升级为 4.4.0-43-Microsoft 了, 带上了微软的标记,推测是这个原因导致很多软件包无法正常安装了。后来发现应该是阿里云的数据源未同步的原因,加上 ubuntu 自带的源 ( 即文中最初备份的内容 ) 即可解决。

2017-11-30追加


应用商店

目前 ( 1709 版本 16299.64 ) 已经可以在商店中搜索安装多个不同版本的子系统了,根路径为 %localappdata%\Packages\【根据子系统名找到对应的应用文件夹】\LocalState\rootfs 。同时还新增了两个命令行工具: wsl.exewslconfig.exe

其中 wsl.exe 应该等价于 bash.exe , 两者之间的细微差别暂时还没发现。至于 wslconfig.exe 的作用主要为(参考):

1. 查看安装所有已安装的子系统: wslconfig /l

适用于 Linux 的 Windows 子系统:
Ubuntu (默认)
Legacy

其中 Ubuntu 是商店中下载的版本,Legacy 是按老方法安装的默认wsl。

2. 切换bash.exe默认使用的子系统: wslconfig /s <DistributionName>
其中 <DistributionName> 替换为 UbuntuLegacy , 或者其他已安装的子系统。

3. 卸载已安装的子系统: wslconfig /u <DistributionName>
同上替换 <DistributionName> 。经测试发现,此 "卸载" 并不会卸载商店中安装的 Ubuntu 应用, 即再次执行该应用又会重新安装了。

写在最后


WSL折腾完有一段时间了,只是一直没时间记录下来(也许是懒吧)。在此之前,由于工作需要,偶尔兼职运维的角色,折腾下服务器什么的,就很业余的学习了一些linux指令。以前装过vmware,体验不是很好就不想装了,所以写shell脚本、编译源码什么的都是在公司测试服务器上练习的,现在有了WSL之后就可以在自己本地练习了(肆意折腾,哈哈哈)。使用方面,体验和使用终端工具连接远程服务器是差不多的;性能方面,子系统(bash进程)本身是不占多少内存的,启动程序几乎相当于启动Windows程序了,不显示图形界面内存都占用比较小,肯定优于"印象中的虚拟机"。总的来说,WSL还是比较值得推荐去折腾的,也比较适合新手学习linux,虽然我也只是个小白⊙﹏⊙


转载请注明出处:http://www.jianshu.com/p/bc38ed12da1d

相关文章

网友评论

  • Garfield猫:很棒!
  • 66621539007c:能按装到其他盘吗
    anyesu:@Soul青悠 据我了解的应该是不能指定安装目录的,默认安装在%localappdata%目录下(不管是命令方式安装还是商店方式安装)。localappdata这个环境变量对应的路径是可以通过注册表修改的,谨慎操作。像我的话,装系统的时候通过 mklink /j 把整个Users目录软连接到其他盘,这也是一种方式,不过可能会带来一些莫名其妙的错误所以不建议你这么操作(试过直接针对lxss目录进行软连接,不过失败了,可能是目录权限需要特殊设置)。说实话,安装到其他盘的意义并不大,正确的做法应该是不要把第三方软件安装到系统盘,把空间留给这些不得不装在系统盘的软件(比如wsl,vs)
  • 大头bb:请教怎么挂在usb设备,比如U盘或者串口,谢谢
    anyesu:@大头bb u盘的话参考这篇文章:http://blog.sciencenet.cn/blog-2410131-1094877.html 。其他设备的话我也没试过,可以自己研究下。
  • 子寤:真棒(/≧ω\)
  • 子寤:还要注释前面的几行才可以。不过怎么修改分辨率?看起来很糊的样子
    https://pasteboard.co/HBfnK9J.png
    anyesu:@子寤 文中有提,仔细看下
  • 子寤:请问为什么我没有看到桌面?只有灰色的窗口
    anyesu:@子寤 看下 ~/.vnc/xstartup 这个文件,默认的内容应该是:
    #!/bin/sh

    # Uncomment the following two lines for normal desktop:
    # unset SESSION_MANAGER
    # exec /etc/X11/xinit/xinitrc

    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    vncconfig -iconic &
    x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    x-window-manager &

    去掉最后两行命令就变成你截图中的样子了
    子寤:@anyesu https://send.firefox.com/download/906c70e2d6/#nQAkE07qGHtqn5wOLYBaDw
    这个是截图
    anyesu:@子寤 能说详细点吗,你做了哪些操作
  • 542626af1546:使用vnc接收emacs的图形界面时,emacs一新建文件就会出现以下警告:
    failed to commit changes to dconf: Error spawning command line “dbus-launch --autolaunch= --binary-syntax --close-stde rr”: Child process exited with code 1
    楼主对这个问题有头绪吗?用貌似能用,但感觉不爽...我小白,就是冲着想学emacs才想用wsl的。
    anyesu:@byrChen 同小白。。我采用下面的命令安装的,没有遇到你的问题
    sudo apt-add-repository -y ppa:adrozdoff/emacs
    sudo apt update
    sudo apt install emacs25

    不过一开始有警告 “GConf-WARNING **: Client failed to connect to the D-BUS daemon: /usr/bin/dbus-launch terminated abnormally without any error message” ,把dbus卸载掉重新安装就没再出现了。所以可以重装dbus试试看(卸载的时候其他会卸载依赖它的软件,要看清楚了,注意备份)
  • bohaoist:comder的task用下面命令可以直接打开zsh:
    %windir%\system32\bash.exe ~ -c "zsh -l" -cur_console:p
    vim方向键无法使用,出现couldn't find definition时,需要打开show status bar,然后在status bar上单击右键,选择terminal modes,然后在新增的状态X上单击左键,选择AppsKeys.
  • zephryu:我比较好奇它的资源占用情况..会不会非常高?
    anyesu:@zephryu 这取决于你用的软件吧。wsl没多少额外开销,我用过的人轻量级软件都是正常的
  • 16d1a87f32a2:不知道为什么我用 cmder 运行 wsl,vim 不能使用方向键,会提示 E388: couldn't find definition 的错误,试了好多 command 还是没能解决,和 cmder 版本有关吗?还是其他的问题。
    anyesu:@xyxc0673 你当时没按文中的方式配置,而是先进入cmd在进入bash的吧?文中的是1.3.2版本的这种方式是没问题的,而最新的1.3.6版本确实有问题,需要配合Alt键使用方向键。不过1.3.6已经默认集成了WSL的task,通过新标签页的方式进入bash就可以了。
    16d1a87f32a2:好像真的和 cmder 的版本有关,我在官网下载的最新的 mini 或 full 版都不行,然后下载了你的文章中的版本就可以了,不知道是什么问题。
  • 水煮香蕉:2018年6月看到了这篇文章,我是1803版本,已经不需要开启开发者模式了,启动功能,然后重启下就可以安装了。看文章学到了很多,非常感谢。
  • 小和尚88:请问怎么挂载串口设备?
    anyesu:@小和尚88 这个没试过,不清楚诶:disappointed_relieved:
  • anyesu:2018-05-12 更新:新增 autojump 的安装
  • c01ce07cdbf6:博主可以看下zsh下的”autojump“这个插件么,我在WSL下面折腾半天都没成功,总是有各种问题。
    anyesu:@少年游记 试着安装了,用 j 命令也可以跳转,对于这个插件也不熟悉,所以使用上没遇到什么问题,参考文中 “安装 autojump” 小节内容。
  • 00b594660f21:太厉害啦
  • soro:用 wsl 大概一年,因为 TGP 的锅搞了好久,才发现 Github 的 Issue 。。。目前基本所有工具都跑在 wsl 里面,包括 redis、mysql、npm 等等等,但是有一点蓝瘦的是 Tomcat 不能直接部署到里面,纠结很久还是没找到原因。。。
    anyesu:@soro tomcat以前跑过但还没试过部署。。新项目可以用spring boot,内置tomcat。我更期待的是wsl对docker的支持
  • anyesu:2018-03-30 更新:新增 zsh 的安装
  • 11206d43ed0e:求教下楼主,卸载老师出问题,是什么原因啊
    >lxrun /uninstall /full
    警告: lxrun.exe 仅用于配置适用于 Linux 的 Windows 子系统的旧分发版。
    可以通过访问 Windows 应用商店来安装分发版:
    https://aka.ms/wslstore

    这将在 Windows 中卸载 Ubuntu。
    这将删除 Ubuntu 环境以及任何修改、新应用程序和用户数据。
    键入“y”继续: y
    正在卸载...
    适用于 Linux 的 Windows 子系统有安装或卸载操作未完成。
  • f40ff953dad8:楼主你好,我在子系统中正在进行计算,但是被不知道情况的小伙伴中断了,请问清楚如何让中断的程序继续运行吗?
    anyesu:@sunshinenone 额,不是很清楚你在做什么。不过一般情况下,中断了难道不应该从头跑吗?
  • 不爬爬:您好,我想问一下我打开了xming只是一个灰色界面,无法进行下一步安装Firefox操作。请问我应该怎么解决问题呢?
    anyesu:@不爬爬 就是有图形界面的程序。按文中顺序安装 Xming 和 firefox ,打开 Xming 然后 DISPLAY=:0 firefox 运行。还不行就照着这块内容子标题对应的参考链接装个 x11-apps 试试。
    不爬爬:@anyesu 是怎么带上ui程序呢?我是没有带上ui程序
    anyesu:@不爬爬 应该是正常的,运行带UI的程序就能在xming上显示画面了。你是Firefox装不上吗?
  • d3670f1d8eb0:关于xming慢这个,其实是因为xming要覆盖explorer,有些冲突,可以用vncserver(wsl下)+vncviewer(win下)
    剑皇轩辕娜:但是vnc下用Qt 笔记本自带的键盘全是乱码,请问有没有什么办法可以解决?
    anyesu:@lizr_4bf0 多谢提示,经实践确实流畅多了。VNC 相关内容已追加到文中了。
  • 吃人的锅:按照教程设置了阿里镜像后, apt-install 什么东西都下载不了,文件恢复就又可以了
  • bcb122637f78:怎么远程访问啊,端口转发了,也访问不了
    bcb122637f78:找到了,如果需要远程访问,还需要再母系统(win10)防火墙中设置允许入站的端口。
  • iRunning:小白除了刚开始启用子系统外剩下的都没看懂,啥时候有时间了希望再补充补充,比如怎么输命令之类的
  • 4204c9a75e75:楼主您好,菜鸟现在遇到一个问题。安装好的子系统是自动挂载了windows的各个盘。因此我通过子系统在一个盘里面安装软件也成功了。但是在运行软件时候,说软件的文件夹权限太大Files in the Gaussian directory are world accessible this must be fixed。直接在子系统里面chmod修改权限没有用。在win10修改权限后,在子系统里面就被拒绝,在win10放开权限,在子系统又出现这样的问题。。该怎么办呢?
    4204c9a75e75:@anyesu 之前为了节省C盘空间,既然系统能挂载DEF盘,我就把软件放在了别的盘,今天将软件直接安装到子系统用户的home目录就好了。另外一个软件也是,有一步编译总是失败,最后也在home下安好了。这些专业软件的问题就是占空间太大,windows和子系统都在C盘。。
    anyesu:@小杨老郭 gaussian 09貌似是很专业的软件吧,我也没用过。我找了下没什么下载源,就安装了一个破解版的,解压后win10和wsl下都能直接用,并没有遇到你说的问题。给你找了个链接,你试试看吧 http://blog.sina.com.cn/s/blog_648e5d900100r8ic.html
  • ede3c279dfe3:楼主,我想问下能不能在子系统中玩docker?安装完了之后启动不了docker 服务
    anyesu:@天嘿嘿_ac7c 文章中提到了两个版本的win10,其中老的1607版能安装,客户端能使用,服务端无法启动(貌似是UNIX Socket无法绑定的问题)。新版的1709内核升级为 4.4.0-43-Microsoft 了,很多软件包都安装不了,所以比较难安装,就算安装上了也会因为底层的一些网络配置问题导致无法启动。至于更新的版本就没试过了。
  • 26da9e1cac4f:\lxss\rootfs\lib\xtables\libip6t_hl.so
    \lxss\rootfs\lib\xtables\libip6t_HL.so
    你好,17年12月刚安装最新版,在上述目录有区分大小的同名文件,xcopy备份lxss文件夹的时候提示是否覆盖,这个该怎么处理呀???
    anyesu:@抖抖兄 Linux下文件名区分大小写而Windows下不区分,目前暂时没有什么解决办法。就全覆盖好了,一般使用应该没什么问题
  • f338d305ed6e:可以用其他设备远程ssh这个linux子系统吗
    bcb122637f78:如果需要远程访问,还需要再母系统(win10)防火墙中设置允许入站的端口。
    anyesu:@日子_e454 可以的,防火墙要开放端口
  • Luluffy:请问阁下的bash默认用户是root吗?如果坚持使用普通登录用户,又不想设置sudo免密,请问还有没有别的办法自启ssh
    anyesu:@Luluffy 我安装的时候没设置用户,就是默认的root,可在cmd下执行 lxrun /setdefaultuser test 指定默认登录用户。
    非root帐号要自启ssh可以修改启动脚本(文中的/usr/anyesu/boot.sh)为以下内容,其中123456是用户密码
    echo '123456' | sudo -S service ssh start
    $SHELL
  • b58c4acb28bf:请问大哥,子系统玩坏了,怎么使用备份的文件还原?我按照你说的,做了备份,但是不会还原~
    anyesu:@Evan_a806 关闭bash进程后删除子系统环境所在目录lxss,再还原备份。跑下面两条命令就好了:
    rd /s /q %localappdata%\lxss
    xcopy %localappdata%\lxss.bak %localappdata%\lxss /E
  • 飒飒sasa:安装openssh-server碰到了如下的问题:请问您有什么解决办法吗?
    dpkg: 处理软件包 libcanberra-gtk3-module:amd64 (--configure)时出错:
    依赖关系问题 - 仍未被配置
    在处理时有错误发生:
    libtdb1:amd64
    libcanberra0:amd64
    libcanberra-gtk3-0:amd64
    notification-daemon
    pulseaudio
    pulseaudio-module-x11
    libcanberra-gtk3-module:amd64
    E: Sub-process /usr/bin/dpkg returned an error code (1)
    anyesu:@lucyyang1991 执行哪句报错?能贴完整的上下文吗
  • 飒飒sasa:lucyyang@Lucyyang-PC:~/workplace$ dpkg -i sublime-text_build-3126_amd64.deb
    dpkg:错误:该操作需要超级用户权限
    lucyyang@Lucyyang-PC:~/workplace$ sudo dpkg-configure -a
    [sudo] password for lucyyang:
    sudo:dpkg-configure: command not found
    我报了这样的错,请问有没有什么解决办法呢?
    飒飒sasa: @anyesu 谢谢~我再试试~
    anyesu:1.没权限就用 sudo dpkg -i sublime-text_build-3126_amd64.deb
    2.后面那句应该是 sudo dpkg --configure -a 中间有空格的
  • 黑痕:但是为什么 ifconfig 显示没有IP
    anyesu:旧版很多功能是没有的,最新的预览版应该支持了。可以看下更新日志:https://msdn.microsoft.com/en-us/commandline/wsl/release_notes#build-14965
  • 黑痕:这逼格可以。
  • ac5f8fd0efeb:我Nginx能够成功启动,但是Windows上浏览器打开站点不能访问:127.0.0.1:8000 ERR_CONNECTION_REFUSED,我Nginx默认端口号用的:8000,不知道怎么处理,求教
  • 74241bb7a52e:你好,我在bash里面成功的安装运行了nginx 可是在windows上并不能正常访问 你有碰到过这个情况么?
    anyesu:@Gloomy_null 你是怎么启动的,怎么还有master进程?禁用master进程看看,配置文件中加入 master_process off;
    74241bb7a52e:@anyesu 查看错误日志如下:

    root@Gloomy-MI-PC:/var/log/nginx# ls
    access.log error.log
    root@Gloomy-MI-PC:/var/log/nginx# pwd
    /var/log/nginx
    root@Gloomy-MI-PC:/var/log/nginx# cat error.log
    root@Gloomy-MI-PC:/var/log/nginx# ps aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 10436 584 ? Ss 10:17 0:00 /init
    root 2 0.2 0.0 24492 2248 tty1 Ss 10:17 0:02 /bin/bash
    root 20 0.0 0.0 24512 2224 tty2 Ss 10:20 0:00 /bin/bash
    root 40 0.0 0.0 41068 3724 tty2 S 10:21 0:00 ssh -p 27287 root@gloomyer.com
    root 116 0.0 0.0 80636 452 ? Ss 10:30 0:00 nginx: master process nginx -c /etc/nginx/si
    nobody 117 0.0 0.0 81064 1176 ? S 10:30 0:00 nginx: worker process
    root 124 0.0 0.0 40160 1832 tty1 R 10:31 0:00 ps aux
    root@Gloomy-MI-PC:/var/log/nginx#

    这应该是正常运行中吧,error.log里面也没有错误信息
    anyesu:@Gloomy_null 看下nginx的启动日志是否有报错
  • 7770b08e766e:对了。我还试过关闭ufw。同样报错。我去同事在电脑上发现也报错,但是他的程序都能正常启动,应该和iptables,ufw无关。但是现在的情况就是子系统中启动的程序,在子系统里面telnet 端口都不通,程序正常启动。子系统里面也不能查看端口占用情况,只能在windows中查看,因为他们是相通的。这可如何是好。
  • 7770b08e766e:非常感谢,楼主的文章。但是我遇到一个问题在这里面没有,解决很多天了。希望楼主有空帮我看一下是什么原因导致的。我现在遇到的问题是在子系统里面安装任何软件,telnet(windows和子系统里面)都不通。包括tomcat,ssh等。但是在子系统里面我确定它们是成功启动的。而我在子系统里面telnet windows系统的端口都是通的,我在家里的笔记本上面就没有遇到这些问题,很纳闷。子系统里面有防火墙导致?为何本身telnet也不通呢。我查看iptables发现ubuntu16.04这玩意就没有,报错了。请教应该怎么弄。谢谢。
    7770b08e766e:@anyesu 我现在的情况是程序起来了,但是端口死活不通。在linux本机上面都不通。折腾好几天了。。我的笔记本上没有问题。
    anyesu:好像理解错了:sweat: 你只是用telnet检测端口通不通是吧。我试了下:在WSL中以catalina.sh run的方式启动tomcat,再开一个窗口执行 telnet 127.0.0.1 8080,没有报错(说明端口是通的),再继续发送任意内容,得到返回结果"0"同时连接被关闭,这时看tomcat控制台可以看到错误信息。另外在WSL中telnet连接Windows也没问题,至于Windows下telnet连接WSL,因为还没开启该功能就没有尝试了
    anyesu:我在新装的WSL上试了,安装jdk再下载官网tomcat解压后不用配置就能跑了(Windows和WSL上都能访问)。至于telnet这东西从来没用过,不是很懂,不过ssh终端工具是可以用的(需要按文章中的说明配置ssh)
  • Licsber:Linux和windows不是在同一个网络环境吗 linux里面的127.0.0.1:XXX在windows无法访问 有啥解决方法么?
    Licsber:@anyesu 看起来挺不错的?
    Licsber:@anyesu # This file was automatically generated by WSL. To stop automatic generation of this file, remove this line.
    nameserver 218.2.2.2
    nameserver 218.4.4.4
    nameserver 192.168.1.1
    search Home
    ~
    anyesu:@Licsber 是一个网络的,参考nginx那一块内容,netstat -anp|grep xxx 看下端口监听上了没有
  • e9abf3f030ac:感谢分享,少了很多弯路。另外分享一个遇到的问题,在apt-get install xubuntu-desktop的时候遇到了无法解决包依赖的问题(包括使用-f指令),增加了新的源cn99(已使用楼主分享的阿里源)依然无法解决,后来安装了aptitude,使用这个可以成功安装xubuntu-desktop
    e9abf3f030ac:恩,aptitude对包依赖处理要比apt-get好一些。
    anyesu:我重装WSL试了下,aptitude应该是自带就有的(可能win10版本不同会有差异)。aptitude和apt-get两个命令主要功能类似,不过还是有点差异,一般我都用 aptitude search 来搜索包
  • 闭眼思回忆:请问一下,卸载之后重新安装为什么dash就变成不是不是内部或外部命令了?
    Licsber:@闭眼思回忆 这真是极其尴尬
    闭眼思回忆:@Licsber 是bash 我自己写错了 哈哈哈
    Licsber:dash???? 不是bash么 别吓我
  • 669605da34c7:为什么备份系统的时候,提示找不到文件lxss
    anyesu:@kaijun52 确定安装好了吗?或者重新安装试试
    669605da34c7:@anyesu 资源管理器里没有这个文件夹。
    anyesu:@kaijun52 进资源管理器,确认下%localappdata%目录(一般为C:\Users\[UserName]\AppData\Local)有lxss这个文件夹
  • be112b696ad7:为啥我装过之后,bash进入Ubuntu,输入指令然后就报command not found?
    anyesu:额,会不会是你输入了ubuntu不支持的指令
  • be112b696ad7:感谢作者
  • JasonChoi:想问下子系统默认装在C盘的吗?
    游侠儿evil:C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
    anyesu:默认是装在系统盘的, 可在资源管理器中直接访问这个路径 %localappdata%\lxss
  • 闲睡猫:感谢分享
  • 1133423d22eb:感谢分享!!!!!有空就去试一波
  • c8948947c255:为什么我用ssh链接wsh ,提示的是connect failed
    anyesu:@Shannon_0b4d 开启ssh后任务管理器是能看到一个sshd的进程
    anyesu:@Shannon_0b4d 1.按上面的配置修改过,特别是端口要改。2.确认bash是开着的
    c8948947c255: @Shannon_0b4d to是wsl
  • 2fad86f7e44a:有时间试试
  • yangganboy:非常感谢让我少踩很多坑 特别是nginx这块
    anyesu:@yangganboy 很高兴能帮到你:smile:
  • 秋无迹:感谢分享!
    anyesu:@秋无迹 就是把一些资料整理了下,顺便实践了一把,希望能让你少踩一些坑:smile:

本文标题:Windows10内置Linux子系统初体验

本文链接:https://www.haomeiwen.com/subject/vmqhgttx.html