以前在使用linux時,要么裝雙系統,要么是虛擬機,使用起來總是有些不方便。
好在windows10支持了Ubuntu,可以直接原生運行Linux,雖然沒有圖形界面,但是已經夠我們使用啦。
(用了Linux還要圖形界面??)
###開啟方法
- 設置-更新與安全-針對開發人員選項中,啟用"開發人員模式"
- 打開控制面板-程序和功能-打開"啟用或關閉 Windows功能"-勾選"適用於Linux的Windows子系統(Beta)"
- 重啟電腦
- Win+R打開cmd
- 輸入bash,按提示安裝即可。
進階設置可以參考這篇博客。
--------------------------------------------------------------
啟用linux子系統



系統升級到一周年正式版及以上(1607)
依次在
設置
-更新與安全
-針對開發人員
選項中,啟用"開發人員模式"在資源管理器中打開
控制面板\所有控制面板項\程序和功能
,打開"啟用或關閉 Windows功能",勾選"適用於Linux的Windows子系統(Beta)"- 重啟電腦
- 命令行運行
lxrun /install /y
開始安裝
安裝速度取決於網絡情況,下載的文件在%localappdata%\lxss
目錄下lxss.tar.gz
(181M),解壓后大概500M,rootfs
目錄即為子系統根目錄。- 命令行運行
bash
進入Ubuntu
默認使用的root帳號登錄,通過指令passwd
設置密碼。- 畢竟愛折騰,難免會把子系統環境(lxss目錄)玩壞掉,因此干正事前最好先備份下以便快速還原。注意,不要直接右鍵復制或者打包,可能會導致文件權限丟失的。
xcopy %localappdata%\lxss %localappdata%\lxss.bak /E
- 當然,如果你比較任性也可以不執行上一步的備份操作,通過命令行運行
lxrun /uninstall /full
輕松卸載子系統,重復上面的步驟即可重裝,不過要注意下載速度時好時壞哦。
通過上面的步驟,已經啟用了win10自帶的linux子系統(WSL),感覺逼格提升了不少。當然,怎么能滿足於此呢,接下來就要做一些環境的配置和進一步的挖掘。
更換數據源(參考)
在Ubuntu下我們可以通過apt-get命令很方便的安裝/卸載軟件,由於默認的軟件包倉庫是位於國外的,安裝軟件的時候就可能遇到各種網絡問題或者下載到的一些資源不完整,因此就需要切換數據源為國內的鏡像站點來改善。
-
# 1.備份原來的數據源配置文件
-
cp /etc/apt/sources.list /etc/apt/sources.list_backup
-
# 2.編輯數據源配置文件
-
vim /etc/apt/sources.list
-
# 在這里我使用的是阿里雲的數據源:
-
#==============================================================================================
-
-
-
-
-
-
-
-
-
-
-
#===============================================================================================
-
# 3.更新配置
-
apt-get update
與Windows通訊
目前子系統與Windows之間通過以下兩種方式進行通訊
- 通過tcp協議進行通訊(簡單點說就是用網絡,端口都是通的)
通過"/mnt/【盤符】/目錄"的方式訪問Windows目錄
試過在Windows的資源管理器中直接對子系統環境目錄下的文件所做的修改不能被子系統鎖識別,因此需要在bash下進行操作。
使用bash客戶端軟件cmder(參考)
Windows自帶的命令提示符cmd並不是很好用(文本選中、復制粘貼等等操作),在這里使用cmder作為替代品,體驗效果很好。去cmder官網下載mini版(完整版附帶了模擬的bash環境,由於已經安裝linux子系統,就不再需要了)的解壓即可使用。
設置:
1.啟動cmder直接運行bash:
- 進入"Settings>Startup>Startup options",
- 選擇Command line,輸入"bash -cur_console:p"

2.通過軟件底部的加號按鈕新開標簽頁並進入bash:
- 進入"Settings>Startup>Startup options>Tasks",
- 選擇"bash::bash",將指令修改為"cmd /c "bash" -cur_console:p -new_console:d:%USERPROFILE%"

小貼士:將cmder目錄添加到環境變量path中或者復制快捷方式到C:\Windows\System32"目錄下,就可通過win+R快捷鍵快速打開了
運行圖形界面程序(參考)
什么!linux不是就這么個黑白界面的窗口嗎?是的,你沒看錯,就是圖形界面,這里用到的是Xserver這個東東,至於原理什么的各位自行度娘吧。

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打開了三個窗口,分別是桌面、任務欄、菜單欄。逼格是提升了不少,不過確實很卡。

在子系統上運行nginx
因工作項目中用到了ssi技術,而已經windows上已經編譯好的nginx是不支持相對路徑引用的(需要修改源碼重新編譯),只能委屈求全用着apache。不過既然現在都能跑linux了,那就試試在linux上運行nginx,然后在windows上進行調用。
1.通過apt方式安裝
-
apt 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

出現的fec0:0:0:ffff::1是個什么鬼,度娘了一番,貌似是dsn,打開dns配置文件/etc/resolv.conf
果然發現了這東西,應該是Windows下只分配了1個dns,所以linux就給了這么兩個默認值的吧。將它們注釋掉,重新啟動nginx,成功運行Tengine/2.1.1!注意,每次重啟bash都會重置dns配置的
啟用ssh(參考)
本地可以通過命令行打開bash,如果要遠程訪問(如同訪問線上服務器一樣),那么就需要啟用ssh。
-
-
apt install openssh-server
-
-
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
-
vim /etc/ssh/sshd_config
-
-
-
-
-
-
-
-
-
-
service ssh start
-
-
rm /etc/ssh/ssh*key
-
dpkg-reconfigure openssh-server
使用終端工具訪問,這里我用的是WinSCP + PuTTY


WSL開機啟動

打開任務管理器我們可以發現,在運行子系統的時候,后台其實有一個bash的進程在運行,我們每開一個命令行窗口就會多一個bash.exe,如果我們把所有的bash.exe都關閉則這個bash進程就關閉了(相當於是子系統關機了),跟着之前在子系統中打開的程序如nginx、sshd等也隨之關閉了。為了讓linux程序能夠在后台繼續運行,這里通過vbs腳本在后台打開一個bash.exe來保證bash進程一直開着。當然,還可以通過Windows的計划任務實現開機啟動WSL並打開其中的程序。
-
-
vim /usr/anyesu/boot.sh
-
-
-
-
-
-
-
-
-
chmod 777 /usr/anyesu/boot.sh
-
-
-
-
-
-







關於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