WindowsとLinuxの相互利用

ここ数回、Windows TerminalにVisual Studio Codeと、Windowsで動作するアプリケーションを取り上げた。これらはWSL(Windows Subsystem for Linux)で動作するLinuxを利用する上で便利なアプリケーションであり、今後ますます重要度は増すことになりそうだ。

WSLの大きな特徴の1つに、WindowsとLinuxのシームレスな統合がある。仮想化アプリケーションでLinuxを実行する場合と異なり、WSLではWindowsとLinuxの境界が曖昧になるような仕組みが導入されている。この仕組みは、WSL2になっても引き継がれることになっている。

今回は、WindowsとLinuxのシームレスな利用という観点から操作方法を紹介しよう。知っておくと便利だし、覚えるのも簡単な操作なのでぜひ身につけていただければと思う。

WindowsからLinuxを使う

次のスクリーンショットはWindows Terminalで動作するPowerShell 7のプレビュー版だ。Windows TerminalもPowerShell 7もどちらもプレビュー版だが、今後のWindows 10でどちらもデフォルトのアプリケーションとして使われていく可能性が高い。

  • PowerShell 7 on Windows Terminal

    PowerShell 7 on Windows Terminal

この状態でLinuxのコマンドを実行しようとしても、次のようにエラーが表示される。

  • PowerShellから直接Linuxのコマンドを実行することはできない

    PowerShellから直接Linuxのコマンドを実行することはできない

Windowsからはwslコマンドを使うと、Linuxのシェルを起動しなくてもコマンドを実行できる。例えば、次のスクリーンショットはPowerShell 7から「wsl neofetch」と実行して、Linux側でneofetchコマンドを実行した結果が表示されている。見た感じはPowerShell 7でneofetchというコマンドが表示されたように見える。

  • PowerShell 7からwslコマンドを使ってLinux側のコマンドを実行

    PowerShell 7からwslコマンドを使ってLinux側のコマンドを実行

PowerShellはlsというエイリアスも持っている。lsはUNIX系オペレーティングシステムで代表的なコマンドだが、エイリアスはあくまでもWindowsのコマンドレットへのエイリアスだ。次のようにwslコマンドをかませると、Winodws側ではなくLinux側のlsコマンドが実行されるようになる。

  • wsl lsでLinux側のlsコマンドが実行される

    wsl lsでLinux側のlsコマンドが実行される

wslコマンドを使うと、Linux側のコマンドの実行結果を利用しやすいという面もある。例えば、次のスクリーンショットはwsl lsでLinuxのlsコマンドの実行結果をファイルに出力し、それをメモ帳で編集するというもの。

  • wsl lsでLinuxのlsコマンドを実行し、出力結果をWindowsのメモ帳で編集する

    wsl lsでLinuxのlsコマンドを実行し、出力結果をWindowsのメモ帳で編集する

  • 起動してきたメモ帳

    起動してきたメモ帳

こんな感じでLinux側でコマンドを実行して、出力結果をWindows側のアプリケーションで編集するといったようなことが、wslコマンドを使用すると簡単に実施できる。主にWindowsを利用し、時々Linuxのコマンドが実行できればよいといった場合はこの使い方が便利だ。

LinuxからWindowsを使う

実は、同じようなことは逆からもできる。まず、PowerShell 7で引数を指定せずにwslコマンドを実行すると、次のようにLinux側のインタラクティブシェルが起動してくる。

この状態で、直接Windowsのコマンドを実行することができる。Linux側からはwslコマンドをかませる必要もなく、直接Windows側のコマンドを実行できる(WSL2になると、この辺りの挙動は変わる可能性もある)。

  • wslコマンドを引数なしで実行してLinuxシェルに入り、そこからWindowsのアプリケーションを実行

    wslコマンドを引数なしで実行してLinuxシェルに入り、そこからWindowsのアプリケーションを実行

  • Linux側から起動されたメモ帳

    Linux側から起動されたメモ帳

こんな感じで、Linux側からWindowsのコマンドを実行することができる。Linuxの操作に慣れてきた、または、慣れているなら、こちらほうが便利かもしれない。

こんな感じでWSLを利用する場合、WindowsとLinuxの間のシームレスなやり取りが可能だ。特に、wslコマンドでLinux側のコマンドを実行するのは便利な機能なので覚えておいて損はないと思う。