Windows と Linux の相互運用性用 Windows サブシステムWindows Subsystem for Linux interoperability with Windows

For Fall Creators Update が更新されます。Updated for Fall Creators Update.
Creators Update または Anniversary Update を実行している場合にジャンプ、 Creators/Anniversary Update セクションします。If you're running Creators Update or Anniversary Update, jump to the Creators/Anniversary Update section.

Windows Subsystem for Linux (WSL) は、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 Insider のビルド 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

Windows コマンド プロンプト (CMD または PowerShell) を使用して、Linux のバイナリを実行する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.exeWSL で実行する任意のコマンドのように処理されます。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 のパスが含まれている$PATHFall 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 タスク マネージャーに表示される場合に、コマンド プロンプトから直接実行します。Appear in the Windows Task Manager as if directly executed from the CMD prompt.

以下に例を示します。Example:

$ notepad.exe

WSL で実行、Windows 実行可能ファイルは、ネイティブの Linux 実行可能ファイル: リダイレクトのパイプとも想定どおりに作業するバック グラウンド処理を同様に処理されます。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. などのネイティブ コマンドを CMDdirで実行できる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.txtnotepad.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>) WSL でのアプリケーションはサポートされていません、Windows とします。Modifying files located on VolFs (files not under /mnt/<x>) with a Windows application in WSL is not supported.

既定では、WSL バイナリ WSL の現在のディレクトリとして、Windows の作業ディレクトリを保持しようとするは代替インスタンス作成のディレクトリで 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:\tempnotepad.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.

WSL にアクセスできる Windows 環境変数のみが 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).

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.

使用できる 4 つのフラグがありますWSLENVその環境変数が変換される方法に影響を与える。There are four flags available in WSLENV to influence how that 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.

相互運用機能を無効にします。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

WSL セッション間で相互運用機能を無効化は永続化されません--新しいセッションを起動するときに、相互運用機能を再度有効になります。Disabling interop will not persist between WSL sessions -- interop will be enabled again when a new session is launched.

Creators Update と Anniversary UpdateCreators Update and Anniversary Update

相互運用エクスペリエンスの事前 Fall Creators Update は、相互運用機能の最新のエクスペリエンスに似ていますが、いくつかの主な違いがあります。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 オプションでは必要ありません、1 つのコマンドを実行しているを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

相互運用機能を無効にするためのプロセスは変更されません。The process for disabling interop is unchanged.

WSL Windows コマンドラインからの呼び出し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

渡される 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

Windows Subsystem for Linux は、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. 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.txtnotepad.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:\tempnotepad.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