Windows와 Linux의 상호 운용성을 위한 windows 하위 시스템Windows Subsystem for Linux interoperability with Windows

업데이트를 업데이트 합니다.Updated for Fall Creators Update.
작성자 업데이트 또는 기념일 업데이트를 실행 하는 경우 작성자/기념일 업데이트 섹션으로 이동 합니다.If you're running Creators Update or Anniversary Update, jump to the Creators/Anniversary Update section.

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

  1. Linux 콘솔에서 Windows 이진 파일을 호출 합니다.Invoke Windows binaries from the Linux console.
  2. Windows 콘솔에서 Linux 이진 파일을 호출 합니다.Invoke Linux binaries from a Windows console.
  3. Windows 참가자는 17063 +를 빌드합니다 . Linux와 Windows 간의 환경 변수를 공유 합니다.Windows Insiders Builds 17063+ Share environment variables between Linux and Windows.

Windows와 WSL 간에 원활한 환경을 제공 합니다.This delivers a seamless experience between Windows and WSL. 기술 세부 정보는 Wsl 블로그에 있습니다.Technical details are on the WSL blog.

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

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

이러한 방식으로 호출 되는 이진 파일은 다음과 같습니다.Binaries invoked in this way:

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

이는 아래와 같이 함수의 반환값을 데이터 프레임으로 바로 변환하는 데 사용할 수 있음을 나타냅니다.For example:

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

다음 wsl.exe Linux 명령은 wsl에서 실행 되는 명령 처럼 처리 됩니다.The Linux command following wsl.exe is handled like any command run in WSL. Sudo, 배관 및 파일 리디렉션과 같은 작업을 수행 합니다.Things such as sudo, piping, and file redirection work.

Sudo를 사용 하는 예제:Example using sudo:

C:\temp> wsl sudo apt-get update
[sudo] password for username:
Hit:1 https://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 https://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]

WSL 및 Windows 명령의 혼합 예:Examples mixing WSL and Windows commands:

C:\temp> wsl ls -la | findstr "foo"
-rwxrwxrwx 1 root root     14 Sep 27 14:26 foo.bat

C:\temp> dir | wsl grep foo
09/27/2016  02:26 PM                14 foo.bat

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.

경로의 예:Example with paths:

C:\temp> wsl ls -la /proc/cpuinfo
-r--r--r-- 1 root root 0 Sep 28 11:28 /proc/cpuinfo

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

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

WSL은를 사용 하 여 [binary name].exewsl 명령줄에서 직접 Windows 이진 파일을 호출할 수 있습니다.WSL can invoke Windows binaries directly from the WSL command line using [binary name].exe. notepad.exe )을 입력합니다.For example, notepad.exe. Windows 실행 파일을 더 쉽게 실행 하기 위해 windows 경로는 is is 크리에이터 $PATH 업데이트의 Linux에 포함 되어 있습니다.To make Windows executables easier to run, Windows path is included in the Linux $PATH in Fall Creators Update.

이러한 방식으로 실행 되는 응용 프로그램에는 다음과 같은 속성이 있습니다.Applications run this way have the following properties:

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

예:Example:

$ notepad.exe

WSL에서 실행 되는 Windows 실행 파일은 기본 Linux 실행 파일 (파이프, 리디렉션 및 backgrounding 작업)과 유사 하 게 처리 됩니다.Windows executables run in WSL are handled similarly to native Linux executables -- piping, redirects, and even backgrounding work as expected.

파이프를 사용 하는 예제:Examples using pipes:

$ ipconfig.exe | grep IPv4 | cut -d: -f2
172.21.240.1
10.159.21.24

Mixed Windows 및 WSL 명령을 사용 하는 예제:Example using mixed Windows and WSL commands:

$ ls -la | findstr.exe foo.txt

$ cmd.exe /c dir
<- contents of C:\ ->

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

예를 들면 다음과 같습니다.Examples:

$ cmd.exe /C dir
<- contents of C:\ ->

$ PING.EXE www.microsoft.com
Pinging e1863.dspb.akamaiedge.net [2600:1409:a:5a2::747] with 32 bytes of data:
Reply from 2600:1409:a:5a2::747: time=2ms

매개 변수는 수정 되지 않은 상태로 Windows 이진에 전달 됩니다.Parameters are passed to the Windows binary unmodified.

