Help us understand the problem. What is going on with this article?

WSL(Windows Subsystem for Linux)の概要と導入

はじめに

Windowsの開発環境が改善されてきているとのお話を聞き、今更ながらWSL(Windows Subsystem for Linux)を触ってみました。

環境

  • OS: Windows10 Pro 64bit
    • Version: 1903
    • OS build: 18362.418

Windows for Dockerなどを後で試す予定なので、 Proを使用してます。(今回の記事とは特に関係ないです)

そもそもWSLって何?

Windows Subsystem for Linux に関してよく寄せられる質問 | Microsoft Docs

  • WSLはLinuxコマンドラインをWindows上で実行できるWindowsの機能です。
    • bashや、sed/awkなどのLinuxコマンド、ruby/pythonなどのスクリプトを実行できます。
  • 完全仮想化1と違って、少ないリソースで動きます。
    • またLinuxコマンドラインからWindowsのファイルにアクセスできます。
  • コマンドラインの実行を目的としているため、GUI/サーバアプリケーションの実行は推奨しません2
    • すべての機能が使えるわけではないので、必要に応じてHyper-V、Docker等を使いましょう。

WSLの構成

Learn About Windows Console & Windows Subsystem For Linux | Windows Command Line

Windows Subsystem for Linux Overview の項目を見ると構成概要を理解できると思います3

image.png
Windows Subsystem for Linux Overview – Windows Subsystem for Linuxより

  • WSLはユーザモード/カーネルモードで動作する部品の集まりです。
    • Linuxインスタンスを管理するユーザモードのセッションマネージャ。
    • LinuxカーネルをエミュレートするPico provider drivers (lxss.sys, lxcore.sys) 。
    • Linux(ユーザモードで動作)をホストするためのPico process。

上記の構成要素によって、LinuxシステムコールをWindowsカーネルに転送するほか、Linuxカーネルをエミュレート、またLinuxシステムコールをWindows NTカーネル APIsに変換します。

インストール手順

Windows 10 用 Windows Subsystem for Linux のインストールガイド | Microsoft Docs

WSLの機能を有効化

PowerShellを管理者権限で開き、WSLの機能を有効化します。

PS C:\Users\xxx> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

機能を有効化するために再起動します。

この操作を完了するために、今すぐコンピューターを再起動しますか?
[Y] Yes  [N] No  [?] ヘルプ (既定値は "Y"):

そのままEnterを押します。
再起動後、「プログラムと機能」を開いて有効化しているか確認してみます。

設定 -> アプリ -> プログラムと機能 -> Windowsの機能の有効化または無効化

image.png

有効化されていました。

Linuxディストリビューションのインストール

Microsoft Storeでもインストールできますが、今回はPowerShellでインストールしてみます。

Windows Subsystem for Linux ディストリビューションパッケージを手動でダウンロードする | Microsoft Docs

Ubuntu 18.04 をインストールするため https://aka.ms/wsl-ubuntu-1804 からファイルをダウンロードします。
その他のディストリビューションをインストールする場合は、上記リンクの「ディストリビューションのダウンロード」の項目を参考にしてください。

PS C:\Users\xxx> Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing

その後、インストールを実施します。

PS C:\Users\xxx> Add-AppxPackage .\Ubuntu.appx

WSLディストリビューションの初期化

スタートからインストールしたディストリビューションを起動します。

image.png

するとインストールが始まります。その後、ユーザ名、パスワードの入力が求められるので入力します。

Installing, this may take a few minutes...
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: user_name
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

user_name@pc-name:~$

これでコマンドを実行できるようになりました。試しに不要になった Ubuntu.appx を削除します。
/mnt 配下にWindowsのローカルドライブがマウントされています。

$ ls /mnt/c/Users/[ユーザ名]/Ubuntu.appx
Ubuntu.appx

$ rm /mnt/c/Users/[ユーザ名]/Ubuntu.appx
$ ls /mnt/c/Users/[ユーザ名]/Ubuntu.appx
ls: cannot access '/mnt/c/Users/[ユーザ名]/Ubuntu.appx': No such file or directory

削除できました。最後にディストリビューションのパッケージを更新/アップグレードします。

$ sudo apt update && sudo apt upgrade

挙動確認

UbuntuコマンドラインからWindowsのディレクトリのファイル操作

$ mkdir test
$ touch test/test.txt

$ ls -la test/test.txt
-rwxrwxrwx 1 user_name user_name 0 Oct 20 13:25 test/test.txt

ここでWindowsのエクスプローラで開いて、適当な文字列をテキストに記入。

$ cat test/test.txt
test

問題なさそうですね。その後 vi でUbuntu側からテキスト追記しましたがこれも問題なさそうです。

Windows側からUbuntuのディレクトリのファイル操作

こちらの操作は非推奨でしたが、version 1903 で問題なくなったようです。

What’s new for WSL in Windows 10 version 1903? | Windows Command Line

PS C:\Users\xxx> wsl --list
Windows Subsystem for Linux ディストリビューション:
Ubuntu-18.04 (既定)

PS C:\Users\xxx> ls \\wsl$\Ubuntu-18.04
    ディレクトリ: \\wsl$\Ubuntu-18.04


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2019/10/18     22:10                bin
d-----       2018/07/26      0:56                boot
d-----       2019/10/20     12:50                dev
以下略

PS C:\Users\xxx> cd \\wsl$\Ubuntu-18.04
PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-18.04>
PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-18.04> explorer.exe .

エクスプローラが開くので、/home/[ユーザ名] のディレクトリに適当なファイル作ってみます。

$ ls -la test.txt
-rw-rw-rw- 1 user_name user_name 0 Oct 20 14:38 test.txt
$ cat test.txt
あいうえお

これも問題なさそうです。

C:\Users\[ユーザ名]\AppData\Local\Packages\[ディストリビューションフォルダ名]\LocalState\rootfs に実ファイルは存在するようですが、 このパスでアクセスしてしまうとLinuxファイルが破損する可能性があるようです。 そのため \\wsl$\[ディストリビューション名] のアクセスだけにします。

wsl.confの設定

Windows側のファイルパーミッションがゆるいので wsl.conf で設定を追加します。

Linux ディストリビューションの管理 | Microsoft Docs

$ sudo vi /etc/wsl.conf

# Enable extra metadata options by default
[automount]
enabled = true
options = "metadata,umask=22,fmask=11"

その後、Windows側でファイルを作成します。

$ mkdir test
$ touch test/test.txt

$ ls -la test/test.txt
-rw-rw-rw- 1 user_name user_name 0 Oct 20 15:12 test/test.txt

パーミッションの設定が反映されていることが確認できました。

まとめ

  • WSLはWindows上でLinuxコマンドラインを実行するための機能。
  • 完全仮想化1、dockerとは異なり、Windows独自機能3
  • Windows上のファイルをLinuxコマンドライン経由でアクセスできる。
  • GUIやサーバアプリケーションの実行は推奨されない。

  1. Virtual Box/Hyper-Vのホスト型、Xen/VMware ESXiなどのハイパーバイザ型などの仮想化。 

  2. 推奨しないだけでインストールできるみたいです。「WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編):Tech TIPS - @IT 」またWSL2だと問題なくなるかもしれません。 

  3. これはWSL1の構成でWSL2とは異なります。「完全なLinuxがWindows 10上で稼働する? 「WSL 2」とは」 

na-777
しがないエンジニアやってます
http://na-777.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした