WSL2～WindowsでLinux～（その２：色々活用してみる）

この記事は以下の続きです。
[WSL2　～WindowsでLinux～（その１：導入編）](https://qiita.com/ka2taka/items/521c595ba045dd98d9f7)

# 1. はじめに
### この記事の概要
前編ではWSL2でUbuntu20.04を導入しました。
Ubuntu-20.04を設定したり色々と使ってみます。

1. プロキシーの設定をしてみる
2. パッケージのアップデートをしてみる
3. 使い慣れたツール（ifconfigなど）を導入してみる
4. コマンドプロンプトからWSL内部のコマンドを使ってみる
5. SSHでUbuntuに接続する環境を整えてみる（Windows環境からUbuntuにSSH）


# 2. 本編
## 2-1. プロキシーの設定をしてみる
必要に応じてプロキシーを設定します。
githubのコミュニティを見ると設定方法としては２種類ありそうです。
https://github.com/microsoft/WSL/issues/1570

- 環境変数による設定
- apt用の設定

curlやwgetなどのツールでもプロキシを使うので、環境変数を使う事にしました。

### (1)~/.bashrcの編集
```shell:コマンド実行
cd ~/
vi .bashrc
```
```shell:~/.bashrc
export http_proxy=http://proxy-server:PortNumber
export https_proxy=http://proxy-server:PortNumber
```
### (2)環境変数を反映する為にログアウト&ログイン
```shell:ログアウト
exit
```
```shell:再ログイン
wsl -d Ubuntu-20.04
```

### 参考：apt用の設定（今回は設定しない）
```
sudo vi /etc/apt/apt.conf.d/proxy.conf
```
```
Acquire::http::Proxy "http://proxy-server:PortNumber";
Acquire::https::Proxy "http://proxy-server:PortNumber";
```

## 2-2.パッケージのアップデートをしてみる
```shell:パッケージのアップデート
sudo -E apt-get -y update
```
「-E」は、環境変数を引き継ぐオプションで、proxyを設定している場合に必要です。


## 2-3.使い慣れたツールを導入してみる
初期段階では以下のような使い慣れた基本的なコマンドがありませんでした。
- ifconfig
- netstat
- brctl
- traceroute

上記のコマンドが無いのはipコマンドに移行しているからだと思いますが、使い慣れたコマンドが欲しいので導入してみます。

### (1) ネットワーク関連のツールをインストール
```shell:コマンド
sudo -E apt -y install net-tools <==== arp,ifconfig,netstat,rarp,route 
sudo -E apt -y install bridge-utils <==== brctl
sudo -E apt -y install inetutils-traceroute <=== traceroute
```

### (2) Pythonを入れる
python3という名前で最初から入ってました。

```shell:コマンド
$ sudo -E apt -y install python3
```
```shell:実行結果
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3 is already the newest version (3.8.2-0ubuntu2).★
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
```


## 2-4. Win10のコマンドプロンプトからWSL内部のコマンドを活用してみる
### (1)dateコマンドを実行してみる

```dosbatch:コマンドプロンプトからWSL内部のdateを実行してみる
C:\>wsl -d Ubuntu-20.04 --exec date --date=now
```

```dosbatch:実行結果
Sun Dec 20 14:09:12 JST 2020
```

### (2)gawkを実行してみる
① カンマ区切りレコードの２つ目の項目を抜き出す

```dosbatch:実行
C:\>echo "aaa,bbb,ccc" | wsl -d Ubuntu-20.04 --exec gawk -F "," "{print $2}"
```

```dosbatch:結果
bbb
```

② windows上のCSVファイルからレコードを読みだしてWSLのawkで大文字にしてみる

```dosbatch:実行
C:\>type test.csv
id,name
1,tanaka
2,abe

C:\>type test.csv | wsl -d Ubuntu-20.04 --exec gawk -F "," "{ print t($2)}"
```

```dosbatch:結果
NAME
TANAKA
ABE
```
③ awk.batで呼び出せるようにする。

パス上にawk.batを作る。

```dosbatch:awk.bat
wsl -d Ubuntu-20.04 --exec gawk %*
```

```dosbatch:実行してみる
C:\>type test.csv | awk -F "," "{ print t($2)}"
```

```dosbatch:結果
NAME
TANAKA
ABE
```
### (3)時刻同期をしてみる
```shell:wsl上で時刻同期を実行する
$ sudo hwclock -s
```


## 2-5.SSHでUbuntuに接続する環境を整えてみる（Windows環境からUbuntuにSSH）
### (1)インストール
```shell:インストール
sudo -E apt -y install openssh-server 
```
```shell:実行結果
略
0 upgraded, 0 newly installed, 0 to remove and 74 not upgraded.
```
既に入ってた！

### (2)認証方法の設定
```shell:/etc/ssh/sshd_configを編集する
$sudo -E vi /etc/ssh/sshd_config 
```
```shell:パスワード認証をONにする
- PasswordAuthentication no
+ PasswordAuthentication yes
```
ローカル環境なのでセキュリティは緩めです。

### (3)ホストキーの生成
```shell:鍵の作成コマンド
$ sudo ssh-keygen -A
```
```shell:結果
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
```

### (4)サービスの起動
```shell:サービス起動コマンド
$sudo service ssh restart
```
```shell:実行結果
 * Restarting OpenBSD Secure Shell server sshd                    [ OK ]
```

### (5) クライアントからログイン
```shell:Windowsコマンドプロンプト
C:\>ssh -l [Ubuntuのユーザ名] [UbuntuのIPアドレス]
[ユーザ]@[IPアドレス]'s password:●●●●●●　　<===== ログインのパスワード
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 4.19.128-microsoft-standard x86_64)

***途中略***

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

[User]@[PC-NAME]:~$
```


# まとめ
WindowsとWSLの間をパイプでつなぐテクニックは、色々と応用が効きそうです。

# 参考
https://docs.microsoft.com/ja-jp/windows/wsl/interop
https://docs.microsoft.com/ja-jp/windows/wsl/release-notes
https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config#configuration-options
https://roy-n-roy.github.io/Windows/WSL%EF%BC%86%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A/wslconfig/