ICT Diary

Network(主にCisco系)、Server(RedHat系)、Program(適当)を気まぐれにUPしていく。

Windows10 WSL2 構築 ~ WindowsでLinux環境の構築 ~

Windows10 WSL2 構築 ~ WindowsLinuxコマンド実行環境の構築 ~

WindowsLinux環境を用意出来るもの

WSL以外にもWindows環境でLinuxコマンドを使用する環境を構築する方法は存在する。
[Cygwin], [VMware], [VirtualBox], [WSL], [WSL2]などがある。(WSLとWSL2は明確に異なるので注意が必要)
[VMware], [VirtualBox]はホスト型仮想化でVM(Linux)を動かしその上でコマンドを実行。
[Cygwin], [WSL]は仮想VM内ではなくWindows環境内でLinuxコマンドを使用できる。
[WSL2]はHyper-V仮想化環境で動作するLinuxだが、[Cygwin]のようにWindows環境内の様な使い方が出来る。

WSLのインストール

01.管理者権限で[PowerShell]を起動

PowerShellを右クリックで[管理者として実行]で起動する

02.サブシステムを有効化

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

03.仮想マシンの有効化

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

04.Linuxカーネル更新

以下のリンクより更新用のmsiファイルをDLする
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
DLした[wsl_update_x64.msi]をダブルクリックして実行

05.WSL2を既定として設定

wsl --set-default-version 2

06.任意のLinuxディストリビューションを入手する

以下のマニュアルの中にあるDLリンクから任意のディストリビューションを入手する
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#downloading-distributions

07.ディストリビューションのインストール

入手したディストリビューションファイルをダブルクリック
表示されたインストールウィンドウの[準備が完了したら起動]にチェックを入れておく
インストールが終わったら自動起動する (しなければ手動で起動)

08.セットアップ

起動したら以下のように新規ユーザ名やPW求められるので、入力する

09.WSL2関係のコマンド

  • Status&Version確認: wsl -l -v
  • WSL停止: wsl -t [WSL Name]
  • WSL全停止: wsl --shutdown
  • WSL起動: wsl -d [WSL Name]

10.参考リンク

便利な環境整備

前提: WSL2のDirectory構造

WSL2においてWindowsで認識されているフォルダやファイルを操作する際は[/mnt/]配下に配置(マウント)されたディレクトリから行う

起動後(Login後)のカレントディレクトリを任意の場所へ変更

1.WSL2ユーザのホームディレクトリに移動

cd ~ (~⇒チルダ)

2.[.bashrc]を変更

2-1.[.bashrc]をバックアップする

バックアップ実施 (cp .bashrc [バックアップファイル名])

cp .bashrc .bashrc_org

作成されたことを確認

ls -al 

2-2.ファイルを変更する

起動直後はWindowsユーザディレクトリに移動していることを想定
移動先へのリンクを確認しておく

/mnt/c/Users/[Windowsユーザ名]/ 

[.bashrc]ファイルを開く

vi .bashrc 

末尾に以下の一文を追加

cd /mnt/c/Users/[Windowsユーザ名]/ 

2-3.WSL2に入りなおすして確認

  • 既存のウィンドウを右上の[×]で終了する
  • 再度WSL2を起動する
  • 現在のディレクトリを確認 (出力結果に問題無ければ完了)
pwd 

ネットワークドライブをマウントする

概要

GoogleドライブやPCに接続したUSBの様な記録媒体をWSL上で仕様するには通常のLinuxと同じくマウントする必要がある。
GoogleDriveは人によっては自動で認識してマウントする可能性もある

手順

1.WSLを起動

2.マウント先のディレクトリ作成

sudo mkdir /mnt/[ディレクトリ名]

3.任意のドライブのマウント

sudo mount -t drvfs [ドライブ文字]: /mnt/[マウント先ディレクトリ]

4.マウントされていることを確認

ドライブ先のディレクトリやファイルが出力されたら完了

ls /mnt/[マウント先ディレクトリ]

5.GoogleDriveを想定

GoogleDriveをマウントする例(ドライブ文字はGを想定)

sudo mkdir /mnt/g
sudo mount -t drvfs G: /mnt/g
ls /mnt/g

よく使うディレクトリ(フォルダ)へのリンクを作成する

1.リンクを配置したいディレクトリへ移動

cd [ディレクトリ]

2.シンボリックリンクの作成

リンク先のディレクトリ内容の確認

ls [ディレクトリ絶対パス]

リンクの作成

ln -s [リンク先ディレクトリ絶対パス] [リンク名]

3.リンクが正常に機能しているか確認

ls [リンク名]
cd [リンク名]

VS CodeのデフォルトターミナルをWSL2に変更

1.設定を開く

2.ターミナルの変更

設定を開き以下の設定IDで検索して、値を[Ubuntu (WSL)]に変更
(VS CodeではインストールされたWSLを自動で認識される模様)

terminal.integrated.defaultProfile.windows

3.ターミナルの起動

VScodeショートカットを実行: [Ctrl] + [Shift] + [@]
起動したターミナルがWSLになっていることを確認

Windowsコマンドプロンプトコマンドを使用できるようにする

概要

デフォルトもままでは、Linuxで動いているので当然コマンドプロンプトのコマンドは使えない。
WSL上でコマンドプロンプトのコマンドを使用するには多少強引な方法が必要になる。
方法は絶対パスで直接コマンドのプログラムを起動を行う。
絶対パスでのコマンド実行をAliasに登録しておく

手順

1.コマンドプロンプトを起動

2.WSLを起動

3.コマンドプロンプトで使用したいコマンドの絶対パスを確認

where [コマンド]

4.Aliasの登録

[.bashrc]を開く

cd ~
vi .bashrc 

末尾に以下の書式でコマンドを登録
絶対パスの[C:]を[/mnt/c/]へ、[]を[/]へ置換して登録

alias [名前]="[コマンドプログラム絶対パス]"

5.aliasで登録したコマンドを実行して紐づけの確認

6.ipconfigのalias設定例

# コマンドプロンプト作業
C:\>where ipconfig
C:\Windows\System32\ipconfig.exe

# WSL作業
cd ~
vi .bashrc

# ↓開いたファイルの末尾に追記
alias ipconfig="/mnt/c/Windows/System32/ipconfig.exe"

7.実際に使用して確認する

8.おまけ ネットワークコマンド系のパス

コマンドの絶対パス

/mnt/c/Windows/System32/ipconfig.exe
/mnt/c/Windows/System32/ROUTE.EXE
/mnt/c/Windows/System32/nslookup.exe
/mnt/c/Windows/System32/TRACERT.EXE
/mnt/c/Windows/System32/ARP.EXE
/mnt/c/Windows/System32/ipconfig.exe
/mnt/c/Windows/System32/tree.com
/mnt/c/Windows/System32/ftp.exe

alias登録用

alias ipconfig="/mnt/c/Windows/System32/ipconfig.exe"
alias route="/mnt/c/Windows/System32/ROUTE.EXE"
alias nslookup="/mnt/c/Windows/System32/nslookup.exe"
alias TRACERT="/mnt/c/Windows/System32/TRACERT.EXE"
alias ARP="/mnt/c/Windows/System32/ARP.EXE"
alias ipconfig="/mnt/c/Windows/System32/ipconfig.exe"
alias tree="/mnt/c/Windows/System32/tree.com"
alias tree="/mnt/c/Windows/System32/ftp.exe"
alias Test-NetConnection="/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe Test-NetConnection"