シス管系女子BEGINS 特別編 まんがでわかるWSL

シス管系女子をシェア!

このエントリーをはてなブックマークに追加

はじめに

MacBook(macOS)がWeb開発者やOSS開発者に人気がある理由の1つに、「デスクトップ環境として使い勝手が良く、ターミナル(端末エミュレータ)を使えばローカルでUNIX系のコマンド操作もできるから」ということが挙げられます。これには、中・上級者がUNIX系環境での様々なノウハウをローカルで活用できるということだけでなく、初級者・初学者にとっても、コマンド操作の結果をGUIから確認しやすいというメリットがあります

2017年10月18日に提供が始まったWindows 10 Fall Creators Update(バージョン1709)で正式な新機能となったWindows Subsystem for Linuxを使うと、それに近い事がWindowsでもできるようになります。Linuxのコマンド操作に不慣れな皆さん、ファーストステップとしてWSLを試してみませんか?

1ページ目

(1ページ目)
まんがでわかる Windows Subsystem for Linux
シス管系女子

特別編
Windows PCでもローカルでLinuxコマンドを使いたい

作:Piro

★Linuxコマンド操作学習まんがなのにWindowsってどういうこと!?


ふぬぬぬ~~っ……

ぺちぺちぺち……

新人システム部員
利奈(利奈)みんと

だぁ~~っ!
おてあげっ!
もう全然わかんない~~っ!!

またそんな投げ出し方して……
一体どうしたの?

いつものUbuntuのノートPCが急に起動しなくなっちゃったんですよね

それで代わりにWindowsのノートPCを借りてきたんですけど……

サーバーにSSH接続しようとして「GNOME端末」っぽいのを起動してみたのに、何を入力しても「コマンドが見つかりません」って言われちゃうんですっ!

そりゃそうよ……
それは「端末」じゃなくて「コマンドプロンプト」で、全然別物だもの

Microsoft Windows [Version 10.0.15063]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\piro>ls
'ls' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\Users\piro>ssh mint@192.168.1.100
'ssh' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\Users\piro>

2ページ目

(2ページ目)
LinuxとWindowsは出自が異なってて、コマンド体系も全然違うの

Linux
mkdir
ls
cp
mv

Windows
copy
dir
md
rename

だからLinuxでのやり方は一旦忘れてWindowsでのやり方を覚え直さないといけないわ
そもそも、WindowsはGUIアプリを使うのがフツーだし……

ええーっ?!

そんな、2つも3つも違うやり方覚えたくないですっ!!
WindowsでもLinuxと同じやり方が使えるようにできないんですかっ!?
めんどくさいっ!

最初の頃はコマンド操作自体やりたくないって渋ってたのに、えらい変わりようね……

っていうか、このまんがって「Linuxのコマンド操作解説まんが」じゃないですか!
なんで今さらWindows!?

読者さんの環境はWindowsが圧倒的に多いのよ1※
実際に手元で使ってもらえないことばっかり紹介しててもしょうがないでしょ!?

※作者調べ。Web上でのアンケートで126件の回答中53%がWindowsを使用という結果。

……ってことで、今日はこのまんがで解説してるいろんなコマンド操作をWindowsでも活用できる方法を教えてあげるわ
その名もWSL(ダブリューエスエル)!

先輩システム部員
大野桜子(おおの おうこ)

シュゴ シュゴ……

ダブル……SL……?
横二重連……

違う!
「Windows Subsystem for Linux」、略してWSL!
これはSteam Liner!

アプリやコマンドは、ファイル操作やメモリー管理みたいな共通処理を自分でやらずに、OSの核であるカーネルに処理してもらうの

Linux語
getdents!

ls

はいはい、ファイルの一覧はこれだよ

Linux Kernel

Windows語
NtQueryDirectoryFile!

dir

了解、ファイルの一覧はこれですね

Windows Kernel

そういうカーネルの機能をシステムコールと言うんだけど、LinuxとWindowsとでは機能名や呼び出し方が全然違うのね
だから、普通はLinux用のコマンドはWindowsで動かないんだけど……

Linux語
getdents!
 getdents!

ls

えっ……?
すみません、何言ってるか
わからないです……

Windows Kernel

3ページ目

(3ページ目)
実は、今のWindows 10(64bit版)にはLinuxのシステムコールを理解できる通訳みたいなものが存在してるの

Linux語
getdent!

ls

ああ、ファイルの一覧を知りたいのか……

Windows語
先生! NtQueryDirectoryFilesです!

WSL

はい了解、ファイルの一覧ですよ

Windows Kernel

それがWSLで、この子のおかげで今のWindowsではLinuxのアプリやlsみたいなコマンドがそのまま動くようになってるのよ!

えっ!
でも、さっきあたしが「ls」って入力したときは「コマンドがありません」って言われちゃいましたよ!?

lsくん! ファイル一覧を見せて!!

スーーン

? ? ?

dir
WSL
Windows Kernel
誰、それ……?

それは文字通り、lsコマンドがまだインストールされてないからよ
Windowsの初期状態では、通訳だけはいるけどその通訳を使うアプリやコマンドがいないのね

じゃあ、Linuxのコマンドをいろいろインストールしなきゃいけないんですね……
でも、どうやって?
とほほ……

心配ご無用!
そのための便利な物がちゃーんと用意されてるわ!

Linux
Debian

Linux
Red Hat

そもそも、私達が普段「Linux」って呼んでるのは、みんながよく使いそうなアプリやコマンドをいろいろ揃えてLinuxカーネルとひとまとめにした一種のセットメニューなのよね
これをLinuxディストリビューションと言って、プログラムの集め方の流儀によっていろんなディストリビューションがあるんだけど……

その中でもUbuntuなどのいくつかの有名なディストリビューションが、Windowsのアプリストアから簡単にインストールできるようになってるの※

※Windows 10 Fall Creators Update(1709)以降のバージョンが必要。

Linuxディストリビューションからカーネルがいなくなったもの
(代わりにWSLがその役割を果たす)

vim
ls
cd

Ubuntu

openSUSE

これを使えば、みんとちゃんが普段から使ってるUbuntuとほぼ同じ環境一式(コマンドや設定ファイルのセット)を一発で揃えられるってわけ!

ってことで早速やってみましょ
必要な手順はたったのこれだけよ!

▷1. Windows 10 Fall Creators Update(バージョン1709)以降にアップデートする
▷2. WSLを有効化する
▷3. ストアから「Ubuntu」をインストールする

4ページ目

(4ページ目)
■STEP 1. Windows 10 Fall Creators Updateへの更新

何はともあれ、まずWindowsの更新ね

Windows 10 Anniversary Update
Windows 10 Creators Update
Windows 10 Fall Creators Update

WSLは2017年10月18日に提供が始まった「Windows 10 Fall Creators Update」(バージョン1709)からの新機能よ
Windowsのバージョンがこれより古い場合はまずWindows UpdateでWindows自体を更新しないといけないわ
自動で更新されない場合は、ダウンロードページ※から手動で更新してね

※https://www.microsoft.com/ja-jp/software-download/windows10

このPCは更新済みだから大丈夫ですね

■STEP 2. WSLを有効化する

Windowsの更新が終わったら、タスクバーの検索機能(Cortana)で「Windowsの機能の有効化または無効化」と検索してちょうだい
そうすると、その名前のコントロールパネル項目が見つかるから、それを開いて……
チェックボックスがたくさん並んだダイアログが表示されるから、ここで「Windows Subsystem for Linux」にチェックを入れて「OK」で操作を確定!
これで、初期状態で停止されてたWSLが有効化されるわ
そしたら一回Windowsを再起動して……

WSL

ふあ~……

■STEP 3. ストアから「Ubuntu」をインストール

ここでやっとUbuntuのインストール!

ストアで「Ubuntu Linux」で検索すればデスクトップアプリの一つとして登録されてるのが見つかるわ

「入手(インストール)」を押すとインストールが始まるわよ

すると、一般的なUbuntu環境と同様のコマンドの実行ファイルや設定ファイル類がセットになったものがダウンロードされてくるの

cp
ls

WSL

それきた!

Windows

ずいぶんと大荷物な新入りさんだなー

しばらく待てば……ほら!

あっ、スタートメニューに「Ubuntu」が追加されてる!

5ページ目

(5ページ目)
クリックしたら……おあっ、さっきと似たような黒いウィンドウが出た!

ぱっ!

今、Ubuntuを構成するさまざまなソフトウェアがこの裏で次々と動き始めてるところよ

bash
init

WSL

WSL

通訳は大忙がし!

Windows

……と思ったら、名前を聞かれた?

ぱっ!

インストール後の初回だけ、今後Ubuntu上で使うユーザー名とパスワードの設定を求められるの
ここは、分かりやすいようにWindowsのユーザー名と揃えるのがおすすめね

はい、これでセットアップ完了!

mint@win10:~$

ぱっ!

あっ、「端末」で見慣れたいつもの画面になった!?

これが本当に普通のUbuntuと同じだっていうことを確かめてみましょ

ぺちぺち……ぺんっ!

mint@win10:~$ sudo apt install vim
█

試しにvimをインストールしてみるわね!

おおお、パッケージのダウンロードが始まって……?

提案パッケージ:
  ctags vim-doc vim-scripts
以下のパッケージが新たにインストールされます:
  libpython3.5 vim
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
2,396 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,081 kB のディスク容量が消費されます。
続行しますか? [Y/n]
█

ぱっ……

お、終わった??

update-alternatives: /usr/bin/vim (vim) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vimdiff (vimdiff) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rvim (rvim) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/rview (rview) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/vi (vi) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/view (view) を提供するために自動モードで /usr/bin/vim.basic を使います
update-alternatives: /usr/bin/ex (ex) を提供するために自動モードで /usr/bin/vim.basic を使います
libc-bin (2.23-0ubuntu9) のトリガを処理しています ...
mint@win10:~$ █

ばばっ!

「vim」コマンドを実行すると……

ぺちぺちっ!

mint@win10:~$ vim
█

あああっ、ホントにvimが起動したあっ!!

ぱっ!!

ば~~ん!!

                   VIM - Vi IMproved

                    version X.X.XXXX
                 by Bram Moolenaar 他.
Modified by pkg-vim-maintainers@lists.alioth.debian.org
        Vim はオープンソースであり自由に配布可能です

詳細な情報は           :help iccf<Enter>

終了するには           :q<Enter>
オンラインヘルプは     :help<Enter> か <F1>
バージョン情報は       :help version7<Enter>

6ページ目

(6ページ目)
Windowsなのにvimが動いてるーっ!?

いや、驚くのはそこじゃなくてね……
ていうか元々vimにはWindows版もあるし

それよりも、「sudoを使って」「aptで」vimをインストールした、ってところが重要よ

sudo
apt
vim
grep
cut

これに限らず、ここではUbuntuで使えるコマンドなら大抵のものが使えるってわけ!

で、そもそもみんとちゃんはコマンド操作で何をしようとしてたの?

192.168.1.100 fileserver

ええっと
PDFファイルをscpでコピーしてきて印刷したかったんですけど……

それも簡単簡単!
普通にsshでログインしてファイルの位置を確認して……

ぺちち……

