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