예를 들어 다음 명령은에서 C:\temp\foo.txt notepad.exe열립니다.As an example, the following commands will open C:\temp\foo.txt in notepad.exe:

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

Windows 응용 프로그램을 사용 하 여 volfs ( /mnt/<x>아래에 있지 않은 파일)에 있는 파일을 수정 하는 것은 지원 되지 않습니다.Modifying files located on VolFs (files not under /mnt/<x>) with a Windows application in WSL is not supported.

기본적으로 WSL은 Windows 이진 파일의 작업 디렉터리를 현재 WSL 디렉터리로 유지 하려고 하지만 작업 디렉터리가 VolFs에 있는 경우에는 인스턴스 만들기 디렉터리를 대체 합니다.By default, WSL tries to keep the working directory of the Windows binary as the current WSL directory, but will fall back on the instance creation directory if the working directory is on VolFs.

예를 들어 는 처음에에서 C:\temp 시작 되 고 현재 wsl 디렉터리가 사용자의 홈으로 변경 됩니다. wsl.exeAs an example; wsl.exe is initially launched from C:\temp and the current WSL directory is changed to the user’s home. 사용자 notepad.exe 의 홈 디렉터리에서를 호출 하는 경우 wsl은 notepad.exe 작업 C:\temp 디렉터리로 자동으로 되돌아갑니다.When notepad.exe is called from the user’s home directory, WSL automatically reverts to C:\temp as the notepad.exe working directory:

C:\temp> wsl
/mnt/c/temp/$ cd ~
~$ notepad.exe foo.txt
~$ ls | grep foo.txt
~$ exit

exit
C:\temp>dir | findstr foo.txt
09/27/2016  02:15 PM                14 foo.txt

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

Windows 참가자 빌드 17063 이상에서 사용할 수 있습니다.Available in Windows Insider builds 17063 and later.

17063 이전에는 wsl에서 액세스할 수 있는 Windows 환경 변수만이 PATH 에 액세스할 수 있습니다. 따라서 wsl에서 Win32 실행 파일을 시작할 수 있습니다.Prior to 17063, only Windows environment variable that WSL could access was PATH (so you could launch Win32 executables from under WSL).

17063부터 wsl 및 windows 공유 WSLENV에서 wsl에서 실행 되는 Windows 및 Linux 배포판을 연결 하기 위해 만든 특수 환경 변수입니다.Starting in 17063, WSL and Windows share WSLENV, a special environment variable created to bridge Windows and Linux distros running on WSL.

WSLENV속성:Properties of WSLENV:

  • 공유 됩니다. 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.

에서 WSLENV 사용할 수 있는 네 가지 플래그는 환경 변수를 변환 하는 방법에 영향을 줍니다.There are four flags available in WSLENV to influence how that environment variable is translated.

WSLENVflagsWSLENV 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.

Interop 사용 안 함Disable Interop

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

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

Windows 이진 파일을 다시 활성화 하려면 모든 WSL 세션을 종료 하 고 bash를 다시 실행 하거나 다음 명령을 루트로 실행 합니다.To reenable Windows binaries either 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.

작성자 업데이트 및 기념일 업데이트Creators Update and Anniversary Update

Interop 환경 이전 버전의 작성자 업데이트는 최신 interop 환경과 유사 하지만 몇 가지 주요 차이점이 있습니다.While the interop experience pre-Fall Creators Update is similar to more recent interop experiences, there are a handful of major differences.

요약하면 다음과 같습니다.To summarize:

  • bash.exe는 더 이상 사용 되지 않으며 wsl.exe로 대체 되었습니다.bash.exe has been deprecated and replaced with wsl.exe.
  • -c에서 단일 명령을 실행 하 wsl.exe는 옵션은 필요 하지 않습니다.-c option for running a single command isn't needed with wsl.exe.
  • Windows 경로는 WSL에 포함 되어 있습니다.$PATHWindows path is included in the WSL $PATH

Interop를 사용 하지 않도록 설정 하는 프로세스는 변경 되지 않습니다.The process for disabling interop is unchanged.

Windows 명령줄에서 WSL 호출Invoking WSL from the Windows Command Line

Linux 이진 파일은 Windows 명령 프롬프트 또는 PowerShell에서 호출할 수 있습니다.Linux binaries can be invoked from the Windows Command Prompt or from PowerShell. 이러한 방식으로 호출 되는 이진 파일에는 다음과 같은 속성이 있습니다.Binaries invoked in this way have the following properties:

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

