私はWindowsのサブシステムとしてLinuxを使用しています。
bash端末を介してファイルを生成する際に問題があります。コマンドを実行するtouch foo.txt
とls -l foo.txt
。すべてのアクセス権が有効になり、変更できません。
-rwxrwxrwx foo.txt
解決策はありますか?
また、0750権限を持つファイルを生成するためにCプログラムを作成しようとしましたが、まだ同じ問題が発生します。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main() {
umask(0);
int fd = open("foo.txt", O_RDONLY | O_CREAT | O_EXCL, 0750);
if(fd < 0) perror("foo.txt");
close(fd);
}
プログラムをコンパイルした後:
-rwxrwxrwx foo.txt
ところで、仮想マシンでLinuxを使用するとうまくいきます。
ベストアンサー1
バラよりこのWSL文書Windows ドライブと WSL 間の権限をマップする方法に関する情報。デフォルトでは、ファイルに対するWindows権限が表示され、chmodは実際には多くのことを行いません。
しかし運転はできるメタデータサポートとしてインストールすると、WSLはWindows権限ではなくメタデータにある権限を適用します。これにより、WSLはLinux権限をWindowsドライブ上のファイルにマップできます。
メタデータサポートを使用してWindowsドライブを自動的にマウントするには:
/etc/wsl.conf
WSLインスタンスで編集または作成- 次の行を追加します。
[automount] enabled = true options = "metadata,umask=22,fmask=11"
- WSLインスタンスの終了
wsl --terminate <distroname>
PowerShellまたはcmdを使用してWSLインスタンスを終了します。- WSLインスタンスの再起動
それからtouch
結果は.rw-r--r--
あり、コード結果は期待される結果.rwxr-x---
(750)です。
少なくとも、私はWSL2 / Ubuntu 20.04インスタンス(テストアプリケーションを含む)でテストして検証しました。
さらに、WSL2 は WSL1 と比較して Windows ドライブでパフォーマンスが非常に低下します。このドライブでファイル集約的な操作を実行している場合は、可能であればWSL1インスタンスを使用してください。または、WSL2でext4 fsを使用してください。