Linux와 Windows의 상호 운용성Windows interoperability with Linux

WSL(Linux용 Windows 하위 시스템)은 Windows와 Linux 간의 통합을 지속적으로 향상시키고 있습니다.The Windows Subsystem for Linux (WSL) is continuously improving integration between Windows and Linux. 다음을 수행할 수 있습니다.You can:

  • Linux 명령줄(즉, Ubuntu)에서 Windows 도구(즉, notepad.exe)를 실행합니다.Run Windows tools (ie. notepad.exe) from a Linux command line (ie. Ubuntu).
  • Windows 명령줄(즉, PowerShell)에서 Linux 도구(즉, grep)를 실행합니다.Run Linux tools (ie. grep) from a Windows command line (ie. PowerShell).
  • Linux와 Windows 간에 환경 변수를 공유합니다.Share environment variables between Linux and Windows. (빌드 17063 이상)(Build 17063+)

참고

크리에이터스 업데이트(2017년 10월 빌드 16299) 또는 1주년 업데이트(2016년 8월 빌드 14393)를 실행하는 경우 이전 버전의 Windows 10으로 이동합니다.If you're running Creators Update (Oct 2017, Build 16299) or Anniversary Update (Aug 2016, Build 14393), jump to the Earlier versions of Windows 10.

Windows 명령줄에서 Linux 도구 실행Run Linux tools from a Windows command line

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

예:For example:

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

이진 파일은 다음과 같은 방식으로 호출됩니다.Binaries invoked in this way:

  • 현재 CMD 또는 PowerShell 프롬프트와 동일한 작업 디렉터리를 사용합니다.Use the same working directory as the current CMD or PowerShell prompt.
  • WSL 기본 사용자로 실행합니다.Run as the WSL default user.
  • 호출 프로세스 및 터미널과 동일한 Windows 관리 권한을 사용합니다.Have the same Windows administrative rights as the calling process and terminal.

wsl(또는 wsl.exe) 뒤의 Linux 명령은 WSL에서 실행되는 명령처럼 처리됩니다.The Linux command following wsl (or wsl.exe) is handled like any command run in WSL. sudo, 파이핑, 파일 리디렉션과 같은 작업이 작동합니다.Things such as sudo, piping, and file redirection work.

sudo를 사용하여 기본 Linux 배포를 업데이트하는 예제:Example using sudo to update your default Linux distribution:

C:\temp> wsl sudo apt-get update

이 명령을 실행하면 기본 Linux 배포 사용자 이름이 나열되고 암호를 입력하라는 메시지가 표시됩니다.Your default Linux distribution user name will be listed after running this command and you will be asked for your password. 암호가 올바르게 입력되면 배포에서 업데이트를 다운로드합니다.After entering your password correctly, your distribution will download updates.

Linux 및 Windows 명령 혼합Mixing Linux and Windows commands

PowerShell을 사용하여 Linux와 Windows 명령을 혼합하는 몇 가지 예제는 다음과 같습니다.Here are a few examples of mixing Linux and Windows commands using PowerShell.

ls -la Linux 명령을 사용하여 파일을 나열하고 findstr PowerShell 명령을 사용하여 "git"이 포함된 단어에 대한 결과를 필터링하려면 명령을 다음과 같이 결합합니다.To use the Linux command ls -la to list files and the PowerShell command findstr to filter the results for words containing "git", combine the commands:

wsl ls -la | findstr "git"

dir PowerShell 명령을 사용하여 파일을 나열하고 grep Linux 명령을 사용하여 "git"이 포함된 단어에 대한 결과를 필터링하려면 명령을 다음과 같이 결합합니다.To use the PowerShell command dir to list files and the Linux command grep to filter the results for words containing "git", combine the commands:

C:\temp> dir | wsl grep git

ls -la Linux 명령을 사용하여 파일을 나열하고 > out.txt PowerShell 명령을 사용하여 해당 목록을 "out.txt"라는 텍스트 파일로 출력하려면 명령을 다음과 같이 결합합니다.To use the Linux command ls -la to list files and the PowerShell command > out.txt to print that list to a text file named "out.txt", combine the commands:

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

wsl.exe에 전달된 명령은 수정되지 않고 WSL 프로세스에 전달됩니다.The commands passed into wsl.exe are forwarded to the WSL process without modification. 파일 경로는 WSL 형식으로 지정해야 합니다.File paths must be specified in the WSL format.

