Windows 10 アニバーサリーアップデートの新機能である bash on Windows (以下 bow) に関して説明します。Windows ではレガシーで文法が馴染みにくい "バッチプログラム"やWindows Scripting Host、あるいは PowerShell などのインタープリター系の言語があります。ただしどれも Unix系との互換性はなく、Unix系のシェルを動作させるには追加インストールが必要であり、かつ完全な互換性があったといは言えません。今回は Windows 10のサブシステム上にネーティブな Ubuntu 環境を実装することにより bash 環境を実現しています。仮想マシン上でUbuntuを動作させるのとは違い、コマンドプロンプト上でWindowsのディスクに対して bash 系のコマンドが実行できる点です。
2016年8月
スポンサード リンク
標準ではこの機能は使用できません。開発者モードの有効化、及びbow環境のダウンロードと設定が必要です。ただし設定はユーザの追加くらいで簡単に設定が可能です。
bash インストール
bash を起動するには、コマンドプロンプトから "bash" コマンドを実行します。
スポンサード リンク
(1)シェル作成時の注意点
Windows よりc:\test\test.shを以下の通り作成します。 [CR][LF] は改行コードです。
#!/bin/bash[CR][LF]
ls /[CR][LF]
bowより実行すると以下のエラーが発生します。
#/mnt/c/test/test.sh
にアクセスできません: そのようなファイルやディレクトリはありません
また場合によっては以下のようなエラーも発生します。
#/mnt/c/test/test.sh
/mnt/c/test/test.sh: 行 2: $'\r': コマンドが見つかりません
これはWindowsとLinux系の改行コードの違いによるものです。
以下の通り改行コードを[LF]のみ修正して解決です。
#!/bin/bash[LF]
ls /[LF]
bowより実行した場合、正常に / (ルート) ディレクトリの一覧が表示されます。
#/mnt/c/test/test.sh
acct boot data etc init lib64 media opt root sbin sys usr
bin cache dev home lib lost+found mnt proc run srv tmp var
(3)Linuxのシェルを実行してみる
Linux で実績のある簡単なシェルを実行してみました。これは現在のディレクトリに test_1 から test_100 という10240バイトのファイルを100個作るシェルです。bow で実行したところ無事実行されました。
#!/bin/bash
CNT=1
while [[ $CNT -le 100 ]];
do
dd if=/dev/zero of=test_$CNT bs=10k count=1 > /dev/null 2>&1
CNT=`expr $CNT + 1`
done
exit 0
以下の通り、Windows のディレクトリに大量のファイルが生成されています。
C:\test のディレクトリ
test_1 test_19 test_29 test_39 test_49 test_59 test_69 test_79 test_89 test_99
test_10 test_2 test_3 test_4 test_5 test_6 test_7 test_8 test_9
test_100 test_20 test_30 test_40 test_50 test_60 test_70 test_80 test_90
test_11 test_21 test_31 test_41 test_51 test_61 test_71 test_81 test_91
test_12 test_22 test_32 test_42 test_52 test_62 test_72 test_82 test_92
test_13 test_23 test_33 test_43 test_53 test_63 test_73 test_83 test_93
test_14 test_24 test_34 test_44 test_54 test_64 test_74 test_84 test_94
test_15 test_25 test_35 test_45 test_55 test_65 test_75 test_85 test_95
test_16 test_26 test_36 test_46 test_56 test_66 test_76 test_86 test_96
test_17 test_27 test_37 test_47 test_57 test_67 test_77 test_87 test_97
test_18 test_28 test_38 test_48 test_58 test_68 test_78 test_88 test_98
100 個のファイル 1,024,000 バイト
スポンサード リンク
セットアップ時に作成したユーザはroot 権限はありません。root 権限でコマンドを実行するにはsudo コマンドを使用します。(2016年9月現在、root でログインする方法は提供されていないようです。要確認)
以下の例では、sudo コマンドにより whoami を実行しています。sudo 時にパスワード入力を求められた場合は、bash セットアップ時に作成、設定したユーザのパスワードを入力します。root のパスワードは設定していため、root ではログインできません。
# sudo whoami
root
(参考)"sudo: ホスト <ホスト名> の名前解決ができません"が出力される場合の対処
(1)ソースの更新
ソース更新の実行例です。sudo により root 権限で実行します。
$ sudo apt-get upda
(2)パッケージの更新
パッケージの実行例です。sudo により root 権限で実行します。
$ sudo apt-get upgrade
参考:ソース更新、パッケージ更新の実行例
仕組み、及びファイル構成を紹介します。
Bash on Windows の仕組み