Windows 10のAnniversary Updateのリリースで、MicrosoftはLinux用のWindows Subsystem (WSL) - ネイティブのLinuxバイナリの実行をサポートするWindows 10上で実際のネイティブBashを実行する方法 - を発表しました。 これは、Windows上でユーザーモードのUbuntu Linuxイメージを実行することによって行われます。
つまり、 ls
、 grep
、 top
、 chmod
などのLinuxコマンドラインツールを実行できます。 本物のUbuntuを実行しているので、 lsb-release -a
を実行すると以下のような出力が得られます。
apt-get
とその仲間を使って、 vim
、 git
、 screen
、 tmux
などのユーティリティをインストールすることも、あるいはnethack:
ゲームをプレイすることもできnethack:
ただし、このシステムはベータ版であり、サーバーのワークロードを対象としていません 。 開発者(および愛好家)にとって、Windows上でLinux中心のアプリケーションを変更することなくテストするためのツールにすぎません。 これはLinuxのGUIアプリケーションやGnomeやKDEなどの環境を実行するためのツールでもありませんが、特定のハックでも可能です。 これをクリアしたので、Windows 10でLinuxシェルがどのように機能するのかを見てみましょう。
Linux用のWindowsサブシステム(WSL)
公式文書によると、「WSLはネイティブのLinux ELF64バイナリをWindows上で実行できるようにするコンポーネントの集まりです」。 それは、Windows NTカーネルの上に仮想化されたLinuxカーネルインターフェースを実装することによって行われます。 つまり、実際のLinuxカーネルのコードは一切使用されません。アプリケーションがLinux固有のシステムコール(syscall)を呼び出すたびに、WSLはそれを同等のWindowsシステムコールに変換します。
仮想マシンとCygwinとの違い
それでは、Windows 10上のLinux Bash Shellが、仮想マシンやCygwinと比べてどのように異なるのかを見てみましょう。
仮想マシン
あなたは考えているかもしれません。 なぜWindowsでLinux VMを使わないのですか?」
仮想マシンと比較して、 WSLは少ないリソースを使用します。 また、共有フォルダやネットワーク共有に頼ることなく、基盤となるWindowsファイルシステムに完全にアクセスできるようにしながら、Linuxと同じようにファイルを操作できます。
サイグウィン
Windows上で人気のあるLinux / Unix系ツールを実行するもう1つの一般的な方法はCygwinです。 2つの方法の最大の違いは、 Cygwinは Windows上でネイティブのLinuxバイナリを実行する方法ではないということです。 Windows上のLinuxディストリビューションに似た機能を提供するGNUおよびオープンソースツールのセットのみを提供します。
一方、 WSLツールは 、Windows上で動作するネイティブのLinux ELF-64コンパイル済みバイナリです。 たとえば、WSLでapt-get install emacs
コマンドを実行すると、公式のUbuntuリポジトリから、Ubuntu 14.04インストールと同じファイルがダウンロードされ、インストールされます。
WSLのユーザー、権限、およびファイルシステム
ファイルシステム階層
WSLは、現在のユーザーの%LocalAppData%\lxss\rootfs
ディレクトリにインストールされてい%LocalAppData%\lxss\rootfs
。 これはWSL環境と呼ばれ、Linuxの「 /
」(ルート)ディレクトリとして機能します。 たとえば、Windowsでのユーザー名がbeebom
場合、LinuxのルートディレクトリはC:\Users\beebom\AppData\Local\lxss\rootfs.
つまり、各Windowsユーザーは自分のWSL環境を持つことができ、 apt-get install
software packagesなどの変更を他のWindowsユーザーに影響を与えることなく行うことができます。
WSLで基礎となるWindowsファイルシステムにアクセスすることは可能です。 すべてのドライブは/mnt.
下にマウントされてい/mnt.
たとえば、 C:\
は/mnt/c
下にマウントされ、 D:\
は/mnt/d
下にマウントされます。
ユーザーと権限
あなたが最初にWSLをインストールするとき、それは新しいデフォルトのLinuxユーザを作成するようにあなたに促します。 このユーザーは現在のWindowsユーザーと同じ名前である必要はなく、一般に別のエンティティとして扱われます。 単一のWindowsユーザーによって制御される複数のLinuxユーザーを作成することもできます。
sudo
コマンドを使用してroot
権限を取得することが可能です。 WSLのroot
になることは、Linux環境およびファイルシステム内でのユーザーの権限にのみ影響することに注意してください。それらは、付与されたWindows特権には影響を与えません。 たとえば、Windowsの管理者権限を持つWSLセッションはcd /mnt/c/Users/Administrator
なることがありますが、管理者権限を持たないBashセッションにはPermission Deniedが表示されます。 sudo cd /mnt/c/Users/Administrator
と入力しても、アクセス許可はWindowsによって制限されるため、Administratorのディレクトリへのアクセスは許可されません。
Linux固有のファイルシステム機能
Linuxは大文字と小文字を区別するシステムです。 つまり、 photo.png
とPhoto.png
は2つの異なるファイルとして扱われます。 Windowsはデフォルトでは大文字と小文字を区別しませんが、それでも大文字と小文字は区別されます。 つまり、 photo.png
とPhoto.png
は2つの異なるファイルとして扱われませんが、 photo.png
とPhoto.png
違いは認識されています。
WSLはLinuxと同じように大文字と小文字を区別します。 WSL環境の外では大文字と小文字だけが異なる2つのファイルを作成することさえ可能です。 ただし、多くのWindowsアプリケーションはこのような状況に対処できず、ファイルの一方または両方を開くことができない可能性があることに注意してください。
同様に、NTFSファイルシステムを実行している場合は、 シンボリックリンクもサポートされています。 ただし、シンボリックリンクはWSL内でのみ機能し、他のWindowsアプリケーションでは解決できません。
Linuxはファイル名内のほぼすべての特殊文字もサポートしますが、Windowsはより制限的です。 ただし、WSLでは、Linuxシステムの環境に限定されていれば、そのような特殊文字を使用できます。
WindowsでLinuxのコマンドラインを実行する準備はできましたか?
そのため、Ubuntu BashまたはLinux Bash Shell(Linux用Windowsサブシステム)は、Windows 10(Anniversary update付き)で動作します。 その作業とともに、Windows上でLinux固有のコマンドを実行する従来の方法とは異なり、それがどのように優れているかについても学びました。 それで、もしあなたがいつもLinuxコマンドを使いたかったのなら、始めて、あなたが質問、コメント、または助言を持っているなら、私たちにコメントセクションで知らせてください。