Bash on Windows

(更新:2017/10)Install on Windows 10
(作成:2017/09)

Windows 10 Aniversary Update (2016/08) から、標準のWindowsシステム上でUbuntuサブシステムが動くようになった。スゲー。これでLinux環境を別途構築する手間と管理の悩みが省ける。

Install on Windows 10

インストール後、一度再起動が必要。

(2017/10更新)βが取れたようで、Linux環境もストアから入手するようになったみたい。なので bash を実行しても以下のように言われる。

C:\Users\riyo
> bash

Windows Subsystem for Linux には、インストールされたディストリビューションがありません。                                
ディストリビューションをインストールするには、次の Windows ストアを訪問してください:                                           
https://aka.ms/wslstore                                                                   
続行するには何かキーを押してください...                                                                     

C:\Users\riyo                                                                             
で、ブラウザでURLにアクセスしようとするとMicrosoft Storeを開いてくれる。

SUSEも使えるんだ。へー。でもUbuntu贔屓なのでUbuntuで。
入手起動

Installing. this may take a few minutes...
Installation successful!
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: riyo
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Default UNIX user set to: riyo
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

riyo@kappa:~$

。。。おお? USB HDD(ウチとこではE:がそう)が自動認識してマウントされるようになってる! チョーイイネ! drvfs! サイコー!

riyo@kappa:/mnt/c/Users/riyo$ mount
rootfs on / type lxfs (rw,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
none on /dev type tmpfs (rw,noatime,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime)
none on /run type tmpfs (rw,nosuid,noexec,noatime,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime)
none on /run/shm type tmpfs (rw,nosuid,nodev,noatime)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,noatime,mode=755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noatime)
C: on /mnt/c type drvfs (rw,noatime)
E: on /mnt/e type drvfs (rw,noatime)

aptラインを日本のサーバに切り替えてパッケージを更新。

#### /etc/apt/source.list

## (略)

##deb http://archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted

## (略)

##deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-updates main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted

## (略)

##deb http://archive.ubuntu.com/ubuntu/ xenial universe
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial universe
# deb-src http://archive.ubuntu.com/ubuntu/ xenial universe
##deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-updates universe
# deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates universe

## (略)

##deb http://archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ xenial multiverse
##deb http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-updates multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse

## (略)

##deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse

## (略)

# deb http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu xenial partner

##deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted
##deb http://security.ubuntu.com/ubuntu/ xenial-security universe
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-security universe
##deb http://security.ubuntu.com/ubuntu/ xenial-security multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-security multiverse
$ sudo apt-get update
...
$ sudo apt-get upgrade
...
$ sudo apt autoremove
...
(Windows 10 v1709以前)

既に一度インストールした環境では、コマンドプロンプトを管理者モードで起動して bash を実行する。

C:\Users\riyo
> bash
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
Ubuntu のロケールを Windows のロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありま
せん。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: riyo
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
インストールが正常に終了しました
環境が間もなく開始されます...
ドキュメントを参照できる場所: https://aka.ms/wsldocs
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

riyo@kappa:/mnt/c/Users/riyo$

aptラインを日本のサーバに切り替えてパッケージを更新。

#### /etc/apt/source.list

##deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
##deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
##deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-updates main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial-security main restricted universe multiverse
$ sudo apt-get update
...
$ sudo apt-get upgrade
...
$ sudo apt autoremove
...

後はcmderと連携して楽しむのみ。

参考:
Bash on Ubuntu on Windowsをインストールしてみよう! – Qiita

設定

好みの設定だけをつらつら。

.bashrc

プロンプトのディレクトリ表示をカレントのみにする。ディレクトリ階層が深い時に邪魔なので。
$PS1\w\W (小文字→大文字)に変更する。ついでにエスケープシーケンスも修正。

#### ~/.bashrc

if [ "$color_prompt" = yes ]; then
    ##PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    PS1='${debian_chroot:+($debian_chroot)}\[\e[01;32m\]\u@\h\[\e[00m\]:\[\e[01;34m\]\W\[\e[00m\]\$ '
else
    ##PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    ##PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \W\a\]$PS1"
    ;;
*)
    ;;
esac                           
プロンプトのコマンド、色はこんな感じ。
残念ながら現行バージョン(2017/09)のstable版BoWだと256色対応してない。対応すればカラフルになるのかな。まあ使わないと思うケド。

スクリプトは拙サイト「bash – bashカラーバリエーション表示スクリプト」参照。

bash
(更新:2017/09)bashカラーバリエーション表示スクリプト (作成:2013/12) Bourne Shellの生まれ変わり(B...

追加パッケージ

  • ImageMagick
    コマンドラインで画像処理ができる。
    $ sudo apt-get install imagemagick
  • nkf
    文字コード判別 / 変換ができる。
    $ sudo apt-get install nkf

Tips

BoWのWindows上のフォルダ位置

(2017/10更新)
どうやら C:\Program Files\WindowsApps\ 配下にストアアプリとして導入されるようだけれど、基本ここは参照禁止のためWindowsからは操作できないみたい。

(Windows 10 v1709以前)

こんなところに!

C:\Users\riyo
> dir %USERPROFILE%\AppData\Local\lxss
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は 1EF4-549B です

 C:\Users\riyo\AppData\Local\lxss のディレクトリ

2017/09/24  08:52           911,975 bash.ico
2017/09/24  08:52    <DIR>          cache
2017/09/24  08:52    <DIR>          data
2017/09/24  09:03    <DIR>          home
2017/09/25  19:36    <DIR>          mnt
2017/09/24  08:42    <DIR>          root
2017/09/24  08:52    <DIR>          rootfs
2017/09/24  08:40                64 sha256
2017/09/27  15:02    <DIR>          temp
               2 個のファイル             912,039 バイト
               7 個のディレクトリ  45,550,915,584 バイトの空き領域