背景
-
Windows環境でちょっとSSHクライアントやLinuxコマンドを使いたいときがある
-
RaspberryPiにコンソールログインするときとか
-
LAN内のホストの生存確認にping打ったり、ifconfigしたり
-
ちょっとPythonなどでスクリプト書いて実行してみたいときもある
-
今までPythonデバッグやネットワークコマンド使うにはWindows Powershellを使っていたが、SSHのクライアントはWindows版だとGUIメインだったり、Linuxのちょっとしたbashコマンドが使えなかったりしてストレスフルだった
-
VMWareにDebian入れて使ったりしてたけどいちいち仮想マシンを立ち上げるのはメンドクサイし出先でノートPC使ってたりすると処理速度やストレージ的に微妙だったりする
-
Windows側とのファイルのやりとりが面倒だったりする
Windows Subsystem for Linux
- WSL(Windows Subsystem for Linux)を使うと手軽にbash環境が手に入る
- コマンドラインベースならLinuxのほとんどのプログラムが普通に走るらしい
- Debianもあるよ!
インストールと有効化
- Windows側の機能を有効にする
- Windows10の場合、スタートメニュー→Windowsシステムツール→コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化→Windows Subsystem for Linuxにチェック
- ストアからインストール
- 色々提供されてるので、好きなディストリを。当然ここはDebian。
Tips
アカウント関連
- インストール時にアカウント名とパスワードの設定を求められる。
- Windows側のユーザ名とは独立。
- sudo時には初期アカウントのユーザ名/パスワードを使えばroot権限使える
パッケージ関連
- Debianなら普通に
sudo apt install
が可能 - コマンドライン系はほぼ使える。当然PythonやSSHも。
Windowsのバイナリ関連
- 普通にexeを実行可能。notepadとかcalcとか。Windowsのウインドウが開くから面白い
- .exeは省略できない。
$ notepad.exe
- PATHを見てみると、Windows側で設定しているPATH環境変数がそのまま引き継がれているようだ
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Program Files/dotnet:/mnt/c/Program Files/Microsoft SQL Server/130/Tools/Binn:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Users/xxxxx/AppData/Local/Microsoft/WindowsApps
ファイル関連
-
Windows側のファイルは
/mnt/c/
で参照可能 -
リムーバブルドライブ(SDとか)はWindows側でドライブレターが割当たっていても自動ではマウントされない。ファイルシステムdrvfsでマウント可能。
-
D:がSDカードの場合は、
sudo mkdir /mnt/sd
→sudo mount -t drvfs d: /mnt/sd/
-
/etc/fstab
での設定も当然可能。 -
Windows側で作成したファイルはオーナーがroot、パーミッションは777に見える
-
Windows側でReadOnlyにしたファイルは、パーミッション555に見える
-
Windows側から見た時のWSL環境のファイルは
C:\Users\(WindowsUserName)\AppData\Local\Packages\TheDebianProject.DebianGNULinux_(randomString)\LocalState\rootfs
-
ここのファイルをWindows側から弄るとWSL環境がおかしなことになるらしいので、触ってはいけない
-
運用としては、Windows側にWSLとの共有用フォルダを作って、WSLからシンボリックリンクを張るのがいいかもしれない
-
ファイルオーナー/パーミッションが固定なのは我慢する
-
ファイル名の大文字小文字が区別されないが、我慢する