標籤:

WSL 使用指南——03 避免的坑

WSL 使用指南——03 避免的坑

WSL和Win10共享同一套埠,如果出現兩者監聽同一個埠的情況,Windows主系統的程序擁有更高的優先順序。也就是說,如果我們在WSL運行需要監聽埠的程序,必須確認該埠沒有被Windows主系統內的任何程序佔用。如果出現衝突,請參閱軟體相關文檔修改默認配置。

例如,在WSL中安裝SSH Server時,埠衝突將會導致WSL不能按照預期通過SSH連接登陸,但只需修改默認WSL的SSH監聽埠,問題便迎刃而解。

眾所周知,SSH的默認連接埠是22,但是微軟在Win10中內置了SSH Server For Windows並佔用了默認的22埠,因此如果要在WSL中開啟SSH Server,我們必須修改WSL中的默認SSH監聽埠。

——WSL Guideline 06-配置SSH

後台運行Linux程序

當我們在WSL運行後台程序時(如在命令後加&),後台程序會隨著WSL所有Session的關閉而停止運行(每一個Session對應任務管理器中一個Bash進程,如下圖)。即,如果我們把WSL的Bash窗口全部關閉的話,WSL的後台程序會被強制停止。這個機制雖然能夠避免WSL內程序計劃外運行,但是在執行後台任務時WSL命令行圖標常駐在任務欄會破壞桌面的簡潔……

為了取消WSLBash窗口圖標常駐在任務欄,我們可以開啟一個窗口隱藏Bash進程常駐在後台,這樣後台程序就不會因為可見的WSLBash窗口關閉而停止運行了————因為一直都有不可見的WSL命令行常駐在後台~~啟動隱藏窗口方法如下:

  1. 打開PowerShell
  2. 執行以下命令

powershell.exe -WindowStyle Hidden -c bash

之後你會在任務管理器發現這個Bash後台進程,你的Linux程序可以後台運行了。為了省去每次開機輸入命令的麻煩,我們可以把此命令添加到任務計劃

如果你的WSL安裝了多個Linux發行版,上文命令最後的參數bash只能打開WSL默認的Linux發行版Bash窗口(通常為Ubuntu)。因此,為了打開確定的Linux發行版Bash窗口,我們需要將最後的參數bash修改為我們安裝的Linux發行版名。假設我們同時安裝了Ubuntu發行版和Kali Linux發行版,那麼執行

powershell.exe -WindowStyle Hidden -c ubuntu

將打開UbuntuBash進程,然後執行

powershell.exe -WindowStyle Hidden -c kali

將打開Kali LinuxBash進程,但是兩者的Bash進程顯示名稱相同,需要pid來區分對應的Linux發行版。

關於後台運行Linux程序,在通過腳本提高效率這篇文章中會有進一步的應用。

文件系統

WSL和Windows主系統之間的文件系統是可以互相訪問的。

如果在WSL中訪問Windows系統的文件,可在根目錄下/mnt/看到對應Windows盤符字母的文件夾,通過這些文件夾即可訪問Windows的文件系統。

如果在Windows系統中訪問WSL的文件,可在Windows系統中找到已安裝Linux發行版的應用數據文件夾,所有Linux系統的數據都在那個文件夾(通過應用商店安裝的Linux發行版本質上也是一個應用)。Linux發行版的數據文件夾在C:Users{你的用戶名}AppDataLocalPackages{Linux發行版包名}LocalState
ootfs
路徑內,在rootfs文件夾內我們會看到在WSL中的根目錄。

確定Linux發行版包名可在上級文件夾Packages內搜索你安裝的Linux發行版名稱,如圖:

  • 註:在Windows下對WSL文件修改可能會造成許可權錯誤

下一步

  • 安裝桌面環境

本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名Wang Jiaxiang(包含鏈接:github.com/WangJiaxiang),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。如有任何疑問,請與我聯繫。

推薦閱讀:

Linux 中 rc.local、init.d、rc.x、init 這幾個文件(夾)各有什麼作用?啟動執行的腳本應該均放在 rc.local 中嗎?
深入理解 Linux 的 RCU 機制
以最簡單方式學習Linux
對於同樣的 C 語言代碼,為什麼 Mac OS X 上用 gcc 編譯運行的結果和其他系統不同?
linux練習

TAG:window10 | Linux |