皆さんこんにちは、ネットワーク事業部の原口です。
Windows環境で「ちょっとしたシェルスクリプトの検証がしたい!」「普段からLinuxに触れているので、Windowsでも使い慣れたコマンドで効率よく作業したい!」などを思ったことがあるのではないでしょうか。「Windows Subsystem for Linux 2」を使用することにより、軽量かつ簡単に利用できるようになります。
目次
Windows TerminalからWSL2を操作する
今回は、既にWSL2のセットアップはできており、Ubuntuが利用可能な状態からご説明いたします。
WSL2のインストール等はこちらをご確認ください。
[WSL を使用して Windows に Linux をインストールする(Microsoft)]
https://docs.microsoft.com/ja-jp/windows/wsl/install
Windows Terminalから以下のコマンドを実行して「WSL2の有効」と「既定の Linux サブシステム」を確認します。
1 |
wsl -l -v |
「NAME」欄に「* Ubuntu-20.04」と表示されていれば、Ubuntu-20.04が規定となっています。
「VERSION」欄に”2″と表示されていれば、WSL2が有効となっています。
※WSLの場合「VERSION」欄が”1″と表示されます。
Windows Terminalから「WSL」コマンドを実行し、WSL2用Ubuntuを起動します。
作成したユーザとディレクトリが表示されたら成功です。
1 |
wsl |
その他のWSLコマンドの例は以下にようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
## 使用可能な Linux ディストリビューションを一覧表示する wsl -l -o ## ディストリビューションを指定して起動 wsl -d {ディストリビューション名} ## ディストリビューションを指定して終了 wsl -t {ディストリビューション名} ## デフォルトのディストリビューションを設定 wsl -s {ディストリビューション名} ## ディストリビューションのWSLバージョンを2に設定 wsl --set-version {ディストリビューション名} 2 |
「wsl –help」で、WSLコマンドのオプションとコマンドの一覧を確認することができますので、気になる方は調べてみてください。
LinuxからWindows環境へアクセス
シンボリックリンク作成
Linux側からWindows側のフォルダにアクセスする場合は、「/mnt/{ドライブ名}
」からアクセスが可能です。WindowsのCドライブの場合は「/mnt/c
」にマウントされています。
Linux側からWinodws環境内のフォルダにアクセスする際に、フォルダパスが深くなってしまうことがあります。
例として、Windows環境内のドキュメントファイルを参照する際に
「/mnt/{ドライブ名}/Users/{ユーザ名}/Documents
」へ移動する必要があるため、
ファイルパスが深くなってしまい、素早くアクセスするにはネックとなります。
LinuxのホームディレクトリからWindowsのドキュメントフォルダに簡単にアクセスできるよう、シンボリックリンクを作成しましょう。
今回の環境では、Ubuntuのインストール時にLinuxのユーザとして「testuser」というユーザを登録しています。
- シンボリック名:to_documents
- シンボリック作成場所(Linux側) :/home/testuser
- シンボリック参照先(Windows側) :/mnt/c/Users/haraguchi/Documents
1 |
$ ln -s /mnt/c/Users/haraguchi/Documents ~/to_documents |
Linuxのホームディレクトリにシンボリックリンクが作成されていることが確認できます。
作成したシンボリックリンクに移動し、Windows側の「Documents」フォルダに移動できたことが確認できます。
LinuxコマンドでWindows環境を操作
ファイル名を置換する(rename)
スマートフォンやデジタルカメラで撮った沢山の写真をマウスやキーボードを使用して、名前を変更をしていくには大変な作業になってしまいます。
そこで、Linuxコマンドを用いればまとめてファイル名を変更できます。
例えば下記のような複数のファイルをリネームしてみましょう。
「rename」コマンドを使用するため、以下のコマンドでインストールします。
1 |
$ sudo apt install rename |
「rename」コマンドを使用して「photo_1.jpg」~「photo_20.jpg」から「image_1.jpg」~「image_20.jpg」に変更します。
対象のファイルが複数存在する時には、ワイルドカードを用いて末尾に「jpg」を含むファイルを対象として処理をするコマンドを実行します。
1 |
$ rename "s/photo/image/" *.jpg |
「photo_1.jpg」~「photo_20.jpg」⇒「image_1.jpg」~「image_20.jpg」
に変更されていることが確認できます。
ファイルの差分を調べる(vimdiff)
更新したファイルと更新前のファイルの差分をチェックする場合、フリーソフトなどを使用する方法もありますが、Linuxには簡単に差分を確認できるコマンドがあります。
以下の作業環境として、同じフォルダ内に「List1.txt」と「List2.txt」が存在します。
「List1.txt」と「List2.txt」の中身は以下のとおりで、ファイルの中身に差異があります。
「diff」コマンドでも差分確認ができますが、表示結果が見にくいので今回は「vimdiff」コマンドを用いた差分確認を行います。
1 |
$ vimdiff List1.txt List2.txt |
「vimdiff」コマンドでは、文字列の差分をハイライトで表示され、視覚的で見やすいことが特徴となっております。差分をチェックする際には非常に便利なコマンドとなります。
ファイル内の文字を検索する(grep)
Windowsからファイルの中身を検索する際に、エクスプローラーの設定を行い検索ボックスからファイルの中に記述されている文字を検索します。
素早くファイルの中身の記述を検索するにはLinixコマンドが有効です。
作業環境としまして、先程と同じ環境を使用します。
同じフォルダ内に「List1.txt」と「List2.txt」が存在します。
ファイルの中身検索をする際には「grep」コマンド使用します。
現在のフォルダから「りんご」が含まれるファイルを抽出していきます。
「-n」オプションを付けることにより、検索結果に行番号を表示することができます。
1 |
$ grep -n "りんご" * |
次に、現在のフォルダから「300」が含まれるファイルを抽出していきます。
1 |
$ grep -n "300" * |
ファイル名で検索する(find)
次にファイルの名前検索をしていきます。Windowsではエクスプローラーの検索ボックスから検索ができますが、Linuxコマンドを使用することにより簡単に検索が可能となります。
以下の作業環境とし、様々なファイルが混在している環境で行います。
ファイルやフォルダを検索する際には「find」コマンドを使用します。
「売上」が含まれるファイルを検索します。
「-name」オプションで検索するファイル名を指定して、ワイルドカード「*」で「売上」を含むファイルを検索します。
1 |
$ find -name "*売上*" |
「-newermt」オプションを使用することで「~より新しいファイル」「~より古いファイル」の検索が可能となります。
2022年01月01日から2022年7月7日18時00分の期間に変更されたファイルを検索します。
1 |
$ find -newermt "20220101" ! -newermt "20220707 18:00" |
シェルスクリプト
これまでご紹介したLinuxコマンドを組み合わせて複雑な処理を行ったり、
繰り返しの操作を自動的に行ったりするための仕組みとして『シェルスクリプト』があります。
当該フォルダをzipで圧縮して、別のフォルダに退避させる処理を行うシェルスクリプトを実行していきます。作業環境として先程の環境を流用します。
バックアップシェルスクリプト
バックアップ元の「/mnt/c/Users/haraguchi/Documents」をzipで圧縮し、バックアップ先の「/mnt/c/Users/haraguchi/backup」に移動させます。
「testuser」のホームディレクトリ直下にシェルスクリプトを作成します。
- シェルスクリプト名:backup_dir.sh
- バックアップ元:/mnt/c/Users/haraguchi/Documents
- バックアップ先:/mnt/c/Users/haraguchi/backup
1 2 |
$ cd ~ $ vi backup_dir.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash #バックアップ元・先の情報 BKDIR="/mnt/c/Users/haraguchi" TADIR="/mnt/c/Users/haraguchi/backup" #アーカイブ名定義 DATE=$(date "+%Y%m%d_%H%M%S") ARCHIVENAME="backup_${DATE}" #ファイル・ディレクトリ名定義 DIR="Documents" #圧縮処理 cd ${BKDIR}; zip -r $TADIR/${ARCHIVENAME}.zip $DIR |
実行権限を付与して、以下のコマンドを実行します。
1 2 |
$ chmod 755 backup_dir.sh $ ./backup_dir.sh |
バックアップ先「/mnt/c/Users/haraguchi/backup」にzipで圧縮したデータを確認します。
1 |
$ cd /mnt/c/Users/haraguchi/backup |
まとめ
Windows terminalとWSL2を利用することで、LinuxコマンドをWindows環境で活用する方法をご覧いただきました。
今回「Ubuntu-20.04」を使用しましたが、その他のWSL2版ディストリビューションとして「Debian」「kali-linux」等が使用できます。2022年4月からWSL2版「AlmaLinux」が使用可能になり、RHEL系のディストリビューションを長年使用しているユーザ視点では、WSLが身近な存在になってきているのではないでしょうか。今回ご紹介したLinuxコマンドを使用したファイル操作以外の用途では、Windows環境で「WSL2」+「Docker」を使用することにより、手軽にLinuxの開発環境を用意することができます。Linuxコマンドを使用してWindows環境のファイルを操作したり、シェルスクリプトなどの検証したりするには非常に便利なツールとなります。一度お使いになられてはいかがでしょうか。