다음을 통해 공유


Windows 및 Linux 파일 시스템에서 작업

Windows와 Linux 파일 시스템 간에 작업할 때 유의해야 할 여러 가지 고려 사항이 있습니다. Windows 및 Linux 기반 명령을 혼합하기 위한 상호 운용성 지원의 몇 가지 예제를 포함하여 이 가이드에서 몇 가지 사항을 설명했습니다.

파일 시스템 간 파일 스토리지 및 성능

특정 이유가 없는 경우 파일을 사용하여 운영 체제에서 작업하지 않는 것이 좋습니다. Linux 명령줄(Ubuntu, OpenSUSE 등)에서 작업하는 경우 가장 빠른 성능 속도를 위해 WSL 파일 시스템에 파일을 저장합니다. Windows 명령줄(PowerShell, 명령 프롬프트)에서 작업하는 경우 파일을 Windows 파일 시스템에 저장합니다.

예를 들어 WSL 프로젝트 파일을 저장하는 경우 다음과 같습니다.

  • Linux 파일 시스템 루트 디렉터리(/home/<user name>/Project)를 사용합니다.
  • Windows 파일 시스템 루트 디렉터리가 아닙니다: C:\Users\<UserName>\Project 또는 /mnt/c/Users/<UserName>/Project$

WSL 명령줄의 파일 경로에 표시 /mnt/ 되면 탑재된 드라이브에서 작업 중임을 의미합니다. 따라서 WSL 명령줄C:\Users\<user name>\Project에 탑재된 경우 Windows 파일 시스템 C:/ 드라이브(/mnt/c/Users/<user name>/Project$)는 다음과 같이 표시됩니다. 탑재된 드라이브에 프로젝트 파일을 저장할 수 있지만 드라이브에 \\wsl$ 직접 저장하면 성능 속도가 향상됩니다.

Windows 파일 탐색기에서 현재 디렉터리 보기

다음을 사용하여 명령줄에서 Windows 파일 탐색기를 열어 파일이 저장되는 디렉터리를 볼 수 있습니다.

explorer.exe .

또는 다음 명령을 사용할 수도 있습니다: powershell.exe /c start . 명령의 끝에 마침표를 추가하여 현재 디렉터리를 열어야 합니다.

Windows 파일 탐색기에서 사용 가능한 모든 Linux 배포판과 해당 루트 파일 시스템을 보려면 주소 표시줄에 다음을 입력합니다. \\wsl$

Windows 파일 탐색기에서 프로젝트 파일 보기

파일 이름 및 디렉터리의 대/소문자 구분 감도

대/소문자 구분은 대문자(FOO.txt) 및 소문자(foo.txt) 문자가 파일 이름 또는 디렉터리에서 고유하게 처리되는지(대/소문자 구분) 또는 동일하게 처리되는지(대/소문자 구분하지 않음)를 결정합니다. Windows 및 Linux 파일 시스템은 대/소문자를 다르게 처리합니다 - Windows는 대/소문자를 구분하지 않으며, Linux는 대/소문자를 구분합니다. 대/소문자 구분 조정 방법 문서에서 특히 WSL을 사용하여 디스크를 탑재할 때 대/소문자 민감도를 조정 하는 방법에 대해 자세히 알아봅니다.

Windows 및 Linux 명령 간의 상호 운용성

Windows 및 Linux 도구 및 명령은 WSL과 상호 교환하여 사용할 수 있습니다.

  • Linux 명령줄에서 Windows 도구(예: notepad.exe)를 실행합니다. Ubuntu).
  • Windows 명령줄에서 Linux 도구(예: grep)를 실행합니다. PowerShell).
  • Linux와 Windows 간에 환경 변수를 공유합니다. (빌드 17063 이상)

Windows 명령줄에서 Linux 도구 실행

Linux 바이너리를 Windows 명령 프롬프트(CMD) 또는 PowerShell에서 실행하려면 wsl <command> 또는 wsl.exe <command>을(를) 사용하십시오.

다음은 그 예입니다.

