什么是WSL
Windows Subsystem for Linux
簡稱WLS,適用於Linux的Windows子系統,可以直接在Windows上運行Linux環境(包括大部分命令行工具)
Linux containers與Windows Subsystem for Linux(WSL)區別
此處以docker與wsl進行一些比較,主要為個人的理解之處。
docker與wsl同樣運行在本機環境中運行,不依賴其他管理程序與虛擬化。
docker與wsl同樣為應用容器。
安裝WSL
在Windows10上,用於Linux的Windows子系,可運行受支持的Linux版本(例如Ubuntu,OpenSuse,Debian等),而無需設置操作系統的復雜性。虛擬機或其他計算機。
使用設置為Linux啟用Windows子系統
- 打開設置
- 點擊“應用”。
- 在“相關設置”部分下,單擊“程序和功能”選項。
- 單擊左窗格中的“打開或關閉Windows功能”選項。
- 檢查Windows Subsystem for Linux選項。
完成這些步驟后,將配置該環境以下載並運行Windows 10上的Linux版本。
使用Microsoft Store安裝Linux發行版
要在Windows 10上安裝Linux發行版,請使用以下步驟:
打開Microsoft Store。搜索要安裝的Linux發行版。一些可用的發行版包括:
- 選擇要在您的設備上安裝的Linux發行版。
- 單擊獲取(或安裝)按鈕。
- Microsoft Store安裝Linux發行版
- 單擊啟動按鈕。為Linux發行版創建一個用戶名,然后按Enter鍵。
- 指定發行版的密碼,然后按Enter。
- 重復密碼,然后按Enter確認。
完成以上步驟后,即完成安裝了WLS(沒有圖形界面),在開始菜單 運行 wls
啟動。
離線安裝WLS
官網指導手冊內包含所支持的Linux離線安裝包
這里下載的為
Ubuntu 18.04
,下載后,文件格式為appx格式,本次使用的操作系統為,windows1709企業版,並且卸載了所有的 UWP應用。因此只能使用命令行進行安裝。非LTSC企業版或卸載windows store的可以直接雙擊安裝
管理員打開Powershell 運行以下命令,將路徑替換為下載的離線安裝包路徑。本次安裝的wls默認安裝到C盤
Add-AppxPackage .\app_name.appx
查看已經安裝的子系統
wslconfig /l
安裝時選擇其他盤安裝
-
首先解壓.appx文件
-
用LxRunOffline安裝:
windows10 1803以上版本下載最新版即可,windows 1709及一下,可以安裝2.x版本。
- 使用以下命令安裝,
-f
后的文件為解壓后文件內根目錄的install.tar.gz
語法
LxRunOffline.exe install -n <install systemname> -d <save path> -f <unzip_path/install.tar.gz>
LxRunOffline.exe install -n ubuntu -d d:\wls -f d:\Ubuntu_1804.2019.522.0_x64\install.tar.gz
等運行完成后(warning可忽略),開始 => 運行wls
進入,進入后默認就是root用戶。另外開始菜單不會有單獨的啟動的圖標。
配置wsl與windows共用開發環境
本次配置的開發環境為golang與goland,在windows下與linux下的環境開發與運行為相同的環境。其他的開發環境類似。
因為wsl共享windows的路徑,可以再windows與linux安裝golang編譯器。並分別設置go env
windows
set GO111MODULE=on
set GOPATH=D:\go_work
set GOPROXY=https://goproxy.io,https://goproxy.cn,direct
set GOROOT=C:\Go
Linux,GOPATH要與windows設置為同一個路徑,這樣可以保證安裝的包為同一個。即實現了同一個開發環境與Linux環境。
export GO111MODULE=on
export GOPROXY=https://goproxy.io,https://goproxy.cn,direct
export GOROOT=/usr/local/go
export GOPATH=/mnt/d/go_work/
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
goland設置
file => setting => Tools => Terminal
C:\Windows\System32\wsl.exe
file => setting => Editor => Code Style
goland wls terminal .bashrc不生效
在wsl中發現一些環境變量、shell顏色等都不生效。這里需要了解shell的類型
shell有兩種類型,Login Shell
和Non Login Shell
。每一個shell都有自己自定義的腳本來預設值shell運行的環境。
Login Shell
當成功登陸用戶后,將創建登陸shell(通過ssh sudo 或者 terminal)
查看當前shell是什么類型的shell echo $0
- Login Shell:-bash或-su。
- Non Login Shell: bash或su
Login shell 登陸后執行以下腳本:
登陸執行
/etc/profile
/etc/profile執行/etc/profile.d
中的所有腳本
然后執行用戶~/.bash_profile
~/.bash_profile
會有命令執行用戶目錄~/.bashrc
~/.bashrc
中會執行/etc/bashrc
Non Login Shell
Non Login Shell
是由Login Shell
啟動的shell。例如,登陸成功后執行bash,此時是Non Login Shell
Non Login Shell登陸后執行以下腳本:
首先執行
~/.bashrc
然后~/.bashrc
執行/etc/bashrc
/etc/bashrc
調用/etc/profile.d
中的腳本
了解了執行順序后,按照步驟查看對應問題所在,此處問題沒有~/.bashrc
中設置的alias和顏色。根據Login shell
流程應為~/.bash_profile
中去執行~/.bashrc
,查看~/.bash_profile
發現文件為空。
復制一份linux ~/.bash_profile
中的文件內容到對應的~/.bash_profile
后發現功能已經正常實現。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin