WindowsからUbuntuを実行しています。
newFolder
Windows からルート ディレクトリにフォルダーを作成しC:\Users\myuser\AppData\Local\lxss\root\Newfolder
、Bash から実行すると、ls
作成されたばかりの新しいフォルダーが表示されません。
Windows からフォルダーとファイルを作成し、Bash からアクセスできるようにこれを修正するにはどうすればよいですか?
答え1
アップデート:
Windows 10バージョン1903以降では、WindowsからLinuxファイルにアクセスできます。そのため、 bashから\\wsl$\
実行したり、エクスプローラーのアドレスバーに直接入力したりできます。explorer.exe .
\\wsl$\
見るWindows 10 バージョン 1903 の WSL の新機能は何ですか?
もう一度警告しておきますが、AppData フォルダー経由で Linux ファイルにアクセスしないでください。
Windows 10の古いバージョンについては以下を参照してください
WSLルートファイルシステムのLinuxファイルは、NTFS拡張属性に格納されたPOSIX権限で特別に作成されます。これを実行するとfsutil file layout lxss\root
、$EA
ストリームそこにあります。Windowsから直接ファイルを作成すると、win32アプリはLinuxとそのファイルメタデータについて何も知らないため、混乱が生じます。
問題は、たとえば、Windows アプリ/ツールを使用してディストリビューション ルートの下にあるファイルを開いたり、作成したり、変更したりするときに発生します。ファイルは Windows ツールで作成されたため、ファイルには Linux ファイル メタデータ (権限、所有者、アクセス/更新のタイムスタンプなど) が含まれません。したがって、Linux (Linux ファイル メタデータのみを受け取ります) では、ファイルが空であると報告される可能性がある存在しないか、メタデータがあるが、そのメタデータがファイルの詳細を反映していないためにファイルの内容が破損している可能性があります。。
そのため、MSは大胆に警告している。
いかなる状況においても、Windows アプリ、ツール、スクリプト、コンソールなどを使用して Linux ファイルを作成および/または変更しないでください。
Windows から Linux ファイルを作成/変更すると、データが破損したり、Linux 環境が損傷したりする可能性が高くなり、ディストリビューションをアンインストールして再インストールする必要が生じます。
Linuxにのみ関連するファイルはWSLからのみ作成する必要があります。両方のシステムからアクセス可能なファイルを作成したい場合は、WSLルート外WSLからマウントポイント経由でアクセスすると/mnt
、/mnt/drive/path
Windowsファイルシステムで大文字と小文字の区別を維持したままファイルを作成したい場合は、
fsutil file setCaseSensitiveInfo <directory name> enable
フラグは次のように確認することもできます。fsutil file queryCaseSensitiveInfo <directory name>
答え2
Ubuntu でフォルダーを作成し、Windows からアクセスすることはできません。ただし、その逆は可能です。
で Windows のドライブにアクセスできます/mnt
。そうすると、ls /mnt
すべてのドライブが表示されます。つまり、/mnt/c は C ドライブのパスです。同様に、/mnt/c/Users/username/Desktop
Bash でデスクトップにアクセスできます。
Bashを使用して目的のパスに到達し、Windowsファイルとフォルダにアクセスします。Windowsファイルにすばやくアクセスする方法の詳細については、シンボリックリンクを使用してください。詳細はここで見つかりました
答え3
考え方を逆転させましょう。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!
ありがとう。