C:\temp> wsl ls -la
<- contents of C:\temp ->

이진 파일은 다음과 같이 호출됩니다.

  • 현재 CMD 또는 PowerShell 프롬프트와 동일한 작업 디렉터리를 사용합니다.
  • WSL 기본 사용자로 실행합니다.
  • 호출 프로세스 및 터미널과 동일한 Windows 관리 권한을 갖습니다.

Linux 명령 다음 wsl (또는 wsl.exe)은 WSL에서 실행되는 명령처럼 처리됩니다. sudo, 파이핑 및 파일 리디렉션과 같은 항목이 작동합니다.

sudo를 사용하여 기본 Linux 배포를 업데이트하는 예제:

C:\temp> wsl sudo apt-get update

이 명령을 실행하면 기본 Linux 배포 사용자 이름이 나열되고 암호를 묻는 메시지가 표시됩니다. 암호를 올바르게 입력하면 배포에서 업데이트를 다운로드합니다.

Linux 및 Windows 명령 혼합

다음은 PowerShell을 사용하여 Linux 및 Windows 명령을 혼합하는 몇 가지 예입니다.

Linux 명령을 ls -la 사용하여 파일을 나열하고 PowerShell 명령을 findstr 사용하여 "git"이 포함된 단어의 결과를 필터링하려면 다음 명령을 결합합니다.

wsl ls -la | findstr "git"

PowerShell 명령을 dir 사용하여 파일을 나열하고 Linux 명령을 grep 사용하여 "git"이 포함된 단어의 결과를 필터링하려면 다음 명령을 결합합니다.

C:\temp> dir | wsl grep git

Linux 명령을 ls -la 사용하여 파일을 나열하고 PowerShell 명령을 > out.txt 사용하여 해당 목록을 "out.txt"라는 텍스트 파일에 인쇄하려면 다음 명령을 결합합니다.

C:\temp> wsl ls -la > out.txt

전달된 명령은 수정 없이 WSL 프로세스로 wsl.exe 전달됩니다. 파일 경로는 WSL 형식으로 지정해야 합니다.

PowerShell을 사용하여 Linux 파일 시스템 경로ls -la에서 파일을 나열하기 위해 Linux 명령/proc/cpuinfo을 사용합니다.

C:\temp> wsl ls -la /proc/cpuinfo

Linux 명령을 ls -la 사용하여 PowerShell을 사용하여 Windows 파일 시스템 경로에 C:\Program Files 파일을 나열하려면 다음을 수행합니다.

C:\temp> wsl ls -la "/mnt/c/Program Files"

Linux에서 Windows 도구 실행

WSL은 .를 사용하여 [tool-name].exeWSL 명령줄에서 직접 Windows 도구를 실행할 수 있습니다. 예: notepad.exe.

이러한 방식으로 실행되는 애플리케이션에는 다음과 같은 속성이 있습니다.

  • WSL 명령 프롬프트로 작업 디렉터리를 유지합니다(대부분의 경우 예외는 아래에 설명되어 있습니다).
  • WSL 프로세스와 동일한 권한 권한을 갖습니다.
  • 활성 Windows 사용자로 실행합니다.
  • CMD 프롬프트에서 직접 실행된 것처럼 Windows 작업 관리자에 표시됩니다.

WSL에서 실행되는 Windows 실행 파일은 예상대로 파이핑, 리디렉션 및 백그라운드 작업과 같은 네이티브 Linux 실행 파일과 유사하게 처리됩니다.

Windows 도구를 실행하려면 Linux 도구를 ipconfig.exegrep 사용하여 "IPv4" 결과를 필터링하고 Linux 도구를 cut 사용하여 열 필드를 제거합니다. Linux 배포판(예: Ubuntu)에서 다음을 입력합니다.

ipconfig.exe | grep IPv4 | cut -d: -f2