mint@win10:~$ ssh mint@192.168.1.100
...
mint@fileserver:~$ ls ~/*.pdf
result.pdf
mint@fileserver:~$ █

scpでコピー、っと!

ぺんっ!

mint@fileserver:~$ exit
ログアウト
Connection to 192.168.1.100 closed.
mint@win10:~$ scp mint@192.168.1.100:~/result.pdf ./
result.pdf                  100% 1521KB 6.3MB/s 00:01
mint@win10:~$ █

おおおお、これもほんとにいつものUbuntuでの操作と同じだ!!

あとはこれを印刷するだけね!

はい!
「ドキュメント」……あれ、ここじゃないの……?

カチッ
カチッカチッ……

「ダウンロード」……にも、無い……

ちょっと先輩!
いったいどこにファイルを置いたんですかっ!?

そこの所の説明がまだだったのよね
実は、WSLのLiunx環境のファイルはWindowsからは見えないの※

※2017年10月、Windows 10 Fall Creators Update時点での状況。今後改善される可能性はある。

SECRET

WSL
scp
ssh

Windows

どこだーっ!?

えええーっ?!

それじゃ意味ないじゃないですかあっ2

大丈夫!
その代わり、LinuxからはWindowsのファイルを自由に読み書きできるわ!

7ページ目

(7ページ目)
WSLのLinux環境から見える範囲

WSLのLinux環境からは、Windowsのファイルが「/mnt/c」や「/mnt/d」以下にあるものとして見えるの

こんなとこに!?

Linux環境のホームとWindowsのホームは別々に存在している

Windowsから見える範囲

/

home

mint

mnt

c

ここにマウントされている

C:\

Users

mint

/mnt/c/Users/mint

C:\Users\mint

Desktop

/mnt/c/Users/mint/Desktop

C:\Users\mint\Desktop

Documents

/mnt/c/Users/mint/Documents

C:\Users\mint\Documents

Downloads

/mnt/c/Users/mint/Downloads

C:\Users\mint\Downloads

WSLのLinux環境からファイルを取り出すには、こういったパスでWindowsのフォルダーを参照してファイルを置くだけでいいのよ!

じゃ、じゃあ、こんな感じですか……?

mint@win10:~$ mv result.pdf
     /mnt/c/Users/mint/Desktop/
█

ぱっ!!

result.pdf

うおあっ!?
Windowsのデスクトップにファイルが出現したっ?!

もちろん、最初からWindowsのフォルダーをコピー先や移動先に指定してもいいし

$ scp mint@192.168.1.100:~/result.pdf
        /mnt/c/Users/mint/Desktop/█

逆に、Windowsのファイルをscpで直接アップロードすることだってできるわ!

$ scp /mnt/c/Users/mint/Desktop/data.csv
        mint@192.168.1.100:/var/upload/█

でも、こんな長いパスを毎回入力してらんないですよ!

なら、よく使うフォルダーはシンボリックリンクを作っておくのがおすすめね
こんなふうに

$ ln -s /mnt/c/Users/mint           ~/Home
$ ln -s /mnt/c/Users/mint/Desktop   ~/Desktop
$ ln -s /mnt/c/Users/mint/Documents ~/Documents
$ ln -s /mnt/c/Users/mint/Downloads ~/Downloads

$ scp mint@192.168.1.100:~/result.pdf
        ~/Desktop/
$ scp ~/Desktop/data.csv
        mint@192.168.1.100:/var/upload/█

ちょっとラクになる。

ともかく、WSLではこんなふうにWindowsのファイルをLinux環境から簡単に操作できるの

tail
find
grep
cut
WSL

ステイ!

じり……

それに加えて、さっきも言ったとおりUbuntuで使えるコマンドコマンドは大抵使えるし、入ってないコマンドもaptですぐに入れられるし……

じゃあ本当に、Windowsでもこのまんがの知識をそのまま活かせるんですね!
スゴイ!!

そう!
ログファイルをLinuxコマンドの組み合わせで加工することも、定型的な作業をシェルスクリプトで自動化することも、思いのまま!

8ページ目

(8ページ目)
革命的じゃないですか!
今までこういうのが無かったのが不思議です!!

実を言うと、「WindowsでLinuxのコマンド体系を使えるようにする」って試み自体は他にもいろいろあるのよね

例えば、各コマンドに個別にWSLのような翻訳機を持たせる「Cygwin」「MinGW」ってプロジェクトがあるわ

Windows Kernel

ls
cut

Linux語
getdent...

Windows語
NtQueryDirectoryFile!

rsync

まだ翻訳機付きになっていないコマンド

これは各コマンドをWindowsのコマンドに作り替えるような物よ
Windowsを主体に使う場合に適してるけど、使えるコマンドを簡単には増やせないのが欠点ね
使うコマンドが決まってる場面でなら十分実用的なんだけどね

それから、Windowsに以前からある「PowerShell」は「ls」などのLinux風のコマンドが使えるようになってるけど……

ls -la!

ls
dir

えっ、何その
オプション……!?

これはあくまで「Linuxのコマンド名を入力すると似た役割のWindowsのコマンドが実行される」ってだけだから、あんまり互換性が無いのよね

仮想環境上にある本物のLinux環境

VirtualBox

互換性が何より大事な場面では、PCそのものをソフトウェアで再現してその仮想環境でLinuxを動かす方法が一番確実だし安全ね

これをscpしたいだけなのにあの中に持っていかなきゃなのか……

ただ、仮想環境は外界と隔離されてるからWSLほどにはWindows側と連携できないし、PCを丸ごと再現する分どうしてもCPUやメモリーを余計に使うのも難点よ

WSLは、「普通のLinux環境との互換性」と「Windows環境との連携しやすさ」を実用レベルで両立する、第三の選択肢なのね

PowerShellはLinuxとの互換性は問題外だからカウントしないでおくわ……

VirtualBox

WSL

Windows Kernel

grep

「Windows環境でもLinuxのコマンドを気軽に普段使いしたい」という場合には今もっともおすすめの方法と言えるわ!

これなら、あたしも安心して今まで覚えた知識で作業ができますね~~!

ところで、そんな真新しいWindowsノートPCどこで借りたの?
そんな予備PCあったかしら……?

あっちの会議室にいっぱい置いてあったから、1台くらいいいかなって思って……

えっ、それってまさか……

ぬおおお~~っ!!
検証を始めようと思ったら検証機材が一台どっかにいっちまったあああぁ~~~っ?!

つづく?

YUKI "Piro" Hiroshi / system-admin-girl.com 2017.10.22発行

特別編はここまで!

本編では他にもさまざまなトピックを解説!

などなど……

続きは まんがでわかるLinux
シス管系女子」
で!

もしくは

前の話へ

他のマンガを見る

拡散希望!

このエントリーをはてなブックマークに追加