私は数年間Linuxを使ってきましたが、WSL2を試してみたかったのです。驚くべきことは、Windows PEバイナリ(* .exeファイル)を「このように」実行できることです。いくつかの研究の結果、これはbinfmt_misc
Linuxの性質によるものであることがわかりました。 Windowsの実行可能ファイルのインタプリタが/tools/init
。
しかし、ディレクトリが見つかりません/tools
(実行ファイルのみが見つかります/init
)。 WSL2で実行すると、mount | grep tools
次のようになります。
tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)
しかし、私はそれを見つけることはできません/init/
(私が見つけることができる最も良いのはC:\Windows\System32\lxss\tools
Windows上です)。 WSL2では、これはどのように機能しますか?/
この取り付けポイント「上」に設置されていますか?それでは、/tools
WSL2またはでコンテンツをどのように表示できますか?/init
答え1
まず、ほとんどのWSLはプライベートソースであるため、観察された動作とLinuxおよびWindowsのメカニズムを理解することによっていくつかの情報を収集する必要があります。つまり、Microsoft は Interop の仕組みに関する多くの興味深い情報を提供しています。マイクロソフトブログ投稿WindowsとUbuntuの相互運用性すばらしい本ですが、個人的にはまだ負担です。 WSL1時代に書かれましたが、ほとんどはまだWSL2に適用されます。
このブログを読むときは注意してください。いくつかの用語が変更されました。たとえば、bash.exe
今はwsl.exe
「Ubuntu」が当時利用可能な唯一のディストリビューションです。
Microsoftの実装はプライベートソースですが、このブログは次のリンクにリンクされています。パイオニアオープンソースプロジェクトこれにより、WSLはWindowsバイナリを実行できるため、学習する内容を確認するのが興味深いことがあります。
しかし、私はそれを見つけることはできません
/init/
(私が見つけることができる最も良いのはC:\Windows\System32\lxss\tools
Windows上です)。
私たちは少なくともかなり明確に答えることができます。 Windowsのツールディレクトリにinit
バイナリを見つけることができます。/init
WSL(バージョン1または2に関係なく)インスタンスに表示される内容は、実際には存在するファイルシステムから。インスタンスを起動すると、WSLによってマウントされます。あなたのWindowsC:\Windows\System32\lxss\tools\init
は/init
。
WSL Store Previewを使用している場合、実際のバイナリは..\System32\lxss
。
また、上記のブログ投稿には次の内容が記載されています。
/init
マイクロソフトで書いてくださいLxssManager.dll
。
もうそうではないかもしれません。しばらくの間、WSL1とWSL2の/init
ファイルサイズは少し異なりました。この時点で、サイズとタイムスタンプは同じように見えます。これは、Microsoftが少なくとも現在実行されているストアプレビュービルドでは、/init
このタスクから完全に退いた可能性があることを意味します。LxssManager.dll
/
この取り付けポイント「上」に設置されていますか?
上でこの質問に答えたと思いますが、明確に言えばその逆です。 /init
起動時にインストールされます/
。少なくともWSL2は、ネットワークファイルシステムである9Pプロトコルファイルシステムを使用します。デフォルトでは、9PはすべてのWindowsドライブを/mnt/c
(/mnt/d
など)にマウントするためにも使用されます。
tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)
したがって、マウントポイントは、「Windows..\lxss\tools
ディレクトリが9Pプロトコルを介してマウントされている/init
」と解釈されます。
より興味深い情報私は同じ問題についてRedditに投稿したu / diddlesnapsの投稿を知りません。この情報(私には完全に理解されています)によると、tools
インストールはWSLを介して実行されてinitrd
から削除されます。