■Windows11でwsl2(Ubuntu)を使ってみる
Home版が乗る程度のしょぼいスペックなので、HW情報は省略。
>systeminfo | find "Windows 11"
OS 名: Microsoft Windows 11 Home
■基本的なやり方は以下の通り
https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands
■ターミナル(管理者)で作業する
今回はデフォルトのUbuntu
>wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9
>wsl --install
■インストールが完了したら、システムの再起動、アプリとして名前を選択して起動する。
>wsl --list --verbose
NAME STATE VERSION
* Ubuntu Running 2
■localeはUTF-8。
>wsl locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
■wslの出力結果はUTF-16のBOMなし、リトルエンディアン。
UTF-8じゃないんだーというのは置いといて、オプションは「--help」で確認する。
※「chcp 850」でUTF-16LE用にして、結果をどうこうしようという使い方には向いていない。
「Select-String」、「find/findstr」、「wsl grep」などいずれも。
>wsl --help > wsl_help.txt
■リモートの「ja_JP.UTF-8」なLinuxで見ると、
$ nkf -W16L -w80 wsl_help.txt | grep "\-\-version"
--version、-v
--version <Version>
■先頭に「fe ff」が無いのでBOMなし。
「Copyright」の「Co」が見える。
$ dd if=wsl_help.txt bs=3 count=1 | hexdump -C
1+0 レコード入力
1+0 レコード出力
3 bytes copied, 5.3683e-05 s, 55.9 kB/s
00000000 43 00 6f |C.o|
00000003
■ちなみにBOMをつけると先頭に「fe ff」がこう見える。
「Copyright」の「Co」が見える。
$ nkf -W16L -w16lb wsl_help.txt | dd if=/dev/stdin bs=8 count=1 | hexdump -C
1+0 レコード入力
1+0 レコード出力
00000000 fe ff 00 43 00 00 00 6f |...C...o|
8 bytes copied, 0.000673017 s, 11.9 kB/s00000008
■WSL内のUbuntuを使うにはこうすればなんとかなる。
UTF-16LEのBOMなしをSJISに変換して出力したものを「wsl grep」で処理する。
「Select-String」「find」も一応これで使えるが、
「findstr」だと化けるパターンがあったので、常に意図した結果が得られるかのテストが必要。
$ sudo apt-get install -y nkf
>wsl --help | wsl nkf -W16L -s | find "--version"
--version、-v
--version <Version>
■既定のWSL2。WSL1は使わない。
>wsl --status
既定のディストリビューション: Ubuntu
既定のバージョン: 2
WSL1 は、現在のマシン構成ではサポートされていません。
WSL1 を使用するには、"Linux 用 Windows サブシステム" オプション コンポーネントを有効にしてください。
■Ubuntuの日本語化
sudo apt-get update
sudo apt upgrade
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8
■wslからUbuntuを再起動
>wsl -t Ubuntu
この操作を正しく終了しました。
■再びアプリとしてのUbuntuを開く
$ locale
LANG=ja_JP.UTF8
LANGUAGE=
LC_CTYPE="ja_JP.UTF8"
LC_NUMERIC="ja_JP.UTF8"
LC_TIME="ja_JP.UTF8"
LC_COLLATE="ja_JP.UTF8"
LC_MONETARY="ja_JP.UTF8"
LC_MESSAGES="ja_JP.UTF8"
LC_PAPER="ja_JP.UTF8"
LC_NAME="ja_JP.UTF8"
LC_ADDRESS="ja_JP.UTF8"
LC_TELEPHONE="ja_JP.UTF8"
LC_MEASUREMENT="ja_JP.UTF8"
LC_IDENTIFICATION="ja_JP.UTF8"
LC_ALL=
$ sudo dpkg-reconfigure tzdata;sudo apt -y install manpages-ja manpages-ja-dev
$ date
2023年 1月 29日 日曜日 23:41:15 JST
$ man ls | head -5
LS(1) ユーザーコマンド LS(1)
名前
ls - ディレクトリの内容をリスト表示する
■ネットワーク
Ubuntu内のサブネットは/20。
Hyper-Vでも使われる仮想スイッチのWSL用。
仮想ブリッジを使用して、仮想ブリッジ以下のDHCPで割り振られたIPアドレスが使用されている。
基本的に外に出ていくためのものなので、サービス提供等は別に設定する必要がある。
$ ip a show dev eth0 | awk '/inet/&&!/inet6/'
inet XXX.XXX.128.183/20 brd XXX.XXX.143.255 scope global eth0
$ ip route | awk '/via/'
default via XXX.XXX.128.1 dev eth0 proto kernel
>ipconfig /all
~省略~
イーサネット アダプター vEthernet (WSL):
接続固有の DNS サフィックス . . . . .:
説明. . . . . . . . . . . . . . . . .: Hyper-V Virtual Ethernet Adapter
物理アドレス. . . . . . . . . . . . .: 00-15-XX-XX-XX-XX
DHCP 有効 . . . . . . . . . . . . . .: いいえ
自動構成有効. . . . . . . . . . . . .: はい
リンクローカル IPv6 アドレス. . . . .: fe80::XXXX:XXXX:XXXX%33(優先)
IPv4 アドレス . . . . . . . . . . . .: XXX.XXX.128.1(優先)
サブネット マスク . . . . . . . . . .: 255.255.240.0
デフォルト ゲートウェイ . . . . . . .:
DHCPv6 IAID . . . . . . . . . . . . .: 55XXXXXX7
DHCPv6 クライアント DUID. . . . . . .: 00-01-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX
NetBIOS over TCP/IP . . . . . . . . .: 有効