Windows 10や11に搭載された「WSL(Windows Subsystem for Linux)」では、Windows上でLinuxコマンドを実行したり、WindowsコマンドとLinuxコマンドをパイプなどを使って組み合わせて実行することができます。
そこでここでは、Windows 10でコマンドプロンプトからWSLを呼び出して、WindowsコマンドとLinuxコマンドを組み合わせた利用例や、利用時の注意点を紹介したいと思います。
WSLの有効化と、Linuxディストリビューションのインストール方法については、以下の記事で紹介していますので、導入がまだの方はそちらを参考にしてみてください。
目次
WSLのLinuxコマンドを実行するには
Windows上でWSL上のLinuxコマンドを呼び出すには、コマンドプロンプトなどでLinuxコマンドの前に「wsl 」を付けて実行します。(なお、WSL環境(bash)を明示的に起動しておく必要はありません。)
Linuxコマンドの前に付ける「wsl」は「C:\Windows\System32\wsl.exe」というプログラムで、実行するとWSL上にインストールされているLinuxディストリビューションのシェルを呼び出し、引数に指定されたコマンドを実行します。
たとえば、Linuxの「ls -la」コマンドを実行したいときは、コマンドプロンプト上で「wsl ls -la」と入力します。
複数のディストリビューションをインストールしている場合で、ディストリビューションを指定して実行したいときは「wsl -d ディストリビューション名 ls -la」と入力します。
> wsl ls -la
total 30720
drwxrwxrwx 1 hoge hoge 512 Jun 24 19:44 .
drwxrwxrwx 1 hoge hoge 512 Jun 19 14:18 ..
-rwxrwxrwx 1 hoge hoge 10485760 Apr 12 05:30 10m_1.dat
-rwxrwxrwx 1 hoge hoge 10485760 Apr 12 05:30 10m_2.dat
-rwxrwxrwx 1 hoge hoge 10485760 Apr 12 05:30 10m_3.dat
drwxrwxrwx 1 hoge hoge 512 Apr 12 07:16 work
WindowsコマンドとLinuxコマンドを組み合わせるには
パイプで連結すれば、WindowsコマンドとLinuxコマンドを組み合わせて実行できます。
たとえば、dirコマンド(Windowsコマンド)で拡張子がhtmlのファイルを出力し、wcコマンド(Linuxコマンド)でファイル数をカウントする場合、次のように実行できます。
> dir /b /s *.html | wsl wc -l
5
Linuxコマンド実行時の注意点
文字コード
WindowsコマンドとWSLのLinuxコマンドを組み合わせて利用する場合、文字コードに注意が必要です。
多くのLinuxディストリビューションでは、標準の文字コードとして「UTF-8」が使用されていますが、Windows(日本語版)のコマンドプロンプトでは「Shift_JIS」が標準の文字コードとなっています。そのため、日本語が含まれているデータをパイプでWSLのLinux環境に渡す場合、文字コードを変換してから渡さないと日本語が文字化けした状態で処理されることがあります。
たとえば、次のようにdirコマンドの結果をWSLのLinux環境で表示しようとすると、そのままでは日本語が文字化けしてしまいます。
> dir | wsl while read s; do echo -e ${s}; done;
この場合は、Windows上で文字コードをUTF8に変換してからWSLのLinux環境へ渡すことで文字化けせずに処理することができます。(ここでは、文字コードを変換をするために「nkf」というツールを使用しています。)
> dir | nkf -w | wsl while read s; do echo -e ${s}; done;
「nkf」は、文字コードの変換作業ではよく使われる定番のツールです。コマンドプロンプトで作業する機会が多い方は、用意しておくと便利です。
パス名
WindowsとWSLのLinux環境ではパス名の表記が異なり、Windowsの「C:」はWSLのLinux環境では「/mnt/c/」になります。
WSLにはパス表記を変換してくれるコマンド「wslpath」が用意されており、Windowsコマンドから渡されたパスの表記を、Linux環境のパス表記に変換することができます。
コマンド | 説明 |
---|---|
wslpath <Windowsパス> | WSL向けのパスに変換する |
wslpath -a <Windowsパス> | WSL向けの絶対パスに変換する |
wslpath -w <WSLパス> | WSLからWindowsパスに戻す(パス区切りは「」) |
wslpath -m <WSLパス> | WSLからWindowsパスに戻す(パス区切りは「/」) |
あとがき
Windows上でLinuxコマンドを使いたい場合、WSL環境があれば別途のツールをインストールすることなく、手軽に利用できてとても便利ですよ。ご活用あれ。