觀察到一個很奇怪的問題,

從 Windows 裡面在這個路徑下面存一些文件

C:Users用戶名AppDataLocalPackagesCanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgscLocalState
ootfs

文件的更改能在 Linux 裡面立刻看到

但是新建的文件卻不能,必須 find -name 掃描一遍才能看到

現在是拿 Visual Studio Code 打開了一個 Linux 下面的項目,改的代碼立刻就能看到,但是新添加的文件卻看不到。


WSL 的哪個文件夾裡面用了 NTFS ADS 的魔法去存 Linux 的特有屬性(比如 Mode),而一般 win32 程序是不會設置那些 ADS 的,於是在那裡面創建文件實際上就等同破壞 Linux 的文件系統


你可以在Windows下存儲文件,然後在wsl中使用/mnt/盤符/路徑 訪問

你也可以在1903更新發布後在Linux rootfs中存儲文件,Windows程序使用\wsl$Ubuntuunix路徑 訪問

唯獨不正確的操作是找到AppData裏rootfs文件夾直接用Windows程序修改,因為這裡面的文件在NTFS中除了存儲文件內容,Windows文件元數據,還存儲unix文件元數據(比如rwx許可權,unix用戶組和用戶),你創建的文件並不具有這樣的屬性,因此會導致許可權混亂。

詳見:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

1903(19H1,20195月更新)的改動:https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-windows-10-version-1903/


不建議直接修改linux子系統的文件,需要等到19h1開發的9p服務之後再訪問基於9p共享的$wsl路徑。


現在不要在資源管理器裏直接訪問WSL文件,正確的做法是直接把項目建在Win的文件系統裏,在WSL裏可以從/mnt下面找到


你是測試人員嗎?

不要亂搞我給你說,不要把事情搞大


推薦閱讀:
相關文章