ls -la Linux 명령을 사용하여 /proc/cpuinfo Linux 파일 시스템 경로에 있는 파일을 나열하려면 PowerShell을 다음과 같이 사용합니다.To use the Linux command ls -la to list files in the /proc/cpuinfo Linux file system path, using PowerShell:

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

ls -la Linux 명령을 사용하여 C:\Program Files Windows 파일 시스템 경로에 있는 파일을 나열하려면 PowerShell을 다음과 같이 사용합니다.To use the Linux command ls -la to list files in the C:\Program Files Windows file system path, using PowerShell:

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

Linux에서 Windows 도구 실행Run Windows tools from Linux

WSL에서 [tool-name].exe를 사용하여 WSL 명령줄에서 Windows 도구를 직접 실행할 수 있습니다.WSL can run Windows tools directly from the WSL command line using [tool-name].exe. 정의합니다(예: notepad.exe).For example, notepad.exe.

이 방식으로 실행되는 애플리케이션에는 다음과 같은 속성이 있습니다.Applications run this way have the following properties:

  • 작업 디렉터리를 WSL 명령 프롬프트로 유지합니다(대부분의 경우에 해당, 예외는 아래에 설명되어 있음).Retain the working directory as the WSL command prompt (for the most part -- exceptions are explained below).
  • WSL 프로세스와 동일한 권한을 갖습니다.Have the same permission rights as the WSL process.
  • 활성 Windows 사용자로 실행합니다.Run as the active Windows user.
  • CMD 프롬프트에서 직접 실행한 것처럼 Windows 작업 관리자에 표시됩니다.Appear in the Windows Task Manager as if directly executed from the CMD prompt.

WSL에서 실행되는 Windows 실행 파일은 네이티브 Linux 실행 파일과 비슷하게 처리됩니다(파이핑, 리디렉션 및 백그라운드 작업이 예상대로 작동).Windows executables run in WSL are handled similarly to native Linux executables -- piping, redirects, and even backgrounding work as expected.

ipconfig.exe Windows 도구를 실행하려면 grep Linux 도구를 사용하여 "IPv4" 결과를 필터링하고 cut Linux 도구를 사용하여 Linux 배포(예: Ubuntu)에서 열 필드를 제거합니다.To run the Windows tool ipconfig.exe, use the Linux tool grep to filter the "IPv4" results, and use the Linux tool cut to remove the column fields, from a Linux distribution (for example, Ubuntu) enter:

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

Windows와 Linux 명령이 혼합된 예제를 사용해 보겠습니다.Let's try an example mixing Windows and Linux commands. Linux 배포(즉, Ubuntu)를 열고, touch foo.txt라는 텍스트 파일을 만듭니다.Open your Linux distribution (ie. Ubuntu) and create a text file: touch foo.txt. 이제 ls -la Linux 명령을 사용하여 파일 및 해당 만들기 세부 정보를 직접 나열하고 findstr.exe Windows PowerShell 도구를 사용하여 결과를 필터링하여 foo.txt 파일만 결과에 표시합니다.Now use the Linux command ls -la to list the direct files and their creation details, plus the Windows PowerShell tool findstr.exe to filter the results so only your foo.txt file shows in the results:

ls -la | findstr.exe foo.txt

Windows 도구는 파일 확장명을 포함하고, 파일 대/소문자와 일치하며, 실행 파일이어야 합니다.Windows tools must include the file extension, match the file case, and be executable. 일괄 처리 스크립트가 포함된 비실행 파일이 있습니다.Non-executables including batch scripts. dir과 같은 CMD 기본 명령은 cmd.exe /C 명령을 사용하여 실행할 수 있습니다.CMD native commands like dir can be run with cmd.exe /C command.

예를 들어 다음을 입력하여 Windows 파일 시스템의 C:\ 디렉터리에 있는 콘텐츠를 나열합니다.For example, list the contents of your Windows files system C:\ directory, by entering:

cmd.exe /C dir

또는 ping 명령을 사용하여 에코 요청을 microsoft.com 웹 사이트에 보냅니다.Or use the ping command to send an echo request to the microsoft.com website:

ping.exe www.microsoft.com

