저는 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를 사용하세요.