在 Windows 中安裝 WSL 2

還記得我大學畢業沒多久,剛踏進資訊業界的公司時,有一幕讓我印象很深刻…

那就是公司裡幾乎所有人都拿 MacBook (Pro)。

蔡逼八的我當然是好奇的問了一下公司裡面的前輩們,為什麼都拿 Mac。

前輩:「因為 Mac 比較好做開發啊」

於是隔天我就跟媽媽去全國電子買了人生第一台 MacBook,分期兩年,感謝媽媽,沒有讓我輸在起跑點。

但…正在看此篇文章的你可能會想問,Windows 在開發上是不是不好用?事實上這部分真的見仁見智,如果你是開發微軟的 C#,那 Windows 應該是首選。

但就我個人從蔡逼八到現在沒那麼菜逼八的經驗來說,從開發角度來看。

Windows 真的比較難用。

Windows 是全世界最多人使用的作業系統,市佔率高達 8 成,因此毫不意外的,也就成為駭客攻擊對象的首選,這導致 Windows 的權限控管非常嚴格,拿來做開發,常會遇到莫名其妙的坑。

所以別再說什麼 Mac 不會中毒了,其實只是駭客懶得打而已,投資報酬率太低

但那都是過去式了,微軟在近幾年對開源的態度可以說是非常積極。

而 WSL,就是微軟大力擁抱開源的一個產物。

WSL,全名 Windows Subsystem for Linux,讓你可以在 Windows 中裝一個 Linux 的子系統,以 Linux 的環境在 Windows 上進行開發。

2021_07_14_19_24_39_60eec97767846.jpg
在 Windows 上使用 oh my zsh,只有讚可以形容

在 Windows 上安裝 WSL 2


想要在 Windows 上使用 WSL,必須要先開啟 BIOS 中的虛擬化技術 (AMD 為 SVM,Intel 為 VT-x)
然後在「控制台」→「 程式集」→「開啟或關閉 Windows 功能」中,勾選其中兩項功能「Windows 子系統 Linux 版」「虛擬機器平台」。按下確定後,系統會提示需要重新開機。

2021_07_14_19_24_49_60eec981c6158.jpg
勾選後,按下確定重新開機

重新開機後,至微軟官方網站下載 WSL 2 的更新套件並執行。
然後開啟 PowerShell 輸入指令,將 WSL 的安裝版本設定為 2。

wsl --set-default-version 2

開啟 Microsoft Store 的 Ubuntu 下載頁面,並進行安裝。

Microsoft Store 上提供多種 Ubuntu 發行版本,例如 18.04 或是 20.04,上面提供的 Ubuntu 下載連結不帶版本號,會自動安裝建議的 LTS  (Long-term support)版本。
如果想升級到下一個  LTS 版本,可以使用 do-release-upgrade 這個指令。
詳請可以閱讀官方維基

安裝完成之後,點擊左下角的開始,應該就可以看到 Ubuntu 的 ICON。

2021_07_14_19_25_02_60eec98e08f15.jpg
點擊 Ubuntu 的 ICON,開始使用 WSL

點下去就會開啟熟悉的 Bash Terminal,等待安裝完成,並設定帳號與密碼。

2021_07_14_19_25_13_60eec9995e3c4.jpg
設定帳號與密碼,方便之後使用 sudo  相關指令 

設定好就可以在 Windows 中使用 Linux 的環境啦!

WSL 2 安裝好之後,可以開啟 PowerShell 確認 WSL 的版本。

wsl --list --verbose

WSL 使用的注意事項

  • 使用 WSL 時,Windows 的 C:\D:\ 路徑會變成 /mnt/c/mnt/d
  • 可以使用檔案總管瀏覽 WSL 的目錄,打開檔案總管然後輸入路徑 \\wsl$
  • WSL 有自己的 IP。在 WSL 裡面的服務,無法使用 localhost 連線。
  • VSCode 有一個套件 Remote - WSL,讓你可以在 WSL 中使用 VSCode 開啟專案,此時 VSCode 就會使用 WSL 的環境變數,通常安裝好 WSL,開啟 VSCode 就會自動提示並安裝這個套件。
  • 建議別把開發的專案放在 /mnt/c/mnt/d 底下,也就是 Windows 的 C 槽與 D 槽,會有一定的延遲,如果專案包含 git,開啟速度會很慢,而且 Windows 的換行符號是 CRLF,不是 git 預設的 LF。可以參考官方的說明文件,比較 WSL 1 與 WSL 2