매개 변수는 수정되지 않은 Windows 이진 파일에 전달됩니다.Parameters are passed to the Windows binary unmodified. 예를 들어 다음 명령은 notepad.exe에서 C:\temp\foo.txt를 엽니다.As an example, the following command will open C:\temp\foo.txt in notepad.exe:

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

또한 다음과 같은 작업도 수행합니다.This will also work:

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

Windows와 WSL 간의 환경 변수 공유Share environment variables between Windows and WSL

WSL 및 Windows는 WSL에서 실행되는 Windows 및 Linux 배포를 연결하기 위해 만든 WSLENV라는 특수 환경 변수를 공유합니다.WSL and Windows share a special environment variable, WSLENV, created to bridge Windows and Linux distributions running on WSL.

WSLENV 변수의 속성은 다음과 같습니다.Properties of WSLENV variable:

  • 공유되며, Windows 및 WSL 환경 모두에 있습니다.It is shared; it exists in both Windows and WSL environments.
  • Windows와 WSL 간에 공유할 환경 변수의 목록입니다.It is a list of environment variables to share between Windows and WSL.
  • Windows 및 WSL에서 제대로 작동하도록 환경 변수의 형식을 지정할 수 있습니다.It can format environment variables to work well in Windows and WSL.
  • WSL과 Win32 간의 흐름을 지원할 수 있습니다.It can assist in the flow between WSL and Win32.

참고

17063 이전에서는 PATH만 WSL에서 액세스할 수 있는 Windows 환경 변수였습니다(이를 통해 WSL 아래에서 Win32 실행 파일을 시작할 수 있었음).Prior to 17063, only Windows environment variable that WSL could access was PATH (so you could launch Win32 executables from under WSL). WSLENV는 17063부터 지원됩니다.Starting in 17063, WSLENV begins being supported. WSLENV는 대/소문자를 구분합니다.WSLENV is case sensitive.

WSLENV 플래그WSLENV flags

WSLENV에서 4개의 플래그를 사용하여 환경 변수가 변환되는 방법에 영향을 줄 수 있습니다.There are four flags available in WSLENV to influence how the environment variable is translated.

WSLENV 플래그:WSLENV flags:

  • /p - WSL/Linux 스타일 경로 및 Win32 경로 간의 경로를 변환합니다./p - translates the path between WSL/Linux style paths and Win32 paths.
  • /l - 환경 변수가 경로 목록임을 나타냅니다./l - indicates the environment variable is a list of paths.
  • /u - Win32에서 WSL을 실행하는 경우에만 이 환경 변수가 포함되어야 함을 나타냅니다./u - indicates that this environment variable should only be included when running WSL from Win32.
  • /w - WSL에서 Win32를 실행할 때만 경우에만 이 환경 변수가 포함되어야 함을 나타냅니다./w - indicates that this environment variable should only be included when running Win32 from WSL.

플래그는 필요에 따라 결합할 수 있습니다.Flags can be combined as needed.

WSLENV 값을 미리 정의된 다른 환경 변수의 연결로 설정하고, 각 환경 변수에 접미사로 슬래시를 붙이고 그 뒤에 플래그를 추가하여 값을 변환하고 스크립트를 사용하여 변수를 전달하는 방법을 지정하는 FAQ 및 예제를 포함하여 WSLENV에 대해 자세히 알아보세요.Read more about WSLENV, including FAQs and examples of setting the value of WSLENV to a concatenation of other pre-defined environment vars, each suffixed with a slash followed by flags to specify how the value should be translated and passing variables with a script. 또한 이 문서에는 WSL과 Win32 간에 GOPATH을 공유하도록 구성된 Go 프로그래밍 언어를 사용하여 개발 환경을 설정하는 예제가 포함되어 있습니다.This article also includes an example for setting up a dev environment with the Go programming language, configured to share a GOPATH between WSL and Win32.

상호 운용성 사용 안 함Disable interoperability

사용자는 다음 명령을 루트로 실행하여 단일 WSL 세션에 대해 Windows 도구를 실행하는 기능을 사용하지 않도록 설정할 수 있습니다.Users may disable the ability to run Windows tools for a single WSL session by running the following command as root:

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

Windows 이진 파일을 다시 사용하도록 설정하려면 모든 WSL 세션을 종료하고 bash.exe를 다시 실행하거나 다음 명령을 루트로 실행합니다.To re-enable Windows binaries, exit all WSL sessions and re-run bash.exe or run the following command as root:

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

