WSL上のファイルやディレクトリをWindows(つまりWindows上のアプリ)から直接操作することはサポートされていません。Windows上のエディタを使用したい場合は、Windows上の通常の領域でファイルの作成や編集を行い、"/mnt/c"経由でアクセスしてください。
WSL File System Support – Windows Subsystem for Linux
なぜ、そうなるのかは、上のブログに書いています。適当にななめ読みしただけですが、ざっくりに解説します。
VolFsはWindowsから触るべからず。
まず、WindowsとLinuxではファイルシステムの考え方が全く異なります。Cygwinなどは無理矢理Windows上でLinuxっぽく動作させていましたが、かなり制限がある方法でした。WSLの目的は、通常のLinuxをWindows上で動かすことですので、無理矢理解釈する程度ではうまくいきません。そこで、WSL側でシステムコールをするときに使われるVFSに対して、通常のLinuxファイルシステムを提供するVolFsを用意しました(他に、DrvFs(後述)やTmpFs、ProcFs等があるようです)。
VolFsは通常のLinux用ファイルシステム、いってみればext4やBtrfsで見られるようなファイルシステムを提供します。これらはNTFSにはない機能、モード(NTFSのACLと異なる形式)、inode、所有グループ、POSXIなシンボリックリンク、POSIXな名前付きパイプ、":"や"?"等が含まれるファイル名、大文字小文字の完全な区別等々が含まれます。こうすることで、通常のLinuxと同じように処理をすることができます。
といっても、VolFs用にディスクのパーティションを区切ってフォーマットするとか、仮想ディスクのような物を用意するとかはしませんでした。そのようにした場合、容量が固定化されたり、無駄な空き領域が出来たり、二段階アクセスにより遅くなったりと問題が出るからです。そこで、VolFsはNTFS上にある領域をそのままバックエンドとして使うことにしました。ファイルデータ自体はそのまま置くことができますし、使えない文字はエスケープして別名にするなどで対応します。そして、モードや所有グループなどはNTFSの拡張ファイル属性(EA、Extended file attribute, xattr)に書き込むようにしたのです。
通常のファイルのように置くようにしたため、Windows上からも通常のファイルとして扱えるように見えるかも知れません。しかし、(特殊なファイル操作をしない限り)これらの拡張ファイル属性は見えませんし、編集もしません。そのため、Windows上からファイルを操作すると、モードなどの情報が書かれた拡張ファイル属性の情報が吹き飛び、Linuxからはモードなどが不明なファイルとなってしまうと言うことです。
このように、VolFsはNTFSをバックエンドとして使っているだけであり、ファイルとして見えるからと言って、操作しても良いというわけではありません。
Windowsとのやり取りはDrvFsを使え!
これではあまりにも不便と言うことで、MicrosoftはDrvFsという別のファイルシステムを用意しました。これは、通常のNTFS領域、つまりはCドライブをマウントするという物です。こちらは拡張ファイル属性を使わず、NTFSのACLからモード等を決定づけてるという手段をとっています(Windows 10 1803以降、参考: Chmod/Chown WSL Improvements – Windows Command Line Tools For Developers)。
言ってしまえば、CygwinやMSYSなどが取っていた方法に近いです。所有者やモードなどの情報はPOSIXに準拠する動作ではありません。他にもLinuxファイルシステムとしては色々と制限があるのですが、データのやり取りをするという点では、十分とも言えます。この領域のファイルはLinuxとWindowsのどちらからアクセスして変更等を行っても、その動作がサポートされています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/26 03:35