Win10 WSL使用記錄


  筆者最近添置了一台新設備,預裝 win10 系統。在之前的設備上,筆者偶爾會使用 ubuntu 系統,故而使用的是 win 8 + ubuntu 的雙系統模式。之前也對關於雙系統相關的內容做過記錄,關於 windows 雙系統的空間划分和引導相關的內容可參見Windows環境下安裝雙系統總結,關於 win + ubuntu 的引導等大致內容可參考Windows下設置Ubuntu引導項

  面對 win10 的新環境時,筆者面對的選擇在於是否也像之前的設備那樣安裝雙系統。由於筆者是一名學生,所以安裝的 Linux 系統主要用於學習 Linux 的使用( 學習命令行等 Linux 相關的內容 )以及進行簡單的程序編寫( 會用到 gcc/g++ 以及其他 Linux 程序 ),而其他相關工作如 word/ppt 之類的工作實際上還是需要 windows 平台上進行的,從而也就免不了在兩個系統之間進行頻繁的切換操作。而 win10 系統上提供了另一個選擇,也就是 WSL( Windows subsystem for Linux ). WSL 實際可以為使用者提供一個 Linux bash on win10 的體驗過程,可以理解為在 win10 上為用戶打開了一個 Linux 中的終端窗口。而實際上,這一點可以滿足很多對 Linux 系統的需求,包括但不限於學習 Linux 命令行的基本操作,學習 shell,使用 Linux 自帶的一些軟件,以及作為接觸實際 Linux 系統的跳板等等。當然虛擬機也是一個可行的選項,不過 WSL 的優勢在於更快的響應速度和更少的資源占用。

  

  WSL 安裝

  WSL 的安裝過程在微軟官方的文檔中有很清楚的描述,安裝過程可以參考 Windows Subsystem for Linux Installation Guide for Windows 10。目前支持的版本為 WSL 和 WSL2,其中后者要求 win10 系統版本較高,目前筆者安裝的是 WSL1. 關於 WSL 的介紹在官方文檔中非常詳細,有需要的推薦閱讀 Windows Subsystem for Linux Documentation。目前 windows store 中支持的 Linux 系統包括 Ubuntu,Kali 和 Debian 等,用戶可根據個人需求安裝。

  在完成 WSL 的安裝后,可通過 win + s 打開 win10 的搜索界面,輸入安裝的 Linux 版本名字從而找到對應的程序,確定運行即可打開對應的 bash 窗口,其中第一次登陸時會花費一定的時間進行初始化並要求創立賬號,而后續的使用過程中打開的過程都會很快。

 

  WSL 與 win10 之間的文件訪問

  有基礎的 Linux 背景可以知道,Linux 系統使用 EXT 文件系統,而 windows 使用的是 NTFS 文件系統,兩者無法兼容。比如在之前筆者安裝雙系統的情況下,windows 系統由於不支持對 EXT 系統的讀寫故而是無法直接對磁盤上的 Linux 系統保存的文件進行修改的,而 Linux 由於支持 NTFS 的訪問,故而筆者在 Linux 系統下可以直接對 windows 系統下的一些文件進行簡單操作。在 WSL 中,同樣存在兩種不同文件系統的問題。這里分為 WSL 訪問 win10 文件和 win10 訪問 WSL 文件分別進行描述。

  WSL --> win10

  由於 Linux 是支持對 NTFS 格式文件系統的訪問的,故而在 WSL 終端中可以對整個磁盤上的系統進行訪問。其中,win10 系統對應位於 /mnt 目錄下,如筆者 win10 存在 c 盤和 d 盤兩個系統盤,故而在 /mnt 目錄下存在 c 和 d 兩個文件夾分別與 windows 系統上的分區對應,對於上述兩個目錄中文件的操作即直接對應於對 win10 中文件的操作。與雙系統中 Linux 可以直接對所有文件修改不同,使用 WSL 提供的終端進行文件訪問時需要遵循 win10 的權限管理,故而有些文件的訪問和修改需要使用 root 權限。

  

  win10 --> WSL

  在較老的 WSL 版本中,是不推薦(或者說禁止)使用 windows 環境下的工具(包括文件資源管理器)對 WSL 系統中的文件進行直接的修改/創建等操作的( 老版本的 WSL 系統的文件位於某個不想讓用戶找到的目錄中,雖然看起來與正常 windows 目錄一致,但由於其對 Linux 的支持故而存在一定的不同)。推薦的方式是將 WSL 和 win10 需要共享編輯和使用的文件放在 win10 的文件系統中( 在 WSL 環境下就是位於 /mnt/c/ 和 /mnt/d/ 文件目錄下),這樣 WSL 和 Win10 系統均可以正確的對上述共享的文件進行處理,反之則不行。這是因為 Linux 本身支持對 NTFS 格式文件的訪問能力,故而 WSL 對 windows 環境下文件能夠正確的進行訪問和修改。而絕大部分的 windows 應用是沒有考慮對 WSL 中使用的 EXT 格式的支持的,從而直接使用 windows 系統的應用在 WSL 的目錄中進行文件修改可能使得文件的相關屬性被損壞。一個比較常見的現象就是使用 WSL 提供的終端查詢文件時是無法顯示直接通過 windows 應用在 WSL 目錄下創建的文件的(屬性不全或被損壞從而無法識別)。相關的內容在微軟的博客中也有記錄,可以參考Do not change Linux files using Windows apps and tools

  在新版本的 WSL 中,win10 系統可以直接通過文件資源管理器去訪問 WSL 相關的文件目錄,打開文件資源管理器,在路徑欄輸入路徑 \\wsl$\ 即可看到安裝好的 WSL 版本對應的目錄。新版本的 WSL 會在啟動時建立一個 9P protocol file server,使得所有基於 windows 系統應用的對 WSL 文件的訪問均通過該 server 完成。對應的,該 server 保證對 WSL 中文件系統的支持,從而使得目前可以直接通過 windows 系統的應用對 WSL 系統中的文件進行訪問和操作。(注意,用戶應該基於 \\wsl$\ 路徑訪問對應的文件。同時,從原理上也可以看得到,直接使用 windows 系統應用修改 WSL 中文件時,需要保證對應的 WSL 終端正在運行,否則不存在 server 支持正確的訪問操作。)

  

  在 WSL 提供的終端中,也可以通過命令 explorer.exe . 命令在當前目錄打開 win10 的文件資源管理器。

    explorer.exe .        //通過 win10 的文件資源管理器打開當前目錄

  上述內容也可以參考微軟的文章What’s new for WSL in Windows 10 version 1903?

 

  WSL 命令執行

  在新版本的 WSL 中,可支持在 windows PowerShell/CMD 環境下執行 WSL 中命令,也支持在 WSL 環境下運行 windows 命令。

  在 CMD 或 PowerShell 環境下執行 WSL 中的命令只需通過 wsl + command 的形式,其中 command 為對應的在 WSL 中執行程序和任務的命令。

    wsl ls -l           //列舉當前目錄下的文件的詳細信息
    wsl sudo rm xxx     //以 root 權限刪除當前目錄下的 xxx 文件    

  在 WSL 終端中,可通過 xxx.exe 的方式對 windows 環境中的相關應用程序進行調用,如在 WSL 終端中打開計算器程序,直接輸入 calc.exe 即可。

    calc.exe        //在 WSL 終端中執行 windows 計算器程序

  能夠在 WSL 終端中找到對應的 windows 可執行程序的方式是在終端的 PATH 路徑中加入了對應的 windows 可執行程序的目錄(看起來好像是把 windows 環境變量 PATH 直接加入了進來)。

  

 

   在實際使用中,也支持 windows 程序和 WSL 命令的混合使用,具體可以參考Windows interoperability with Linux

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM