前言
前段時(shí)間,機(jī)子上的 win10 又偷偷摸摸升級(jí)到了一周年正式版,比較無奈。不過之前聽聞這個(gè)版本已經(jīng)支持內(nèi)置的 Linux 子系統(tǒng),于是就懷著好奇心試玩了一把。雖然期間遇到了很多問題,但總體來說這個(gè)子系統(tǒng)體驗(yàn)還不錯(cuò),在這里就分享一些關(guān)鍵步驟和遇到的問題,剩下的大家自己折騰吧。。
啟用 Linux 子系統(tǒng)
系統(tǒng)升級(jí)到一周年正式版及以上(1607)
依次在
設(shè)置
-更新與安全
-針對(duì)開發(fā)人員
選項(xiàng)中,啟用"開發(fā)人員模式"在資源管理器中打開
控制面板\所有控制面板項(xiàng)\程序和功能
, 打開啟用或關(guān)閉 Windows功能
, 勾選適用于Linux的Windows子系統(tǒng)(Beta)
重啟電腦
命令行運(yùn)行
lxrun /install /y
開始安裝
安裝速度取決于網(wǎng)絡(luò)情況,下載的文件在%localappdata%\lxss
目錄下lxss.tar.gz
(181M),解壓后大概500M,rootfs
目錄即為子系統(tǒng)根目錄。命令行運(yùn)行
bash
進(jìn)入Ubuntu
默認(rèn)使用的root
帳號(hào)登錄,通過指令passwd
設(shè)置密碼。
- 注:本文腳本均在root帳號(hào)下操作,因此建議使用root帳號(hào)
- 畢竟愛折騰,難免會(huì)把子系統(tǒng)環(huán)境(lxss目錄)玩壞掉,因此干正事前最好先備份下以便快速還原。注意,不要直接右鍵復(fù)制或者打包,可能會(huì)導(dǎo)致文件權(quán)限丟失的。
xcopy %localappdata%\lxss %localappdata%\lxss.bak /E
- 當(dāng)然,如果你比較任性也可以不執(zhí)行上一步的備份操作,通過命令行運(yùn)行
lxrun /uninstall /full
輕松卸載子系統(tǒng),重復(fù)上面的步驟即可重裝,不過要注意下載速度時(shí)好時(shí)壞哦。
通過上面的步驟,已經(jīng)啟用了 win10 自帶的 Linux 子系統(tǒng) ( WSL ),感覺逼格提升了不少。當(dāng)然,怎么能滿足于此呢,接下來就要做一些環(huán)境的配置和進(jìn)一步的挖掘。
更換數(shù)據(jù)源 ( 參考 )
在 Ubuntu 下我們可以通過 apt-get 命令 很方便的安裝/卸載軟件,由于默認(rèn)的軟件包倉庫是位于國外的,安裝軟件的時(shí)候就可能遇到各種網(wǎng)絡(luò)問題或者下載到的一些資源不完整,因此就需要切換數(shù)據(jù)源為國內(nèi)的鏡像站點(diǎn)來改善。
# 1.備份原來的數(shù)據(jù)源配置文件
cp /etc/apt/sources.list /etc/apt/sources.list_backup
# 2.編輯數(shù)據(jù)源配置文件
vi /etc/apt/sources.list
在這里我使用的是阿里云的數(shù)據(jù)源:
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版之后更新了內(nèi)核,第三方的鏡像站可能找不到軟件包資源,需要切換回官方的源。經(jīng)測(cè)試 中科大的源 可用
dist=`lsb_release -cs`
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist} main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist}-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist}-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ ${dist}-security main restricted universe multiverse
EOF
與 Windows 通訊
目前 子系統(tǒng) 與 Windows 之間通過以下兩種方式進(jìn)行通訊
- 通過
tcp
協(xié)議進(jìn)行通訊(簡(jiǎn)單點(diǎn)說就是用網(wǎng)絡(luò),端口都是通的)
- 通過
/mnt/【盤符】/目錄
的方式訪問Windows目錄
試過在Windows的資源管理器中直接對(duì)子系統(tǒng)環(huán)境目錄下的文件所做的修改不能被子系統(tǒng)所識(shí)別,因此需要在bash下進(jìn)行操作。
在任何情況下,請(qǐng)勿使用Windows應(yīng)用程序,工具,腳本,控制臺(tái)等創(chuàng)建或修改Linux文件
安裝 zsh
目前常用的 Linux 系統(tǒng)和 OS X 系統(tǒng)的默認(rèn) Shell 都是 bash,但是真正強(qiáng)大的 Shell 是深藏不露的 zsh, 這貨絕對(duì)是馬車中的跑車,跑車中的飛行車,史稱『終極 Shell』,但是由于配置過于復(fù)雜,所以初期無人問津,很多人跑過來看看 zsh 的配置指南,什么都不說轉(zhuǎn)身就走了。直到有一天,國外有個(gè)窮極無聊的程序員開發(fā)出了一個(gè)能夠讓你快速上手的zsh項(xiàng)目,叫做「oh my zsh」,Github 網(wǎng)址是:https://github.com/robbyrussell/oh-my-zsh。這玩意就像「X天叫你學(xué)會(huì) C++」系列,可以讓你神功速成,而且是真的。
zsh 就是一款強(qiáng)大的虛擬終端,網(wǎng)上也都推薦使用 oh my zsh 來管理配置 , 不過對(duì)我來說還是不夠傻瓜。于是,參考一篇 文章 使用 zsh 的 包管理器 antigen 來管理所有功能,文章中還給了現(xiàn)成的配置。
- 安裝 zsh
sudo apt-get -y install zsh
- 設(shè)置終端的 shell 環(huán)境默認(rèn)為 zsh,輸入以下命令( 需要 重啟 )
# 加 sudo 是修改 root 帳號(hào)的默認(rèn) shell
chsh -s `which zsh`
- 如果上面命令無效,修改 ~/.bashrc 文件, 在開頭添加:
if [ -t 1 ]; then
exec zsh
fi
- 安裝 antigen
# 修改配置 ~/.zshrc(如果切換帳號(hào)后無法使用 zsh 則把該用戶的配置文件再配一遍)
curl -L https://raw.githubusercontent.com/skywind3000/vim/30b702725847bac4708de34664bb68454b54e0c0/etc/zshrc.zsh > ~/.zshrc
# 修改主題, 參考:https://github.com/robbyrussell/oh-my-zsh/wiki/themes
# 如果需要主題一直生效需要添加到 ~/.zshrc 中
antigen theme ys
# 配置修改完重新執(zhí)行 zsh
- 如果出現(xiàn)警告:zsh compinit: insecure directories, run compaudit for list.
chmod -R 755 ~/.antigen
-
按鍵補(bǔ)齊 ( 解決zsh中無法正常使用home和end等鍵的問題 )
在 ~/.zshrc 文件末尾添加下面的內(nèi)容
# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
bindkey "\e[5~" beginning-of-history
bindkey "\e[6~" end-of-history
# for rxvt
bindkey "\e[8~" end-of-line
bindkey "\e[7~" beginning-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
bindkey "\eOH" beginning-of-line
bindkey "\eOF" end-of-line
# for freebsd console
bindkey "\e[H" beginning-of-line
bindkey "\e[F" end-of-line
# completion in the middle of a line
bindkey '^i' expand-or-complete-prefix
# Fix numeric keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + - * /
bindkey -s "^[Ol" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
安裝 autojump ( 用法參考 )
autojump 是一個(gè)命令行工具,它允許你可以直接跳轉(zhuǎn)到你喜愛的目錄,而不受當(dāng)前所在目錄的限制。意思就是可以讓你更快地切換目錄,而不用頻繁地使用 cd/tab 等命令。
- 安裝
sudo apt-get install autojump
- zsh 下運(yùn)行報(bào)錯(cuò):
$ 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終端增強(qiáng)技能 和 終極 Shell 找到解決辦法:
在
~/.zshrc
中安裝插件brew install autojump
再重新進(jìn)入 zsh
由于本文使用 antigen 作為 zsh 的包管理器,所以實(shí)際操作是在 ~/.zshrc
中添加 antigen bundle autojump
使用 bash 客戶端軟件 cmder ( 參考 )
Windows 自帶的 命令提示符 cmd 并不是很好用( 文本選中、復(fù)制粘貼等等操作 ),在這里使用 cmder 作為替代品,體驗(yàn)效果很好。去 cmder 官網(wǎng) 下載 mini版( 完整版附帶了模擬的 bash 環(huán)境,由于已經(jīng)安裝 Linux 子系統(tǒng),就不再需要了)解壓即可使用。
-
設(shè)置啟動(dòng) cmder 時(shí)直接運(yùn)行 bash:
1. 進(jìn)入 "Settings > Startup",
2. 選擇 "Startup options > Command line",輸入 "bash -cur_console:p"
-
通過軟件底部的加號(hào)按鈕新開標(biāo)簽頁并進(jìn)入 bash
1. 進(jìn)入 "Settings > Startup > Tasks",
2. 選擇 "bash::bash",將指令修改為 'cmd /c "bash" -cur_console:p -new_console:d:%USERPROFILE%'
文中給的 cmder 是 1.3.2 版本的,最新的 1.3.6 版本已經(jīng)默認(rèn)集成了 WSL 的 Task,就不用這一步的配置了
-
設(shè)置配色主題
1. 進(jìn)入 "Settings > Features > Colors",
2. "Schemes" 項(xiàng)下拉選擇 "<ubuntu>"
小貼士:將 cmder 目錄添加到環(huán)境變量 path 中或者復(fù)制快捷方式到 "C:\Windows\System32" 目錄下,就可通過 win + R 快捷鍵快速打開了
運(yùn)行圖形界面程序 ( 參考 )
什么!Linux 不是就這么個(gè)黑白界面的窗口嗎?是的,你沒看錯(cuò),就是圖形界面,這里用到的是 Xserver 這個(gè)東東,至于原理什么的各位自行度娘吧。
安裝Xming 下載地址
安裝完直接打開
Xming
即可安裝一個(gè)
firefox
測(cè)試
apt-get install firefox
運(yùn)行(在程序指令前加上"DISPLAY=:0 ")
DISPLAY=:0 firefox
簡(jiǎn)化配置
每次運(yùn)行程序都要輸入DISPLAY=:0
挺累的,執(zhí)行下列指令后重啟bash即可省去這個(gè)步驟
echo "export DISPLAY=:0.0" >> ~/.bashrc
PS:很多小伙伴反映說打開Xming沒反應(yīng),這是正常現(xiàn)象 ( 詳見評(píng)論區(qū)33樓 )。Xming是一個(gè)在后臺(tái)運(yùn)行的服務(wù),在任務(wù)欄顯示一個(gè)
X
的小圖標(biāo)即表示啟動(dòng)成功,無需其他操作了。要想看到畫面,需要在wsl或其他遠(yuǎn)程Linux機(jī)器上使用DISPLAY=:0
命令啟動(dòng)帶圖形界面的程序。在這里簡(jiǎn)單分析下我理解的原理:1. Xming 啟動(dòng) Xserver服務(wù)用于監(jiān)聽;2. wsl啟動(dòng)程序后把界面數(shù)據(jù)發(fā)送給 Xserver;3. Xserver 接收到數(shù)據(jù)進(jìn)行繪制,于是在win下就看到了圖形界面。還有困惑的話請(qǐng)移步至下方的 vnc 版塊,比Xming效果要好,類似與 win 下遠(yuǎn)程桌面連接
的效果。
Sublime Text 3 安裝
既然都可以運(yùn)行圖形界面了,編輯器也要換成可視化的,畢竟 vim 還是不太適合我。
cd /
# 下載
wget https://download.sublimetext.com/sublime-text_build-3126_amd64.deb
# 安裝
dpkg -i sublime-text_build-3126_amd64.deb
# 運(yùn)行
subl
應(yīng)該是少了什么依賴包,嗯,安裝下搞定。
apt-get -y install libgtk2.0-0
啟動(dòng) xfce 桌面環(huán)境 ( 參考 )
圖形界面程序都能運(yùn)行了,不試試 ubuntu 的桌面環(huán)境怎么能甘心,于是又是噼里啪啦一頓搜索。一開始參照這篇 國外的教程 折騰了許久,每次運(yùn)行總是報(bào)一個(gè) composite 的插件沒加載進(jìn)來,各種軟件包安裝一通還是不行,后來實(shí)在失去耐心就放棄了這條路。后來看到好像有人成功運(yùn)行了 xfce , 但沒有具體步驟,只能自己一頓摸索,結(jié)果還真誤打誤撞成功了。
# 1.安裝xfce4
apt-get install -y xfce4
# 2.安裝xubuntu桌面及附帶應(yīng)用
apt-get install -y xubuntu-desktop
# 3.啟動(dòng)
xfce4-session
解決辦法: ( 參考 )
sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf
再次嘗試打開,現(xiàn)在可以看到 Xming 打開了三個(gè)窗口,分別是桌面、任務(wù)欄、菜單欄。逼格是提升了不少,不過確實(shí)很卡。
使用 VNC 進(jìn)行遠(yuǎn)程桌面控制 ( 安裝方法 )
感謝 @lizr_4bf0 的提示,使用
VNC
來代替Xming
以解決Xming
下很卡的問題。
- wsl 下安裝 vnc4server
apt-get install -y vnc4server
- wsl 下啟動(dòng) vncserver ( 安裝后首次啟動(dòng)需要設(shè)置訪問密碼 )
vncserver
在 win10 的 VNC Viewer 中訪問 127.0.0.1:1
注意:如果連接 VNC Viewer 時(shí)報(bào)錯(cuò)請(qǐng) 參考VNC Viewer 中只顯示一個(gè)終端窗口的問題
# 修改xstartup, 將 x-window-manager 替換為剛才安裝的 xfce4-session
sed -i 's$x-window-manager$xfce4-session$' ~/.vnc/xstartup
# 重啟 vncserver
vncserver -kill :1
vncserver :1
注意: 如果沒安裝 xfce4,那么至少安裝一個(gè)終端 ( 比如: apt install -y gnome-terminal ) 用于啟動(dòng), 不然 vnc 就是空白的, 什么都干不了
# 先關(guān)閉
vncserver -kill :1
# 再啟動(dòng)并設(shè)置分辨率(注意是小寫的x)
vncserver -geometry 1366x768 :1
在子系統(tǒng)上運(yùn)行nginx
因工作項(xiàng)目中用到了 ssi 技術(shù),而已經(jīng) Windows 上已經(jīng)編譯好的 nginx 是不支持相對(duì)路徑引用的( 需要修改源碼重新編譯 ),只能委屈求全用著 Apache 。不過既然現(xiàn)在都能跑 Linux 了,那就試試在 Linux 上運(yùn)行 nginx,然后在 Windows 上進(jìn)行調(diào)用。
1. 通過 apt-get 方式安裝
sudo apt-get install nginx
# 啟動(dòng)報(bào)錯(cuò)了:
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
# 80端口實(shí)際沒被占用,那應(yīng)該就是ipv6的問題,將其禁用:
vim /etc/nginx/sites-available/default
# 找到default_server ipv6only=on;注釋掉
# 再次啟動(dòng)沒報(bào)錯(cuò),不過瀏覽器無法訪問,80端口也沒被使用,查看error.log
cat /var/log/nginx/error.log
# 看到錯(cuò)誤信息:
ioctl(FIOASYNC) failed while spawning "worker process" (22: Invalid argument)
# 解決方法:禁用master進(jìn)程模式
sed -i '1 a\master_process off;' /etc/nginx/nginx.conf
再次啟動(dòng),終于沒報(bào)錯(cuò)了,在 Windows 中打開瀏覽器訪問 127.0.0.1,還真的試驗(yàn)成功了,不過 nginx 版本 ( 1.4.6
) 有點(diǎn)老。
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.進(jìn)入目錄
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.啟動(dòng)
/usr/anyesu/sbin/nginx
上面的步驟,我試了兩臺(tái)電腦,其中一臺(tái)報(bào)錯(cuò):
nginx: [emerg] invalid port in resolver "fec0:0:0:ffff::1" in /usr/anyesu/nginx/conf/nginx.conf:123
出現(xiàn)的 fec0:0:0:ffff::1
是個(gè)什么鬼,度娘了一番,貌似是 dns,打開 dns 配置文件 /etc/resolv.conf
果然發(fā)現(xiàn)了這東西,應(yīng)該是 Windows 下只分配了 1 個(gè) dns,所以 Linux 就給了這么兩個(gè)默認(rèn)值的吧。將它們注釋掉,重新啟動(dòng) nginx,成功運(yùn)行 Tengine/2.1.1 。
注意,每次重啟 bash 都會(huì)重置 dns 配置的
啟用 ssh ( 參考 )
本地可以通過命令行打開 bash,如果要遠(yuǎn)程訪問( 如同訪問線上服務(wù)器一樣 ),那么就需要啟用 ssh 。
# 1.安裝ssh(一般不需要這步)
apt-get install openssh-server
# 2.修改配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vim /etc/ssh/sshd_config
#=======(修改以下選項(xiàng)內(nèi)容)=========#
# Port 23(22端口已被占用) #
# (取消注釋)ListenAddress 0.0.0.0 #
# UsePrivilegeSeparation no #
# PermitRootLogin yes #
# (注釋)StrictModes yes #
# PasswordAuthentication yes #
#================================#
# 3.啟動(dòng)ssh
service ssh start
# 4.如果提示“sshd error: could not load host key”,則用下面的命令重新生成
rm /etc/ssh/ssh*key
dpkg-reconfigure openssh-server
使用終端工具訪問,這里我用的是 WinSCP + PuTTY
WSL 開機(jī)啟動(dòng)
打開任務(wù)管理器我們可以發(fā)現(xiàn),在運(yùn)行子系統(tǒng)的時(shí)候,后臺(tái)其實(shí)有一個(gè)名為 bash 的進(jìn)程在運(yùn)行,我們每開一個(gè)命令行窗口就會(huì)多一個(gè) bash.exe,如果我們把所有的 bash.exe 都關(guān)閉, 則這個(gè) bash 進(jìn)程就跟著關(guān)閉了(相當(dāng)于是子系統(tǒng)關(guān)機(jī)了),跟著之前在子系統(tǒng)中打開的程序如 nginx、sshd 等也隨之關(guān)閉了。為了讓 Linux 程序能夠在后臺(tái)繼續(xù)運(yùn)行,這里通過 vbs 腳本在后臺(tái)打開一個(gè) bash.exe 來保證 bash 進(jìn)程一直開著。當(dāng)然,還可以通過 Windows 的計(jì)劃任務(wù)實(shí)現(xiàn)開機(jī)啟動(dòng) WSL 并打開其中的程序。
注:目前1803版本中關(guān)閉 bash.exe 不會(huì)再關(guān)閉打開的 Linux 進(jìn)程了,也就是說不需要再在后臺(tái)維持一個(gè) bash.exe
# 1.新建開機(jī)啟動(dòng)腳本
vim /usr/anyesu/boot.sh
# 2.編輯
#================================================================
# #!/bin/sh
# /usr/anyesu/nginx/sbin/nginx
# service ssh start
# $SHELL #這句很重要,掛起當(dāng)前腳本進(jìn)程,進(jìn)而維持base.exe一直打開
#================================================================
# 3.設(shè)置權(quán)限
chmod 777 /usr/anyesu/boot.sh
# 4.創(chuàng)建vbs腳本(D:\linux\wsl.vbs)
#==========================================
# Set ws = CreateObject("Wscript.Shell")
# ws.run "bash /usr/anyesu/boot.sh",vbhide
#==========================================
# 5.創(chuàng)建計(jì)劃任務(wù)
使 WSL 支持 32位程序
- 參考 issue#2468 ( 中文 )
注: 依賴包可能無法自動(dòng)安裝, 自己手動(dòng)安裝下
使用 Docker
由于篇幅較多,單獨(dú)寫了一篇文章 —— WSL 中 Docker 使用總結(jié) 。
關(guān)于 Linux 發(fā)行版本
# 打開cmd,進(jìn)入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
# 進(jìn)入子系統(tǒng)所在路徑
cd %localappdata%\lxss
# 備份ubuntu用戶空間(看下任務(wù)管理器中bash是不是徹底關(guān)閉了)
rename rootfs rootfs.ubuntu
# 使用openSUSE用戶空間替換默認(rèn)用戶空間
move rootfs.ubuntu\rootfs rootfs
# 設(shè)置默認(rèn)登錄用戶
lxrun /setdefaultuser root
# 重新進(jìn)入bash
bash
#查看發(fā)行版本
cat /etc/issue
官方資料
2017-11-21追加
最近系統(tǒng)又被強(qiáng)更到了 1709 版本 ( 16299.64 ),發(fā)現(xiàn)幾點(diǎn)變化做個(gè)記錄:
ping 命令已經(jīng)可以正常使用了
nginx 的 master 模式也能正常使用不會(huì)報(bào)錯(cuò)了
發(fā)現(xiàn) nginx、ssh 之類的,能正常啟動(dòng)不報(bào)錯(cuò)但怎么也無法綁定端口。后來查了 github上的 issues 發(fā)現(xiàn)是wegame ( 原 tgp ) 的鍋,原因是使用了一個(gè) win10 上已失效的特性,wegame 的開發(fā)表示會(huì)盡快修復(fù)。臨時(shí)解決辦法:刪除文件
%systemroot%\system32\drivers\QMTgpNetflow764.sys
后重啟 bash,如無法刪除先關(guān)閉應(yīng)用或卸載再重裝 wegame ( 最好重啟電腦 ),重裝 后先 刪除QMTgpNetflow764.sys
再運(yùn)行 wegame。內(nèi)核升級(jí)為
4.4.0-43-Microsoft
了, 帶上了微軟的標(biāo)記,推測(cè)是這個(gè)原因?qū)е潞芏嘬浖鼰o法正常安裝了。后來發(fā)現(xiàn)應(yīng)該是阿里云的數(shù)據(jù)源未同步的原因,加上 Ubuntu 自帶的源 ( 即文中最初備份的內(nèi)容 ) 即可解決。
2017-11-30追加
目前 1709 版本 ( 16299.64 ) 已經(jīng)可以在商店中搜索安裝多個(gè)不同版本的子系統(tǒng)了,根路徑為 %localappdata%\Packages\【根據(jù)子系統(tǒng)名找到對(duì)應(yīng)的應(yīng)用文件夾】\LocalState\rootfs
。同時(shí)還新增了兩個(gè)命令行工具: wsl.exe
和 wslconfig.exe
。
其中 wsl.exe
應(yīng)該等價(jià)于 bash.exe
, 兩者之間的細(xì)微差別暫時(shí)還沒發(fā)現(xiàn)。至于 wslconfig.exe
的作用主要為 ( 參考 ):
1. 查看安裝所有已安裝的子系統(tǒng):
wslconfig /l
適用于 Linux 的 Windows 子系統(tǒng): Ubuntu (默認(rèn)) Legacy
其中
Ubuntu
是商店中下載的版本,Legacy
是按老方法安裝的默認(rèn)wsl。2. 切換bash.exe默認(rèn)使用的子系統(tǒng):
wslconfig /s <DistributionName>
其中<DistributionName>
替換為Ubuntu
或Legacy
, 或者其他已安裝的子系統(tǒng)。3. 卸載已安裝的子系統(tǒng):
wslconfig /u <DistributionName>
同上替換<DistributionName>
。經(jīng)測(cè)試發(fā)現(xiàn),此"卸載"
并不會(huì)卸載商店中安裝的Ubuntu
應(yīng)用, 即再次執(zhí)行該應(yīng)用又會(huì)重新安裝了。
2018-10-11追加
官方博客中給出了命令行方式來安裝指定版本的 WSL ( 參考 )
以 管理員權(quán)限 啟動(dòng) PowerShell ( 快捷鍵 WIN + X
調(diào)出 ) 執(zhí)行下面命令
- 啟用 WSL 特性
# 會(huì)提示重啟電腦
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
- 安裝 Ubuntu
# 下載安裝包
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ~/Ubuntu.appx -UseBasicParsing
# 安裝
Add-AppxPackage -Path ~/Ubuntu.appx
# 啟動(dòng)
Ubuntu.exe
- 安裝 SLES
# 下載安裝包
Invoke-WebRequest -Uri https://aka.ms/wsl-sles-12 -OutFile ~/SLES.appx -UseBasicParsing
# 安裝
Add-AppxPackage -Path ~/SLES.appx
# 啟動(dòng)
sles-12.exe
- 安裝 openSUSE
# 下載安裝包
Invoke-WebRequest -Uri https://aka.ms/wsl-opensuse-42 -OutFile ~/openSUSE.appx -UseBasicParsing
# 安裝
Add-AppxPackage -Path ~/openSUSE.appx
# 啟動(dòng)
opensuse-42.exe
寫在最后
WSL 折騰完有一段時(shí)間了,只是一直沒時(shí)間記錄下來(也許是懶吧)。在此之前,由于工作需要,偶爾兼職運(yùn)維的角色,折騰下服務(wù)器什么的,就很業(yè)余的學(xué)習(xí)了一些 Linux 指令。以前裝過 vmware ,體驗(yàn)不是很好就不想裝了,所以寫 shell 腳本、編譯源碼什么的都是在公司測(cè)試服務(wù)器上練習(xí)的,現(xiàn)在有了 WSL 之后就可以在自己本地練習(xí)了 ( 肆意折騰,哈哈哈 )。使用方面,體驗(yàn)和使用終端工具連接遠(yuǎn)程服務(wù)器是差不多的;性能方面,子系統(tǒng)( bash 進(jìn)程 ) 本身是不占多少內(nèi)存的,啟動(dòng)程序幾乎相當(dāng)于啟動(dòng) Windows 程序了,不顯示圖形界面內(nèi)存都占用比較小,肯定優(yōu)于"印象中的虛擬機(jī)"。總的來說,WSL 還是比較值得推薦去折騰的,也比較適合新手學(xué)習(xí) Linux,雖然我也只是個(gè)小白⊙﹏⊙