Windows 및 Linux 명령을 혼합하는 예제를 살펴보겠습니다. Linux 배포판을 엽니다(예: Ubuntu) 그리고 텍스트 파일을 touch foo.txt 만듭니다. 이제 Linux 명령을 ls -la 사용하여 직접 파일 및 해당 만들기 세부 정보를 나열하고 Windows PowerShell 도구를 findstr.exe 사용하여 결과를 필터링하여 파일만 foo.txt 결과에 표시되도록 합니다.

ls -la | findstr.exe foo.txt

Windows 도구는 파일 확장자를 포함하고, 파일 대/소문자를 일치시키고, 실행 가능해야 합니다. 비실행 파일, 일괄 처리 스크립트를 포함한 CMD 네이티브 명령인 dircmd.exe /C 명령으로 실행할 수 있습니다.

예를 들어 다음을 입력하여 Windows 파일 시스템 C:\ 디렉터리의 내용을 나열합니다.

cmd.exe /C dir

또는 ping 명령을 사용하여 microsoft.com 웹 사이트에 에코 요청을 보냅니다.

ping.exe www.microsoft.com

매개 변수는 수정되지 않은 Windows 이진 파일에 전달됩니다. 예를 들어, 다음 명령어는 C:\temp\foo.txt을/를 notepad.exe에서 엽니다.

notepad.exe "C:\temp\foo.txt"

이 방법도 효과적입니다.

notepad.exe C:\\temp\\foo.txt

WSLENV를 사용하여 Windows와 WSL 간에 환경 변수 공유

WSL과 Windows는 WSL에서 실행되는 Windows 및 Linux 배포를 브리지하기 위해 만든 특수 환경 변수 WSLENV를 공유합니다.

변수의 WSLENV 속성:

  • 공유됩니다. Windows 및 WSL 환경 모두에 존재합니다.
  • Windows와 WSL 간에 공유할 환경 변수 목록입니다.
  • Windows 및 WSL에서 제대로 작동하도록 환경 변수의 서식을 지정할 수 있습니다.
  • WSL과 Win32 간의 흐름을 지원할 수 있습니다.

비고

17063 이전에는 WSL에서 액세스할 수 있는 Windows 환경 변수만 있었습니다 PATH (따라서 WSL 아래에서 Win32 실행 파일을 시작할 수 있음). 17063부터 WSLENV가 지원되기 시작합니다. WSLENV는 대/소문자를 구분합니다.

WSLENV 플래그

환경 변수가 변환되는 방식에 영향을 주는 데 사용할 수 있는 WSLENV 네 가지 플래그가 있습니다.

WSLENV 플래그:

  • /p - WSL/Linux 스타일 경로와 Win32 경로 사이의 경로를 변환합니다.
  • /l - 환경 변수가 경로 목록임을 나타냅니다.
  • /u - Win32에서 WSL을 실행하는 경우에만 이 환경 변수를 포함해야 임을 나타냅니다.
  • /w - WSL에서 Win32를 실행할 때만 이 환경 변수를 포함해야 임을 나타냅니다.

필요에 따라 플래그를 결합할 수 있습니다.

WSLENV에 대한 자세한 정보는 FAQ 및 설정 예제를 포함합니다. 여기에는 WSLENV 값을 슬래시로 구분된 플래그와 함께 미리 정의된 다른 환경 변수의 연결로 설정하는 방법, 그리고 스크립트를 통해 변수를 전달하는 방법이 포함됩니다. 이 문서에는 WSL과 Win32 간에 GOPATH를 공유하도록 구성된 Go 프로그래밍 언어를 사용하여 개발 환경을 설정하는 예제도 포함되어 있습니다.

상호 운용성 사용 안 함

사용자는 다음 명령을 루트로 실행하여 단일 WSL 세션에 대해 Windows 도구를 실행하는 기능을 사용하지 않도록 설정할 수 있습니다.

echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop

Windows 이진 파일을 다시 사용하도록 설정하려면 모든 WSL 세션을 종료하고 bash.exe 다시 실행하거나 다음 명령을 루트로 실행합니다.

echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop

interop를 사용하지 않도록 설정하면 WSL 세션 간에 유지되지 않습니다. 새 세션이 시작될 때 interop가 다시 활성화됩니다.