■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 . . . . . . . . .: 有効