interop를 사용하지 않도록 설정하는 것은 WSL 세션 간에 유지되지 않습니다. 새 세션이 시작되면 interop가 사용하도록 다시 설정됩니다.Disabling interop will not persist between WSL sessions -- interop will be enabled again when a new session is launched.

이전 버전의 Windows 10Earlier versions of Windows 10

이전 Windows 10 버전의 상호 운용성 명령에는 몇 가지 차이점이 있습니다.There are several differences for the interoperability commands on earlier Windows 10 versions. 크리에이터스 업데이트(2017년 10월 빌드 16299) 또는 1주년 업데이트(2016년 8월 빌드 14393) 버전의 Windows 10을 실행하는 경우 최신 Windows 버전으로 업데이트하는 것이 좋습니다. 그러나 최신 버전으로 업데이트할 수 없는 경우 아래에 몇 가지 interop 차이점에 대해 간략히 설명했습니다.If you're running a Creators Update (Oct 2017, Build 16299), or Anniversary Update (Aug 2016, Build 14393) version of Windows 10, we recommend you update to the latest Windows version, but if that's not possible, we have outlined some of the interop differences below.

요약:Summary:

  • bash.exewsl.exe로 바뀌었습니다.bash.exe has been replaced with wsl.exe.
  • wsl.exe에는 단일 명령을 실행하기 위한 -c 옵션이 필요하지 않습니다.-c option for running a single command isn't needed with wsl.exe.
  • Windows 경로가 WSL $PATH에 포함됩니다.Windows path is included in the WSL $PATH.
  • interop를 사용하지 않도록 설정하는 프로세스는 변경되지 않습니다.The process for disabling interop is unchanged.

Linux 명령은 Windows 명령 프롬프트 또는 PowerShell에서 실행할 수 있지만, 초기 Windows 버전의 경우 bash 명령을 사용해야 합니다.Linux commands can be run from the Windows Command Prompt or from PowerShell, but for early Windows versions, you man need to use the bash command. 예:For example:

C:\temp> bash -c "ls -la"

입력, 파이핑, 파일 리디렉션과 같은 작업이 예상대로 작동합니다.Things such as input, piping, and file redirection work as expected.

bash -c에 전달된 WSL 명령은 수정되지 않고 WSL 프로세스에 전달됩니다.The WSL commands passed into bash -c are forwarded to the WSL process without modification. 파일 경로는 WSL 형식으로 지정해야 하며, 관련 문자를 이스케이프 방식으로 처리해야 합니다.File paths must be specified in the WSL format and care must be taken to escape relevant characters. 예제:Example:

C:\temp> bash -c "ls -la /proc/cpuinfo"

또는...Or...

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

이전 버전의 Windows 10에서 WSL 배포를 통해 Windows 도구를 호출하는 경우 디렉터리 경로를 지정해야 합니다.When calling a Windows tool from a WSL distribution in an earlier version of Windows 10, you will need to specify the directory path. 예를 들어 WSL 명령줄에서 다음을 입력합니다.For example, from your WSL command line, enter:

/mnt/c/Windows/System32/notepad.exe

WSL에서는 이러한 실행 파일이 네이티브 Linux 실행 파일과 비슷한 방식으로 처리됩니다.In WSL, these executables are handled similar to native Linux executables. 즉, 디렉터리를 Linux 경로에 추가하고 명령 간의 파이프가 예상대로 작동합니다.This means adding directories to the Linux path and piping between commands works as expected. 예:For example:

export PATH=$PATH:/mnt/c/Windows/System32

또는Or

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

Windows 이진 파일은 파일 확장명을 포함하고, 파일 대/소문자와 일치하며, 실행 파일이어야 합니다.The Windows binary must include the file extension, match the file case, and be executable. 일괄 처리 스크립트 및 dir과 같은 명령이 포함된 비실행 파일은 /mnt/c/Windows/System32/cmd.exe /C 명령을 사용하여 실행할 수 있습니다.Non-executables including batch scripts and command like dir can be run with /mnt/c/Windows/System32/cmd.exe /C command. 예:For example:

/mnt/c/Windows/System32/cmd.exe /C dir

추가 리소스Additional resources