Windows와 Linux 상호 운용성에 대 한 Windows 하위 시스템Windows Subsystem for Linux interoperability with Windows

Fall Creators Update에 대 한 업데이트 합니다.Updated for Fall Creators Update.
크리에이터 스 업데이트 또는 1 주년 업데이트를 실행 하는 경우으로 이동 합니다 작성자/1 주년 업데이트 섹션합니다.If you're running Creators Update or Anniversary Update, jump to the Creators/Anniversary Update section.

Windows 하위 시스템에 대 한 WSL (Linux)는 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

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

다음 Linux 명령 wsl.exe 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 사용 하 여 WSL 명령줄에서 직접 Windows 이진 파일을 호출할 수 있습니다 [binary name].exe합니다.WSL can invoke Windows binaries directly from the WSL command line using [binary name].exe. notepad.exe )을 입력합니다.For example, notepad.exe. Linux에서 Windows 실행 파일을 더 쉽게 실행 하려면 Windows 경로가 포함 되어 $PATH Fall Creators Update에 있습니다.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. Windows 작업 관리자에서 표시 CMD 프롬프트에서 직접 실행 하는 경우.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

혼합 된 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 dir 실행할 수 있습니다 cmd.exe /C 명령입니다.CMD 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

VolFs에 있는 파일을 수정 (아래 하지 파일 /mnt/<x>)는 Windows WSL에서 응용 프로그램은 지원 되지 않습니다.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.

예를 들어; wsl.exe 에서 처음 시작 C:\temp 하며 현재 WSL 디렉터리 사용자의 홈으로 변경 됩니다.As 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 자동으로 되돌아갑니다 C:\temp notepad.exe 작업 디렉터리로: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 Insider 빌드 17063 이상에서 사용할 수 있습니다.Available in Windows Insider builds 17063 and later.

Windows 환경 변수 하나만 WSL 액세스할 수 있는 17063, 이전 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).

WSL 및 Windows 공유 17063부터 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.
  • WSL 및 Windows 간에 공유할 수 있는 환경 변수의 목록입니다.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.

WSLENV 플래그:WSLENV flags:

  • /p -Win32 및 WSL/Linux 스타일 경로 간의 경로 변환 합니다./p - translates the path between WSL/Linux style paths and Win32 paths.
  • /l -환경 변수가 경로 목록을 나타냅니다./l - indicates the environment variable is a list of paths.
  • /u -이 환경 변수만 포함 되어야 함을 WSL Win32에서 실행 하는 경우를 나타냅니다./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.exe를 다시 실행 하거나 루트로 다음 명령을 실행 합니다.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.

크리에이터 업데이트 및 1 주년 업데이트Creators Update and Anniversary Update

Interop 환경 사전 Fall Creators Update는 최신 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 명령줄에서 호출 WSLInvoking WSL from the Windows Command Line

Windows 명령 프롬프트에서 또는 PowerShell에서 Linux 이진 파일을 호출할 수 있습니다.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

WSL 명령을 전달할 bash -c 수정 하지 않고 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 하위 시스템에는 Windows 이진 WSL 명령줄에서 직접 호출할 수 있습니다.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. Windows 작업 관리자에서 표시 CMD 프롬프트에서 직접 실행 하는 경우.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

VolFs에 있는 파일을 수정 (아래 하지 파일 /mnt/<x>)는 Windows 응용 프로그램은 지원 되지 않습니다.Modifying files located on VolFs (files not under /mnt/<x>) with a Windows application is not supported. 기본적으로 WSL 현재 WSL 디렉터리로 이진을 Windows의 작업 디렉터리를 유지 하려고 하지만 작업 디렉터리 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.

예를 들어; bash.exe 에서 처음 시작 C:\temp 하며 현재 WSL 디렉터리 사용자의 홈으로 변경 됩니다.As 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 자동으로 되돌아갑니다 C:\temp notepad.exe 작업 디렉터리로: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