예:Example:

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

이러한 방식으로 호출 되는 Linux 명령은 다른 Windows 응용 프로그램과 마찬가지로 처리 됩니다.Linux commands called in this way are handled like any other Windows application. 입력, 파이프 및 파일 리디렉션과 같은 항목은 예상 대로 작동 합니다.Things such as input, piping, and file redirection work as expected.

예를 들면 다음과 같습니다.Examples:

C:\temp>bash -c "sudo apt-get update"
[sudo] password for username:
Hit:1 https://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 https://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]
C:\temp> bash -c "ls -la" | findstr foo
C:\temp> dir | bash -c "grep foo"
C:\temp> bash -c "ls -la" > out.txt

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"
-r--r--r-- 1 root root 0 Sep 28 11:28 /proc/cpuinfo

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

WSL에서 Windows 이진 파일 호출Invoking Windows binaries from WSL

Linux 용 Windows 하위 시스템은 WSL 명령줄에서 직접 Windows 이진 파일을 호출할 수 있습니다.The Windows Subsystem for Linux can invoke Windows binaries directly from the WSL command line. 이러한 방식으로 실행 되는 응용 프로그램에는 다음과 같은 속성이 있습니다.Applications run this way have the following properties:

  1. 아래에 설명 된 시나리오를 제외 하 고 작업 디렉터리를 WSL 명령 프롬프트로 유지 합니다.Retain the working directory as the WSL command prompt except in the scenario explained below.
  2. bash.exe 프로세스와 동일한 권한 권한을 갖습니다.Have the same permission rights as the bash.exe process.
  3. 활성 Windows 사용자로 실행 합니다.Run as the active Windows user.
  4. CMD 프롬프트에서 직접 실행 한 것 처럼 Windows 작업 관리자에 표시 됩니다.Appear in the Windows Task Manager as if directly executed from the CMD prompt.

예:Example:

$ /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. 예를 들면 다음과 같습니다.Examples:

$ export PATH=$PATH:/mnt/c/Windows/System32
$ notepad.exe
$ ipconfig.exe | grep IPv4 | cut -d: -f2
$ ls -la | findstr.exe foo.txt
$ cmd.exe /c dir

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.

예를 들면 다음과 같습니다.Examples:

$ /mnt/c/Windows/System32/cmd.exe /C dir
$ /mnt/c/Windows/System32/PING.EXE www.microsoft.com

매개 변수는 수정 되지 않은 상태로 Windows 이진에 전달 됩니다.Parameters are passed to the Windows binary unmodified.

예를 들어 다음 명령은에서 C:\temp\foo.txt notepad.exe열립니다.As an example, the following commands will open C:\temp\foo.txt in notepad.exe:

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

Windows 응용 프로그램을 사용 하 여 volfs ( /mnt/<x>아래에 있지 않은 파일)에 있는 파일은 수정할 수 없습니다.Modifying files located on VolFs (files not under /mnt/<x>) with a Windows application is not supported. 기본적으로 WSL은 Windows 이진 파일의 작업 디렉터리를 현재 WSL 디렉터리로 유지 하려고 하지만 작업 디렉터리가 VolFs에 있는 경우에는 인스턴스 만들기 디렉터리를 대체 합니다.By default, WSL attempts to keep the working directory of the Windows binary as the current WSL directory, but will fall back on the instance creation directory if the working directory is on VolFs.

예를 들어 는 처음에에서 C:\temp 시작 되 고 현재 wsl 디렉터리가 사용자의 홈으로 변경 됩니다. bash.exeAs an example; bash.exe is initially launched from C:\temp and the current WSL directory is changed to the user’s home. 사용자 notepad.exe 의 홈 디렉터리에서를 호출 하는 경우 wsl은 notepad.exe 작업 C:\temp 디렉터리로 자동으로 되돌아갑니다.When notepad.exe is called from the user’s home directory, WSL automatically reverts to C:\temp as the notepad.exe working directory:

C:\temp> bash
/mnt/c/temp/$ cd ~
~$ notepad.exe foo.txt
~$ ls | grep foo.txt
~$ exit
exit

C:\temp> dir | findstr foo.txt
09/27/2016  02:15 PM                14 foo.txt