私はWindowsからUbuntuを実行しています。
WindowsからルートディレクトリにnewFolder
というフォルダを作成するとC:\Users\myuser\AppData\Local\lxss\root\Newfolder
次に、ls
を実行すると、Bashから作成されたばかりの新しいフォルダーが表示されません。
これを修正して、Windowsからフォルダーとファイルを作成し、Bashからそれらにアクセスできるようにするにはどうすればよいですか?
Windows 10バージョン1903以降、\\wsl$\
を使用してWindowsからLinuxファイルにアクセスすることが可能です。したがって、bashからExplorer.exe .
を実行するか、エクスプローラーのアドレスバーに直接\\wsl$\
を入力できます。
Windows 10バージョン1903のWSLの新機能 を参照してください。
繰り返しになりますが、警告がまだあります AppDataフォルダーを介してLinuxファイルにアクセスしてはいけません!
古いバージョンのWindows10については、以下を参照してください
WSLルートファイルシステムのLinuxファイルは、NTFS拡張属性に格納されているPOSIXアクセス許可を使用して特別に作成されます。 fsutil file layout lxss\root
を実行すると、そこに $EA
stream があることがわかります。 Windowsから直接ファイルを作成すると、win32アプリはLinuxとそのファイルメタデータについて何も知らないため、混乱することになります。
この問題は、たとえば、Windowsアプリ/ツールを使用してディストリビューションルートの下のファイルを開いたり、作成したり、変更したりした場合に発生します。ファイルはWindowsツールで作成されているため、ファイルにはLinuxファイルのメタデータがありません。 (例:権限、所有者、アクセス/更新のタイムスタンプなど)。したがって、Linux(Linuxファイルのメタデータのみを受信する)にとって、ファイルは空として報告される場合がありますが、そうではない場合があります存在するか、メタデータが含まれている可能性がありますが、そのメタデータがファイルの詳細を反映していないため、ファイルの内容が破損している可能性があります。
したがって、MSは大胆に次のように警告しています。
いかなる状況においても、Windowsアプリ、ツール、スクリプト、コンソールなどを使用してLinuxファイルを作成および/または変更しないでください。
WindowsからLinuxファイルを作成/変更すると、データが破損したり、Linux環境が損傷したりする可能性があり、ディストリビューションをアンインストールして再インストールする必要があります。
Linuxにのみ関連するファイルは、WSLからのみ作成する必要があります。両方のシステムにアクセスできるファイルを作成する場合は、それらを作成しますWSLルートの外部そして/mnt
のような/mnt/drive/path
のマウントポイントを介してWSLからアクセスします。
Windowsファイルシステムでファイルを作成したいが、ケースの感性を保持したい場合は、
fsutil file setCaseSensitiveInfo <directory name> enable
フラグはfsutil file queryCaseSensitiveInfo <directory name>
で確認することもできます
Ubuntuでフォルダを作成し、Windowsからそれらにアクセスすることはできません。しかし、あなたは反対のことをすることができます。
/mnt
でWindowsのドライブにアクセスできます。 ls /mnt
を実行すると、すべてのドライブが表示されます。したがって、/ mnt/cはCドライブのパスです。同様に、/mnt/c/Users/username/Desktop
を使用すると、Bashのデスクトップにアクセスできます。
したがって、Bashを使用して目的のパスに到達し、Windowsのファイルとフォルダーにアクセスするだけです。 Windowsファイルにすばやくアクセスするための詳細については、シンボリックリンクを使用してください。詳細は ここにあります
考えを逆にする:Windowsアプリとツールを使用してファイルを作成し、Bashからそれらにアクセスする場合は、Windowsファイルシステムでそれらのファイルなどを作成し、Bashからアクセス/コピーします。
PowerShellでファイルを作成し、Bashを呼び出して作成したファイルをホームフォルダーにコピーし、bashを呼び出してファイルの内容を書き込む例を次に示します。
PS C:\dev\temp> Set-Content ./hello.txt -Value "Hello, World!" -Encoding ASCII
PS C:\dev\temp> cat .\hello.txt
Hello, World!
PS C:\dev\temp> bash -c "cp /mnt/c/dev/temp/hello.txt ~/"
PS C:\dev\temp> bash -c "cat /mnt/c/dev/temp/hello.txt"
Hello, World!
HTH。