Windows 및 Linux 파일 시스템 간 작업

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

파일 시스템 전체의 파일 스토리지 및 성능

이를 수행하는 특별한 이유가 없으면 운영 체제 간에 작업하지 않는 것이 좋습니다. Linux 명령줄(Ubuntu, OpenSUSE 등)에서 작업하는 경우 가장 빠른 성능을 달성하려면 파일을 WSL 파일 시스템에 저장합니다. Windows 명령줄(PowerShell, 명령 프롬프트)에서 작업하는 경우 파일을 Windows 파일 시스템에 저장합니다.

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

  • Linux 파일 시스템 루트 디렉터리(\\wsl$\Ubuntu-18.04\home\<user name>\Project)를 사용합니다.
  • Windows 파일 시스템 루트 디렉터리를 사용하지 않는 경우: /mnt/c/Users/<user name>/Project$ 또는 C:\Users\<user name>\Project

WSL 명령줄의 파일 경로에 /mnt/가 보이면 현재 탑재된 드라이브에서 작업하고 있는 것입니다. 따라서 Windows 파일 시스템 C:/ 드라이브(C:\Users\<user name>\Project)는 WSL 명령줄에 탑재될 때 /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 명령줄(예: Ubuntu)에서 Windows 도구(예: notepad.exe)를 실행합니다.
  • Windows 명령줄(예: PowerShell)에서 Linux 도구(예: grep)를 실행합니다.
  • Linux와 Windows 간에 환경 변수를 공유합니다. (빌드 17063 이상)

Windows 명령줄에서 Linux 도구 실행

wsl <command>(또는 wsl.exe <command>)를 사용하여 CMD(Windows 명령 프롬프트) 또는 PowerShell에서 Linux 이진 파일을 실행합니다.

예:

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

이진 파일은 다음과 같은 방식으로 호출됩니다.

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

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

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

C:\temp> wsl sudo apt-get update

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

Linux 및 Windows 명령 혼합

PowerShell을 사용하여 Linux와 Windows 명령을 혼합하는 몇 가지 예제는 다음과 같습니다.

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

wsl ls -la | findstr "git"

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

C:\temp> dir | wsl grep git

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

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

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

ls -la Linux 명령을 사용하여 /proc/cpuinfo Linux 파일 시스템 경로에 있는 파일을 나열하려면 PowerShell을 다음과 같이 사용합니다.

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

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

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

Linux에서 Windows 도구 실행

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

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

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

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

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

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

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

ls -la | findstr.exe foo.txt

Windows 도구는 파일 확장명을 포함하고, 파일 대/소문자와 일치하며, 실행 파일이어야 합니다. 일괄 처리 스크립트가 포함된 비실행 파일이 있습니다. dir과 같은 CMD 기본 명령은 cmd.exe /C 명령을 사용하여 실행할 수 있습니다.

예를 들어 다음을 입력하여 Windows 파일 시스템의 C:\ 디렉터리에 있는 콘텐츠를 나열합니다.

cmd.exe /C dir

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

ping.exe www.microsoft.com

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

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 이전에서는 PATH만 WSL에서 액세스할 수 있는 Windows 환경 변수였습니다(이를 통해 WSL 아래에서 Win32 실행 파일을 시작할 수 있었음). WSLENV는 17063부터 지원됩니다. WSLENV는 대/소문자를 구분합니다.

WSLENV 플래그

WSLENV에서 4개의 플래그를 사용하여 환경 변수가 변환되는 방법에 영향을 줄 수 있습니다.

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가 사용하도록 다시 설정됩니다.