Windows 10や11でLinuxコマンドを実行する方法(WSL)

Windows 10や11でLinuxコマンドを実行する方法(WSL)

Windows 10や11に搭載された「WSL(Windows Subsystem for Linux)」では、Windows上でLinuxコマンドを実行したり、WindowsコマンドとLinuxコマンドをパイプなどを使って組み合わせて実行することができます。

そこでここでは、Windows 10でコマンドプロンプトからWSLを呼び出して、WindowsコマンドとLinuxコマンドを組み合わせた利用例や、利用時の注意点を紹介したいと思います。

WSLの有効化と、Linuxディストリビューションのインストール方法については、以下の記事で紹介していますので、導入がまだの方はそちらを参考にしてみてください。

Windows 10や11でLinuxを利用したいなら「WSL2」
ここでは、Windows 10や11に搭載されている「WSL2(Windows Subsystem for Linux 2)」を使って、Windows上にLinux環境を構築する方法をわかりやすく紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit1803

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 10や11でLinuxコマンドを実行する方法(WSL)

この場合は、Windows上で文字コードをUTF8に変換してからWSLのLinux環境へ渡すことで文字化けせずに処理することができます。(ここでは、文字コードを変換をするために「nkf」というツールを使用しています。)

> dir | nkf -w | wsl while read s; do echo -e ${s}; done;

Windows 10や11でLinuxコマンドを実行する方法(WSL)

Memo

「nkf」は、文字コードの変換作業ではよく使われる定番のツールです。コマンドプロンプトで作業する機会が多い方は、用意しておくと便利です。

Windowsでコマンドで文字コードを変換する方法「nkf」
ここでは、Windowsでコマンド処理で文字コードを変換する方法として「nkf(Network Kanji Filter)」を使った方法を紹介します。

パス名

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環境があれば別途のツールをインストールすることなく、手軽に利用できてとても便利ですよ。ご活用あれ。