kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Windows 10のbash on Windowsを試す

はじめに

blogs.windows.com

Windows 10のInsiderビルド14316が公開されました。//Buildで発表されたbash on Windowsも入っています。bashなのでbashそのものの挙動はともかく、Windowsで実際にどう見えるのか確認してみます。ベータなので将来変わると思いますので、その点はよろしく。

インストール

初回起動時のbash.exeはコンソールのストアアプリ(Windows Runtimeを使うアプリ)のようで、ちょっと違います。ご注意。公になるものでは初めてのWindows Runtimeを使ってストアにアクセスするコンソールアプリケーションってことになるんでしょうか。理屈上はできることはわかっていましたが。

f:id:kkamegawa:20160407053000p:plain

まずはプログラムの追加と削除からWindowsの機能で「Windows Subsystem for Linux」を追加します。再起動が要求されます。

f:id:kkamegawa:20160407053001p:plain

再起動すると、bashが追加されています。今のところメニューにはないようなので、検索するか、コマンドプロンプトからbashと実行すればよいようです。

f:id:kkamegawa:20160407053002p:plain

コマンドプロンプトからbashを起動すると最初に使用許諾の画面が出てきます。

f:id:kkamegawa:20160407053004p:plain

最初にUbuntuのファイルシステムをストアからダウンロード自動的にダウンロードします。文字化けしていますが、たぶん日本語コマンドプロンプトだからなのでしょう。

f:id:kkamegawa:20160407053007p:plain

apt-getでgitをダウンロードしてみます。ちゃんといけますね!

f:id:kkamegawa:20160407053003p:plain

タスクマネージャにはちゃんとbashがいます。

f:id:kkamegawa:20160407053009p:plain

tasklistでみると、Windowsの基本的なDLLがリンクされています。LxSSManagerProxyStubとか見慣れないDLLがいますね。

f:id:kkamegawa:20160407053005p:plain

system32のlxssフォルダにこの辺のDLLがいます。ローカライズリソースもあるようです。

f:id:kkamegawa:20160407053006p:plain

Process Explorerで見ると、RuntimeBroker配下で動いています。EdgeのContant Process(レンダリングプロセスですかね?)と同じレベルで動いています。通常のWin32アプリケーションはExplorer配下で動くので、基本的に違う世界ということですね。

RuntimeBroker配下なので、bashからはWin32アプリケーションにちょっかいかけることはできないと予想されます。bash内でLinuxのコマンドを実行してもタスクマネージャには出てこないですね。

ファイルシステム

f:id:kkamegawa:20160407053008p:plain

/mnt配下にWindowsのファイルシステムがありますね。特殊なファイルはアクセス権などが???なんですね。

ちなみにshutdownコマンド実行すると、Broker配下なのでシャットダウンはできないと思ったけど、別の理由でダメでしたね。

shutdown: Failed to connect to socket /com/ubuntu/upstart:No such file or directory

日本語フォルダは一応扱えるようですが、コンソール上で意図したカーソル位置にならないので、使わないほうがよさそうです。

二回目以降の起動

初回起動(ストアからダウンロードするため)少し違っています(ごめんなさい)。次回起動時はちゃんとBash on Ubuntu on Windowsというアプリが登録されています。

f:id:kkamegawa:20160407053013p:plain bashやinitがtasklistコマンドで見えますが、Win32由来のdllは一切リンクされていません。

f:id:kkamegawa:20160407053012p:plain

wininit.exeのsvchostの下にinitがぶら下がってbashが起動しています。この画面は3つのbashを起動しているのでこうなっています。

この下は変わりません。

Q&A から

(追記)

とあったので、試しました。 f:id:kkamegawa:20160407053010p:plain

bash内のものしか見えないですね。

(追記2)

f:id:kkamegawa:20160407053011p:plain

さらに試しました。同じRuntimeBroker内にいるので、その点は複数のbashは連携することができそうな予感です。

所感

(追記3)

まだまだ最初のベータだし、Ubuntuのバイナリ(curlとかsshとかgitとか)をそのまま使う、という向きには必要十分の機能があると思います。たいていこういうの最初に出るとあらさがしして「使えねえー」ということを言いたがる人もいますが、今までできなかったことができるようになる点をとりあえず楽しみましょう。

あ、Windows Serverにも入るんだろうか?

psコマンドの結果

(追記4)

ps auxだとどうなるのでしょう?というコメントを頂いたので、実験しました。

f:id:kkamegawa:20160407211800p:plain

やはりWindows側は見えないようですね。