
因此,我目前正在 Windows 10 工作站上設定和設定 WSL,以便我可以在 Windows 上使用一些非常有用的命令列工具。現在,在 WSL 和 Git-Bash 中,您都可以存取 PC 上的所有磁碟機和分割區以及所有檔案(您的使用者可以存取),但路徑不同。假設我有一個temp
目錄,其中包含一些文件
tree C:\Temp
C:\TEMP
├───tempfile1.txt
├───tempfile2.txt
└───tempfile3.txt
然後當我打開 Git-Bash (使用這SO Q&A)在C:\Temp
目錄中執行pwd
指令我看到路徑為
/c/Temp
但奇怪的是,當我在 Git-Bash 中執行ls
指令時/
,我看不到c
目錄,也沒有mnt
目錄。
現在到 WSL,當我Open Linux Shell here
透過 Windows 資源管理器中的右鍵單擊上下文功能表並運行pwd
它時,它會顯示路徑
/mnt/c/Temp
所以我的問題是:Windows 中的「/」目錄是什麼以及在哪裡?這些只是「模擬」根目錄的兩種不同方式嗎?
編輯:
Windows 版本:Windows 10 企業版版本 1903(內部版本 18362.267)
WSL 版本:1809(內部版本 17763)(截至撰寫本文時的最新版本)
答案1
Git-Bash 是一個典型的 Windows 程序,並且具有相同的功能。它被C:\
視為其根目錄。
然而,您的 WSL 有所不同。我不確定它是容器還是虛擬機,但無論如何,它絕對不是典型的 Windows 程式。
它仍然在 Windows 上運行,但在 WSL 中運行的任何內容本質上都將自己視為在 Linux 上運行,而不是在 Windows 上運行。這使得它遵循Linux標準,例如Linux的目錄結構。
這意味著,它有自己的根目錄,而不是C:\
,而是/
。該目錄的位置位於 AppData 中的某個位置,並且根據 WSL 的版本以及您是否使用 Ubuntu、OpenSUSE 還是其他任何版本而有所不同。
在 Linux 中,驅動器沒有字母。他們被給予掛載點。/
例如,對於 WSL,根是根分割區或資料夾的掛載點。並非所有內容/
都是相同的驅動器。例如,在我的筆記型電腦上,/home/
位於單獨的分割區上。
/mnt/
是Linux檔案結構中的掛載目錄。它適用於外部事物。
/mnt/c/
是你的C:\
。它必須是這樣的,因為 Linux 不提供磁碟機號碼。這是從 WSL 存取 Windows 檔案的正確且最優雅的方式。這就是為什麼 WSL 中的 bash 對於您的C:\
.
假設您有最常見的 WSL 發行版 (Ubuntu),您/
應該在這裡:
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
如果它不存在或您使用不同的發行版,請查看此處:
%LOCALAPPDATA%\Packages\
但請注意,Linux 處理檔案權限的方式與 Windows 非常不同。不要使用檔案總管等 Windows 工具在此執行任何操作。如果您需要在作業系統之間進行交互,請在 WSL 中進行。
答案2
只需在 bash 上使用此命令即可
cd //wsl.localhost/dir
我使用下面的命令進入我的 lampp 中的 htdocs
cd //wsl.localhost/Ubuntu/opt/lampp/htdocs/
答案3
WSL 的 / 資料夾位於 中,
C:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation
並且也可以作為網路資源在 或類似資料夾中找到,
\\wsl$\Ubuntu-18.04
具體取決於您為 WSL 安裝的 Linux 發行版。
對於 git bash 它位於C:\Program Files\Git
您始終可以透過輸入explorer.exe .
git bash 找到任何資料夾的真實位置,而 wsl 都會.
為您轉換路徑並將其傳遞給您執行的 Windows 應用程式。
話雖這麼說,您不應該/
在應用程式中透過 Windows 開啟這些模擬資料夾的文件,因為它們可能無法正確讀取文件,尤其是使用 WSL 讀取文件時。
這些程式正在為您模擬 Unix 檔案系統,而無需建立具有隔離 CPU 和記憶體分配的虛擬機器。它們只是像普通應用程式一樣與 Windows 共用。 (WSLv2 除外,它使用 Windows 10 Pro Hyper-V 運行完整的 VM)
/c
或位置/mnt/c
是網路安裝,非常類似於在 Windows 中映射網路磁碟機Z:
並假裝其為本機磁碟。
GIT bash 和 WSL 正在掛載您的 Windows 根驅動器,就好像它們是網路資源一樣。在Linux中,您將磁碟機掛載到a,/folder
因為沒有磁碟機號碼的概念。
如果您願意,可以告訴 WSL 以與 git bash 相同的方式安裝磁碟機。
在 wsl 類型中編輯/etc/wsl.conf
文件
並添加以下內容:
[automount]
root = /
儲存檔案並從 Windows 登出並再次登入。
現在,當您啟動 WSL 時,它將具有與本機硬碟的 git bash 相同的路徑。
另外,請記住,它們正在模擬 Linux 作業系統使用的檔案系統,但它們做得併不完美,而且它們的方式也不同。
例如,Unix檔案系統對檔案有權限,git bash會自動偵測「SHOULD BE」和執行檔並新增+x屬性。 WSL 在這方面做得不好,通常只會讓所有內容都可執行。