停用 WSL 中的 WINDOWS 環境變數。 (12 月 18 日新增)

WSL 預設會包含 Windows 的 PATH,所以在 WSL 中輸入指令 echo $PATH,你會看到超長一大串環境變數,這一大串包含 WSL 與 Windows 的環境變數。

如果想關閉共用 PATH,可以按照下面的步驟關閉,但是只要關閉就無法在 WSL 中使用指令用 VS Code 開啟檔案,建議不要移除

新增 wsl.conf 這個檔案,預設不會有,但建議可以先檢查是否有此檔案。

sudo touch /etc/wsl.conf

編輯 wsl.conf,補上設定,停用加入 Windows 的 PATH。

[interop]
appendWindowsPath = false

之後重新開啟 WSL,輸入 echo $PATH 應該就不會看到超長一大串了,wsl.conf 其他相關設定可參考 WSL 命令和啟動設定

 

附註:Windows Store 有一款 Windows Terminal,可以開啟 PowerShell 與 WSL 的 Bash  或是 Z shell。

使用 Oh My Zsh


在 Mac 中,使用 iTerm 2 + Oh My Zsh 的體驗非常棒,在 Linux 中同樣也可以使用 Oh My Zsh。

首先 Ubuntu Terminal 起手式,先更新套件。

sudo apt update && sudo apt upgrade

再來安裝 Z shell。

sudo apt install zsh

再來就可以安裝 Oh My Zsh,根據官方安裝文件,你可以選用 curl、wget 與 fetch 來安裝,我們這裡使用 wget。

sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安裝好之後,重新開啟 WSL,就可以使用 Oh My Zsh 了。

2021_07_14_19_25_34_60eec9ae71dd0.jpg
Oh My Zsh 有許多好用的套件可以使用,可謂開發神器

Oh My Zsh 中首推下方這三個非常好用的套件。

  • autojump:紀錄你平常 cd 的目錄並給予權重,之後可以使用指令快速切換目錄。
  • zsh-autosuggestions:紀錄打過的指令,會根據你打的字給提示。
  • zsh-syntax-highlighting:高亮指令,正確的指令會顯示綠色,找不到的指令會顯示紅色。

使用 Homebrew on Linux


如果你很習慣 Mac 上的套件管理工具 Homebrew ,想要在 Linux 中使用的 Homebrew 的話,Homebrew 其實有 Linux 版本, Homebrew on Linux

Homebrew on Linux 雖然功能上跟 Homebrew 大致相同,但畢竟 Homebrew 原本就是設計給 Mac 使用,所以部分功能和套件並不支援。

此外,Ubuntu 中已經有套件管理工具 APT,所以 Homebrew on Linux 並沒有非常推薦安裝。

不過 APT 有蠻多套件版本都很舊,例如 composer 甚至只有 1.X 版本,Homebrew 的套件相對來說都很新,要選擇 APT 還是 Homebrew,就看各位習慣哪一種囉~

首先先用 APT 安裝 Homebrew on Linux 需要的套件。

sudo apt-get install build-essential procps curl file git

安裝 Homebrew。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安裝好之後還需要將 Homebrew 加入環境變數中,有兩個路徑。

  • /home/linuxbrew/.linuxbrew/bin
  • /home/linuxbrew/.linuxbrew/sbin

由於剛剛裝了 Oh My Zsh,我們可以編輯 ~/.zshrc 這個檔案來修改環境變數,在 .zshrc 中修改以下這句。

# export PATH=$HOME/bin:/usr/local/bin:$PATH

將註解移除,並加上 Homebrew 的路徑。

export PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$Home... (後面省略)

重新開啟 Terminal,就可以使用 Homebrew on Linux。

2021_07_14_19_25_48_60eec9bc6f0b8.jpg
在 Windows 上用 Homebrew

參考資料


sharkHead
written by
sharkHead

後端工程師, PHP 基金會每月 5 鎂小額贊助人 稍微擅長 PHP、Python 與 Google Search,偶爾寫寫 TypeScript 對於逗號後面必須加空格有著絕對的堅持