ちょっと前にWindowsがBashをサポートすると言う発表をして、今年の夏頃からサポートしたバージョンがWindows 10のアップデートで配布される予定です。
現時点でもWindows Insider Programに参加することで現在進んでいるプロジェクトを先取りして使うことが出来、その中にこのBashのサポートも既に含まれているのでちょっと使ってみました。
途中、インストールで躓いたところとかもあったのでその辺もメモしておきます。
追記: 2016/08/04
8月2日にAnniversary Updateと呼ばれる大型アップデートが提供開始されその中にBash on Ubuntu on Windowsも含まれています。
従って以下のWindows Insider Programなどへの参加はもう不要で、開発者向け機能を使う以降の設定で使えるようになります。
追記ここまで
以下の14316というビルドでBashをネイティブにWindows上で走らせる事が出来るようになっています。
Announcing Windows 10 Insider Preview Build 14316 Windows Experience Blog
このビルドを手に入れるためにはまず、Windows Insider Programに参加する必要があります。
また、今回行っているのは64 bit版のWindows 10 Home Editionです。
設定の更新とセキュリティWindows Updateから詳細オプションへ行き、Insider Previewビルドの入手というところで開始するを押すと、Windows Insider Programにご参加くださいと言ったダイアログが出るので、そこで登録を押しても上のページに行けます。
また、アカウントを持ってるけどWindowsに登録してなかったり別のアカウントを使ってる様な場合、ここでアカウントを切り替えたりすることも出来ます。
大概の場合、Windows 10を使っている場合はMicrosoftアカウントを登録してあると思うのでそのアカウントでWebページでもログインし、Insider Programに参加します。
Webで参加登録後、先ほどのInsider Previewビルドの入手のところで再び開始するを押すと実際に入手する作業に入れます。
ここでちょっと注意が必要なのは、Insider Previewビルドの入手を開始する前に、プライバシーフィードバックの間隔の設定をいじっている場合、フィードバックを求められる頻度及びデバイスのデータをMicrosoftに送信するをそれぞれデフォルトの自動(推奨)、完全(推奨)に戻しておく必要があります。
これを戻しておかないと、上の開始ボタンを押しても、既にInsider Programに参加したアカウントを選んでいても延々とWindows Insider Programにご参加くださいのダイアログが出てきてしまいます。
Insider Programは正式配布前のビルドを試用してフィードバックをもらおう、というものなので当然フィードバックありきの配布なわけで、ここをオフにしてたら使えない、というわけです。
上の絵はInsider Program開始後ですが、開始後はこれらのオプションが変更できない様になっています。
ここで結構悩んで途中で辞めそうになった…
とういうことで、無事開始することが出来たら次はビルドの入手の設定をしておきます。
先ほどのWindows Updateの詳細オプションの所に今度はInsiderのレベルを選んでください。設定を変更した後ではビルドの受け取りにしばらく時間がかかります。という項目があり、下にバーがあるので一番右のMaxのファスト(Fast)にしておきます。
これは新しいビルドをどれだけ頻繁に入手するか、というオプションですが、差し当たり早く欲しいのでファスト(Fast)に。(ただ、最初の入手に関してどれだけ意味があるのかはちょっと良くわかってません。)
この設定をすると暫くすると入手するんですが、これはWindows Updateの更新プログラムのチェックを押してもすぐに入手することは出来ません。
ネットにつながってる時に自動的にチェックして入手出来る様になるらしく、ここまで来たらしばらく待つ他ありません。
早ければ1時間以内、ヘタすると1日位かかるみたいですが、今回は設定して1時間位したら入手できる様になりました。
ここでも更新をチェックしても更新されないためにきちんと設定できてないんじゃないか?と疑ったりして、色々チェックしなおしたりしてましたが、ここはもう待つしかありませんので暫くは忘れて放っておく位な気持ちで。
しばらくしてWindows Updateを見て、更新プログラムを利用できます。の表示の下にWindows 10 Insider Preview XXXXX。の様な表示があればInsider Previewを入手出来るようになってるのでその下に出ている今すぐインストールボタンを押してインストールを開始します。
そうなってないかぎりは辛抱強く待つだけです。
初めてInsider Previewを入れるときは差分が多くあるので結構時間がかかります。(開始して寝ましたが多分最低1時間程度はかかっていた様です。)
インストールが終わったら再起動が必要ですが、再起動して更新するにも結構時間がかかります。(数十分程度。)途中で何回も再起動をしたりもするので、特にこちらの再起動の方は時間がある時に行う必要があります。(入手するだけならバックグラウンドでも出来るので。)
Insider Previewのインストールが終わって再起動すると、最初ログイン画面が青色一色になってたりログイン後にもしばらくマウスも使えない状態で待たされたりしますが、一通り準備が終わると今まで通りの設定で使える様になります。
ただ、一部機能などがリセットされるらしく、レジストリをいじって変更していたCapsLock、Alt、Ctrlの交換1はリセットされていました。なのでこれは再び設定しておきました。
その他は今のところ特に気づいたところは特にありません。
設定の項目自体が色々と変更されてるのでその辺で細かい違いがあるかもしれません。
Insider Preview版をインストールしましたが、ここでWindowsのバージョンの確認をしておきます。
Windowsの細かいバージョンを確認するには、Win-Rでファイルを指定して実行を起動するかCortanaの検索を使い、winver
を入力して実行します。
そうするとこんな画面が出てくるので、ここでビルドが14316
より大きければBashの機能が使える様になっています。
Insider Previewをインストールしていれば14000より大きなこんな数字になっていると思いますが、現状の通常バージョン(Windows 10 Home Editionで確認)だと10586.318
になっていました。
もしこんな感じの数字であればまだインストールが出来ていないので、入手が終了しているのであれば設定のWindows Updateなどに行くと再起動して更新、的なボタンが有るはずなのでそれを押して再起動、更新する必要があります。
Insider Preview版をインストールすると強制的にデスクトップに表示が出るようです。
こんな感じで右下にInsider Previewの表示が出て、壁紙とかを変えても常に表示される様な状態になっています。
ちょっと気になる人は気になるかも。。。
Bashを有効化する前に、機能を使えうために開発者モードに設定する必要があります。
これは、設定更新とセキュリティ開発者向けに行くと開発者モードを選べる項目があるのでそれを選びます。
ここまで来たらBashを有効化出来ます。
スタートボタンを右クリックするなどして出てくる項目からコントロールパネルを開き、プログラムWindowsの機能の有効化または無効化を開きます。
Insider Previewが入っていて上の設定がきちんとできていれば、ここにWindows Subsystem for Linux (Beta)という項目があるはずなのでそれにチェックを入れてOK。
再起動を促されるので再起動します。
再起動したらコマンドプロンプトかPowerShellを起動してbash
とコマンドを打ちます。もしくはファイルを指定して実行などからbash
を直接起動してもOK。(C:\Windows\System32\bash.exeを実行する。)
そうするとBashをインストールするかどうか聞かれるのでy
を入力するとBashのインストールが始まります。
インストールが終わるとBash用のユーザー名やパスワードの設定を促されます。このユーザー名などはWindowsの物と同じでなくても構いません。(PowerShellだと日本語表示になりますが、なんか表示が二重になってたりしておかしかったです。。。)
設定が終わるとBashが始まります。
その後はスタートアップにBash on Ubuntu on Windowsという項目が追加されているはずなのでそれを起動するといきなりBashなコマンドプロンプトが使えます。(この項目自体はbash.exeへのショートカットになっていて、引数として~
を取る様な形になっています。)
コマンドプロンプトなりPowerShellでbash
と打って始めることも出来ます。
これでWindowsでネイティブなBashが使えるようになりました。
見てみるとこんな感じです。
$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 14.04.4 LTSRelease: 14.04Codename: trusty$ uname -aLinux DESKTOP-IIK93T3 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux$ bash --versionGNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)Copyright (C) 2013 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software; you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.
Ubuntuなのでapt-get
を使ってパッケージをインストール出来る様になっています。
Bashのホームディテクトリは、Windows上ではC:\Users\<WindowsUserName>\AppData\Local\lxss\home\<UbuntuUserName>になります。
lxssディレクトリなのですが、エクスプローラーからだと隠しファイルを表示する様になっていても表示されず、Localまで行った後にアドレスバーに直接\lxss
を追加すると中を見ることが出来ました。(何やら初めて見る仕様です。。。)
追記: 2016/08/04
コメントで指摘していただきましたが、これは初めて見る仕様、ではなく、もうひとつ、保護されたオペレーティング・システムファイルを表示しないというフォルダオプションを切る必要があります。このオプションは以前のWindowsバージョンからずっとあるものです。
隠しファイルよりもう一段階高いレベルで保護されてるファイル、フォルダの表示を設定する項目。
Windows 10ではエクスプローラーでフォルダを開いて上のタブの表示を押して表示に関するオプションを出すと、隠しファイル等の表示を簡単に変更できる様になっています。
ただ、ここに全てのオプションがあるわけではなく、さらにオプションを起動して表示タブに行くと詳細設定が出来る様になっています。
この中に隠しファイルの表示設定もありますが、一番下に保護されたオペレーティング・システムファイルを表示しないという項目があり、デフォルトではチェックされています。
このチェックを外すとlxssのフォルダも見える様になります。
エクスプローラーの表示の項目で簡単に隠しファイルとかの表示が変更できる様になってたので昔ながらのオプションの変更はもう必要ない、と勘違いしてたのが気づかなかった理由です。
それでも表示のところにオプションと右に大きくあるのに気付けなかったな、、、と。
追記ここまで
さらにC:\Users\<WindowsUserName>\AppData\Local\lxss\rootfsというデイxレクトリがありここにusrやbinなどのLinuxファイルが入っています。こちらにもhomeはあるんですが、中は空でWindows側からなにか作ってもUbuntu側のhomeには反映されないので、どうもhomeだけは\lxss\homeを使う仕様になってる模様。
これから分かるように、Bash on Ubuntu on Windowsでは各ユーザーごとにLinux環境を作る様になっているみたいです。
また、Bash側からWindowsのディレクトリを見るには、/mnt/cなどからCドライブなどへアクセスが出来る様になっています。
Bash上では今のところ日本語を打つことが出来ません。
PowerShellなんかだと日本語を使えるのですが、bash
を起動すると日本語に切り替えができなくなります。(BashなPowerShellにフォーカスがあるかぎりIMEを直接ひらがなとかにしようとしても出来ない。)
ただし、日本語を表示することは可能らしく、日本語の内容のファイルをcat
してみたり、日本語のファイル名があるディレクトリでls
してみたところ正しく表示されました。
日本語が打てないのでVimとかで開いても文字やコピーこそ一応出来ますが、削除も半角毎に行ってるっぽい感じでまともに使えません。
無理やりファイル操作とかをしたい場合、PowerShellからbash -c
とコマンドの形で呼んで、
> bash -c "mv このふぁいる あのふぁいる"
みたいな感じで操作しようと思えば出来ますが、まあ意味無いです。
root権限はユーザに与えられているのでapt-get
などはユーザーで直接できる、みたいな話を見ましたが、apt-get
してみたところPermission deniedでare you root?と聞かれてしまいました。
rootのパスワードなど設定してないのでsu
しようが無いのですが、試しに
$ sudo apt-get update
としてみるとユーザーのパスワードを聞かれ、パスワードを入力すると行けました。
$ idid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)
みたいになっていて、sudo
グループに全権限が与えられてるので全てのコマンドをこのユーザーでsudo
出来るみたいです。
上のポストに書いてあるとおり、基本的にWindowsは大文字小文字を区別しません。
一方Linuxシステムでは区別します。
Bash on Ubuntu on Windowsの場合、/mnt/cなどからWindows領域に行って作業すると基本的に大文字小文字だけが違う別のファイルを作る事は出来ません。
$ cd /mnt/c/Users/user$ touch a A$ du a A0 a
としてもa
というファイルだけが出来ます。一方、Ubuntu領域に行くと、
$ cd$ touch a A$ du a A0 a0 A
と、aというファイルとAというファイルの2つができています。
実際エクスプローラーから覗いてみてもこの2つが確認できます。
Windowsは通常NTFSにフォーマットされたディスクを使いますがNTFS自体は大文字小文字を区別できますがWindowsがアプリケーションとして区別しないようにしています。なのでこの場合、Ubuntu領域に限っては区別するような特別な処置をしているみたいです。
この辺なかなか複雑なことをしてる感があります。
ただ、エクスプローラーから見えるには見えるものの、正しくは扱えないみたいで、
$ echo aaa > a$ cat aaaa$ cat A$
な状態でエクスプローラーからaをメモ帳で開いて見ると空でした。Aを削除してから再びaをメモ帳で開いてみるとaaa
と言う内容が見れました。
どうもa、Aがある状態でエクスプローラーから開こうとしても常に大文字の方だけをアプリケーションに名前として渡してしまう模様。
また、Cygwinなんかでシンボリックリンクを使おうとすると結構ややこしいのですが、Bash on Ubuntu on Windowsのシンボリックリンクはまた面倒な仕様です。
シンボリックリンクを作ってみたところ、Windows領域では通常ファイルに見えますが、メモ帳とかで開こうとするとファイルにアクセス出来ませんと出て開けません。
一方、Ubuntu領域で作ると開くことは出来ますが、中身にはリンク元のファイル名が入っています。
$ touch a$ ln -s a b
とすれば、bをメモ帳で開くとa
となっている状態。
ただし、開けますが内容を変更しようとするとプロセスはファイルにアクセスできません、別のプロセスが使用中です。 と言われてWindows側から変更を保存したりは出来ません。
というわけでWindows側とリンクを共有したり、そういった事は今のところ出来なそうです。
さらに、Ubuntu領域に対してWindows側からファイルを作ったりディレクトリを作った場合、それらのものはBash側では見ることが出来ません。(なので、上でHomeに作っても変換なし、と言った所はちょっと理解が違うかもしれません。)
どうもUbuntu領域は基本的にWindowsとは完全独立な体制にしたい感じになっています。
Bash on Ubuntu on WindowsではXサーバーは直接サポートしないとなってますが、自前でXサーバーを動かせばGUIなアプリも動かすことが出来ます。
XmingなりCygwinのXサーバーなりなんでも良いんですが、多分、今現在WindowsでXサーバーを立ち上げるのはMobaXtermを使うのが一番簡単なのでそれでテスト。
MobaXtermが入ってればアプリを立ち上げるだけでXサーバーも起動します。MobaXtermのローカルターミナルでDISPLAY変数を見てみると
$ echo $DISPLAY127.0.0.1:0.0
となっているので、Bash on Ubuntu on Windowsのターミナルで、
$ export DISPLAY=127.0.0.1:0.0
とします。(デフォルトでは値は設定されていません。また、ローカルホストなので実際にはexport DISPLAY=:0.0
だけでもOKです。)
これでXなアプリも使える様になったはずなのでテストしてみます。適当なものが無かったのでapt-get
でxclock
などXアプリをインストールして使ってみます。
$ sudo apt-get install x11-apps$ xclock
MobaXtermを起動した状態でxclock
を立ち上げれば時計がきちんと出てくるはずです。
Xサーバーが動いてなければ
$ xclockError: Can't open display: 127.0.0.1:0.0
と言った感じのエラーが出ます。
もし本気でこのBash on Ubuntu on WindowsをXも含めて使いたい場合はXmingとかを使うべきだとは思いますが、取り敢えずXサーバーを動かせばXなアプリも使える様です。
追記: 2016/09/01
GNU screenやtmuxと言ったターミナルマルチプレクサなどは色々と難しい点があるようで、初期のBash on Ubuntu on Windowsでは両方共使えませんでした。
ただ、tmuxの方はAnniversary Update時にには使えるようになっていて、GNU screenに関しても使える様になったみたいです。
追記ここまで
ちょっと触ってみた感じでは単純なBashシェルとしては普通に使えました。
ssh
なども入っているので他のサーバーにログインして使ったりも出来ます。
ただ、Linux環境をそのまま入れようとし過ぎているのか、基本、Windows環境と独立したものが単に入っている感じになっています。
一応/mnt/からWindows側のファイルを見ることは出来ますが、システムが違う物を無理やり繋げてる感じがして余り実用的ではありません。
Xに関しては一応使えますが別途自分で用意しなくてはいけないのでWindowsネイティブ、という売りの意味が無くなってしまいます。
起動スピードに関してはCygwinやMobaXtermに比べて大分速く、瞬時に立ち上がる感じがあるのは良い所だとは思います。
後は一応Ubuntuなのでapt-get
でパッケージをインストールすることが出来、Cygwin(またはMobaXterm)のapt-cyg
で用意されているものに比べればパッケージが充実してるかな、という点はあります。
ですが、例えばCygiwnではcygstart
というコマンドがあり、所謂Macのopen
コマンド的なファイルをOSのアプリを使って開いたりOSのアプリを実行するコマンドがありますが、Bash on Ubuntu on Windowsではそのようなコマンドはありません。
これはそもそも思想が違うので今後出来るか、とわれると根本的なコンセプトが変わらないかぎりは入ってこないと思います。
そもそもWindowsにBashが入る、ということでユーザーが求めるのは個人的にWindowsをBashで管理する、ということだと思うのですが、これだと単にWindowsの中でBashを使える、というだけでむしろCygwinやMobaXtermの単なる下位互換にしかならない感じです。
追記: 2016/06/06
WindowsをBashで管理するが欲しいのは個人的にはLinux的な作業を行うのであれば手元のマシンで行うことがあまり無いからです。
基本Linuxサーバーが別にあってそこに入って作業します。前までのWindowsマシンでは中にVM環境作って作業するにはきつかったしあまり現実的ではなかったですし。
今はWindowsだとそういう開発をするのに全部手元のマシンでVMを使う人も多いのでしょうかね?(Cygwinで開発してるというのは殆ど聞かないし、下に出したcoLinuxなんてのは最近話にすら出てこないので。。。)
ただ、逆に今の端末はノートPCでも十分なスペックを持ってる事が多く、手元で開発を行う様な人ならVMでLinux立ち上げても十分使える様なものを持ってる事が多いと思います。
だとすればやはりUNIXライクなコマンドが使えて嬉しいのはホントにネイティブにWindows内のシステム等にUNIXなコマンドラインからアクセス出来る、というところだとは思うのですが。
MacとWindowsで差を感じるのはやはりその部分なので。まあ、個人的にですが。
追記ここまで
取り敢えず入れてみた、感しか無いんですが、今後、Windowsを管理するためのBash、として進化してくれることを祈りつつ、ちょっと見守る感じです。(現状CygwinやMobaXtermの方が圧倒的に使えて、このBashを使う意味は全く無いという結論。。。)
追記: 2016/06/05
個人的な思いはともかく、実際どういったものを作ろうとしてるか、というのはBash on Ubuntu on WindowsのFAQを見るとちょっと見えてきます。
まず、これはWindows Subsystem for Linux (WSL)と呼ばれWindows内にLinux環境のサブシステムを作るためのもの、とのこと。
Why would I use WSL rather than Linux in a VM?
WSL requires fewer resources (CPU, memory and storage) than a full virtualized machine. WSL also allows you to run Linux command-line tools and apps alongside your Windows command-line, desktop and store apps, and to access your Windows files from within Linux. This enables you to use Windows apps and Linux command-line tools on the same set of files if you wish.
特にこれを見ると仮想マシンでやってることをWindowsネイティブで出来る様にしたい、と行った感じです。VM上で行うのに比べOS自体を立ち上げる必要がないため少ないリソースでLinux環境を作る事が出来る、と。
また優先度が高いものとして
1. A Bash environment for developers to run standard GNU command line tools such as grep, sed, awk
2. Provide access to the local hard drives through /mnt
3. Symlink support within the WSL environment
4. Linux user support
5. Provide the ability to run apt / apt-get for updates and package testing
6. Provide basic functionality for some languages:
* NodeJS / npm
* Python
* Perl
* Git
7. Command line editors / tools
* vi
* emacs
* ssh
が挙げられていますが、これらは大体出来てる感じです。
/mnt/からWindows領域を見ることはできるしシンボリックリンクもWSL内ではきちんと機能しています。
NodeやGit、またEmacsに関しては現状初期状態では入っておらずapt-get
で取ってくる必要があります。
と言った感じで目指されてるのはWindowsでもVMなどを立ちあげなくてもパッとUnix系コマンドを使ってテストとか出来る様にしたい、という所みたいです。
これを使ってWindows側を管理したりどうこうする、なんてことは今のところあまり無い模様。その辺はやはりコマンドプロンプトなりPowerShellがあるでしょ、ということかもしれませんが。
むしろ領域を完全に分けて仮想状態を作ってる辺り、逆にWindows環境とは敢えて切り分けて置く、という考えもありそうな感じすらします。シンボリックリンクとかWindowsの物とは全く別の物を使ったりしてるみたいなので単に環境をまとめるのがまだ難しいだけかもしれませんが。
Bash on Ubuntu on Windowsに対する追加アイデアみたいなものは下で投稿され、必要とされるものは取り入れられて行っている様です。
Command Prompt / Console / Bash on Ubuntu on Windows: Top (390 ideas) – Welcome to the Windows developer feedback site!: https://wpdev.uservoice.com/forums/266908-command-prompt/filters/top
また、GitHubにもIssue専用のREADMEだけのレポジトリが出来ていて、問題などを見つけたたらこちらから報告するみたいです。
追記ここまで
追記: 2016/06/05
WindowsではサードパーティーなアプリでLinux環境を構築することが昔から行われています。
一番有名なのはやはりCygwin。
シェルなどをWindows環境上で動くようにコンパイルしなおしてUNIXライクな環境を作り出しています。
パッケージもapt-cygというapt-get
に似せたスクリプトを使ってインストールしたりすることが出来ます。(ただし、apt-cyg
自体はCygwin公式なものではなくてさらなるサードパーティースクリプトです。)
Cygwinと似たような物でMobaXtermというソフトも有ります。
こちらはBusyBoxというUNIXツールを一つのバイナリに詰めた軽量ツールをベースに作られています。
Xサーバーとかがデフォルトで起動したり、sshの管理がGUIで簡単に出来たり、PuTTYから設定をインポートできたり、またMoshなどもサポートしていたり結構色々充実しています。
ぱっと始めるのであればCygwinより手軽です。
後は余り使われてないと思いますが、Cooperative Linux(coLinux)という、実際のLinux環境を仮想的にWindows内に作る物があります。
ただ、今はVMwareなりVirtualBoxなりで好きな仮想環境を作れるので敢えて使う必要は無い感じです。(昔のリソースが少ない環境でもcoLinuxは割りと負荷なく動いたのでそれはそれで結構便利でした。)
ただ、Bash on Ubuntu on Windowsの使用感としてはこのcoLinuxが一番近いように感じます。
追記ここまで
« TeamViewerで二要素認証の設定BoseのノイズキャンセリングヘッドホンQuietComfortのワイヤレス版が発売された »