12步搞定Wsl 2,安裝、交互、遷移、VSCode遠(yuǎn)程調(diào)試應(yīng)有盡有
1. WSL2概述
WSL是Windows Subsystem for Linux的縮寫,允許利用CPU的虛擬化技術(shù)在Windows系統(tǒng)下使用Linux系統(tǒng)。目前最新版本是WSL2。
2. 安裝WSL2的軟硬件條件
安裝WSL2必須滿足如下幾個(gè)條件:
(1)必須是Windows10或Windows11系統(tǒng),如果是Windows10,版本必須是2004或以上版本,對(duì)應(yīng)的內(nèi)部版本號(hào)是19041或更高版本;
查看Windows版本號(hào)和內(nèi)部版本號(hào)的方法:按Windows 徽標(biāo)鍵 + R鍵打開運(yùn)行窗口,輸入winver命令,會(huì)彈出如下圖所示的窗口,在該窗口中顯示版本號(hào)和內(nèi)部版本號(hào)。
(2)CPU必須支持虛擬化,而且要在BIOS中打開虛擬化支持;
讀者可以打開Windows的任務(wù)管理器,在“性能”頁(yè)面右下角,如果找到如下圖所示的“虛擬化:已啟用”,說(shuō)明虛擬化已經(jīng)開啟。
3. 在線安裝WSL2
安裝WSL2相當(dāng)簡(jiǎn)單,直接在PowerShell中執(zhí)行下面的命令即可安裝。
- wsl --install
執(zhí)行這行命令后,會(huì)啟用所需的可選組件,下載最新的 Linux 內(nèi)核,將 WSL 2 設(shè)置為默認(rèn)值,并安裝 Linux 發(fā)行版(默認(rèn)安裝 Ubuntu)。
如果想改變默認(rèn)安裝的Linux(安裝其他Linux發(fā)行版),可以使用下面的命令:
- wsl --install -d
其中表示Linux發(fā)行版的名稱,可以使用下面的命令查看WSL2目前支持哪些Linux發(fā)行版。
- wsl --list --online 或 wsl -l -o
執(zhí)行完命令后,會(huì)看到如下圖的Linux發(fā)行版列表。例如,要安裝Debian Linux,可以執(zhí)行wsl --install -d Debian命令。
如果查詢本地已經(jīng)安裝了哪些Linux發(fā)行版,可以使用wsl --list 或 wsl -l 。
4. 離線安裝WSL2
盡管在線安裝Linux發(fā)行版非常容易,但有一個(gè)問(wèn)題,就是不能選擇安裝路徑。默認(rèn),Linux發(fā)行版的所有文件會(huì)都安裝在C盤。如果C盤不大,很容易被占滿。所以我們期望將Linux發(fā)行版安裝在其他盤。
網(wǎng)上有很多改變默認(rèn)安裝路徑的方式,其實(shí)有更容易的方式實(shí)現(xiàn),就是直接下載離線版本的Linux發(fā)行版,只需直接解壓運(yùn)行即可。你在哪個(gè)盤解壓,以后的所有文件就都會(huì)放到這個(gè)盤里。
讀者可以到下面頁(yè)面的最后下載相應(yīng)的Linux發(fā)行版:
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual
PS:如果讀者使用的Windows版本比較低,無(wú)法使用在線安裝方式,也可以按著上面的頁(yè)面采用手動(dòng)的安裝方式。
下載的Linux發(fā)行版是appx文件(或其他擴(kuò)展名),它們都是壓縮文件,只需要將擴(kuò)展名改成zip,然后解壓即可。
假設(shè)大家下的是Ubuntu20.04,解壓后,里面有一個(gè)ubuntu2004.exe文件,直接運(yùn)行即可。第一次運(yùn)行,會(huì)要求輸入一個(gè)用戶名,還有對(duì)應(yīng)的密碼。以后直接運(yùn)行,即可進(jìn)入U(xiǎn)buntu的終端,如下圖所示。
PS:同一個(gè)Linux發(fā)行版可以啟動(dòng)多個(gè)實(shí)例,共享其中的文件。另外,WSL中的Ubuntu,安裝程序的方式與正常安裝的Ubuntu是完全一樣的,使用sudo apt install即可在線安裝任何程序。
5. 提權(quán)到root用戶
在默認(rèn)情況下登錄WSL的是普通用戶,如果想切換到root用戶,一開始是不行的,因?yàn)閞oot用戶的密碼沒(méi)有設(shè)置,所以首先需要使用下面的命令設(shè)置root用戶的密碼。
- sudo passwd root
設(shè)置完密碼后,可以使用su命令提權(quán)。每次重新啟動(dòng)WSL,仍然是普通用戶,都需要用su命令切換到root用戶。
6. Windows訪問(wèn)WSL
WSL與VMWare不同,WSL屬于Windows的子系統(tǒng),不是虛擬機(jī),所以執(zhí)行效率要比VMWare快很多。
不過(guò)不管是WSL、還是VMware,都會(huì)涉及到與宿主機(jī)(Windows)交互的問(wèn)題。首先來(lái)看看Windows如何訪問(wèn)WSL中的目錄。
由于WSL是Windows的子系統(tǒng),都是一個(gè)體系的好辦事,所以可以直接用下面的地址就可以訪問(wèn):
- \\wsl$\Ubuntu-20.04
其中\(zhòng)\wsl$是前綴,后面的Ubuntu-20.04就是在PowerShell中使用wsl -l命令列出的本地Linux發(fā)行版的名稱。如果只使用\\wsl$,那么會(huì)顯示所有的Linux發(fā)行版,雙擊即可進(jìn)入某個(gè)發(fā)行版,看到的目錄結(jié)構(gòu)如下圖所示。
這些都是Ubuntu下的文件和目錄。不過(guò)隨便點(diǎn)擊某個(gè)目錄,發(fā)現(xiàn)有的目錄根本無(wú)法進(jìn)入(無(wú)權(quán)訪問(wèn)),即使有權(quán)進(jìn)入,也無(wú)法創(chuàng)建文件或目錄。所以需要在WSL中執(zhí)行下面的命令將要訪問(wèn)的目錄的權(quán)限設(shè)置為有權(quán)訪問(wèn)這些目錄的用戶,如root。
- sudo chown -R root /home/mydir
- sudo chmod 777 /home/mydir
如果要遞歸設(shè)置某一個(gè)目錄的權(quán)限,可以使用-R命令行參數(shù),如下:
- sudo chmod -R 777 /home/mydir
現(xiàn)在就可以在Windows下愉快地訪問(wèn)WSL中的/home/mydir目錄了。
PS:為了方便與WSL交互,可以通過(guò)\\wsl$列出所有的Linux發(fā)行版,然后通過(guò)右鍵菜單將某個(gè)Linux發(fā)行版映射成邏輯盤符。
7. 通過(guò)WSL訪問(wèn)Windows
在WSL中訪問(wèn)Windows就更簡(jiǎn)單了,可以在WSL中進(jìn)入/mnt目錄,WSL會(huì)自動(dòng)掛載Windows中的所有盤符,都是可讀寫的,如下圖所示。讀者只要進(jìn)入相應(yīng)的盤符完成相應(yīng)操作即可。
8. 在Windows中直接執(zhí)行Linux的程序
WSL與Windows已經(jīng)完全打通,在Windows的PowerShell可以執(zhí)行Linux中的命令,例如,進(jìn)入PowerShell(推薦用Windows Terminal,可以顯示多個(gè)Windows PowerShell),直接輸入ls,可以以Linux的風(fēng)格列出Windows中的目錄和文件,如下圖所示。
也可以使用wsl命令執(zhí)行任何Linux命令,如wsl gcc a.c -o a
這行命令使用gcc將a.c編譯成可執(zhí)行文件a。然后使用wsl a可以運(yùn)行a。
9. 在Linux中執(zhí)行Windows命令
在Linux中同樣也可以執(zhí)行Windows的exe文件,例如,在Linux中進(jìn)入/mnt/c/windows中,執(zhí)行write.exe命令,就會(huì)在Windows中啟動(dòng)寫字板程序。要注意,盡管這里是在Linux中運(yùn)行,但由于運(yùn)行的是Windows的exe程序,所以并不區(qū)分大小寫。其實(shí)本質(zhì)上,并不是在Linux中運(yùn)行Windows程序,而是在WSL中向Windows發(fā)送要運(yùn)行的程序的消息(如exe文件的具體的路徑),最后還是由Windows執(zhí)行exe文件。
所以執(zhí)行write.exe和WRITE.exe的效果是一樣的。
10. VSCode遠(yuǎn)程調(diào)試VSCode
如果想利用WSL調(diào)試程序,可以在Windows中安裝VSCode,然后再安裝Remote-WSL插件,如下圖所示。
該插件允許在Windows版的VSCode中連接WSL環(huán)境,可以直接在VSCode的終端中輸入Linux命令。
安裝完這個(gè)插件,會(huì)在VSCode左側(cè)工具欄多一個(gè)圖標(biāo),點(diǎn)擊該圖標(biāo),就會(huì)進(jìn)入REMOTE EXPLORER頁(yè)面,會(huì)列出當(dāng)前機(jī)器上安裝了多少WSL Linux實(shí)例,下圖是我安裝的WSL Linux實(shí)例。點(diǎn)擊一個(gè)Linux實(shí)例,可以直接打開該實(shí)例中的目錄,然后就可以正常開發(fā)了。如果發(fā)現(xiàn)無(wú)法創(chuàng)建目錄或文件,請(qǐng)使用chmod命令設(shè)置目錄的權(quán)限。
11. 修改虛擬硬盤文件的默認(rèn)路徑
ext4.vhdx文件是WSL中的虛擬硬盤文件,如果不幸該文件安裝在了C盤,想將其移動(dòng)到其他硬盤,那么可以用下面的方法:
(1)輸入wsl -l --all -v命令,會(huì)得到WSL安裝的所有Linux發(fā)行版以及狀態(tài)和版本號(hào);
(2)使用下面的命令將ext4.vhdx文件導(dǎo)出為wsl-ubuntu20.04.tar文件,該文件放到D盤根目錄,讀者可以將其修改成任何路徑。
- wsl --export Ubuntu-20.04 d:\wsl-ubuntu20.04.tar
(3)使用下面的命令注銷Linux發(fā)行版
- wsl --unregister Ubuntu-20.04
(4)使用下面的命令導(dǎo)入ext4.vhdx文件
- wsl --import Ubuntu-20.04 d:\wsl-ubuntu20.04 d:\wsl-ubuntu20.04.tar --version 2
(5)重新注冊(cè)Ubuntu
12. 將WSL發(fā)行版遷移到另外一臺(tái)機(jī)器上
其實(shí)用上面的方法也可以進(jìn)行遷移,不過(guò)這里介紹另外一種比較簡(jiǎn)單的方法。
(1)將要遷移的WSL Linux發(fā)行版中的ext4.vhdx文件直接復(fù)制到另外一臺(tái)機(jī)器
(2)另外一臺(tái)機(jī)器按正常步驟安裝同樣的WSL Linux發(fā)行版
(3)使用wsl --shutdown命令關(guān)閉這臺(tái)機(jī)器中所有的WSL Linux發(fā)行版
(4)將ext4.vhdx文件直接覆蓋新安裝的WSL Linux發(fā)行版中同名文件
(5)使用wsl -d Ubuntu-20.04重新開啟WSL Linux發(fā)行版
哦了,現(xiàn)在就完全遷移過(guò)來(lái)了
另外,注意將上面步驟中的Ubuntu-20.04替換成自己機(jī)器上的WSL Linux發(fā)行版的名字。
本文轉(zhuǎn)載自微信公眾號(hào)「極客起源」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系極客起源公眾號(hào)。