コンテンツにスキップ

Windows Subsystem for Linux (WSL)

  • >で始まるコマンドは PowerShell でのコマンドを表す。
  • $で始まるコマンドは Linux でのコマンドを表す。

インストールする

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# WSL2を使う
> wsl --set-default-version 2

# インストールできるディストリビューション一覧を表示する
> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

# Debianのインストール
> wsl --install -d Debian

# 必要なパッケージのインストール
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install git
$ sudo apt install python3 python3-venv
$ sudo ln -s /usr/bin/python3 /usr/bin/python

# WSLにインストールしているディストリビューション一覧を確認する
> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Debian (既定)

# WSLのディストリビューションをアンインストールする
> wsl --unregister Debian

# インストール済みのディストリビューションと状態を確認する
> wsl -l -v
  NAME      STATE           VERSION
* Debian    Running         2

ディストリビューションを起動するときに0x80370114のエラーが出る

Windows の機能の有効化または無効化から仮想マシン プラットフォームを有効にする。

これで駄目だったらHyper-VとかLinux 用 Windows サブシステムあたりも有効にすればいいかもしれない。

シャットダウンする・起動する

1
2
3
4
5
# シャットダウンする
> wsl --shutdown

# 起動する
> wsl -d {distributionName}

環境をバックアップする

1
> wsl --export Debian "C:\path\to\debian.tar"

ホスト名を変更する

/etc/hostnameを変更しても WSL を再起動すると戻ってしまう。

以下のように適用する。

1
2
3
4
5
# wsl.confを作成する
$ sudo touch /etc/wsl.conf
$ sudo nano /etc/wsl.conf
[network]
hostname=debian
1
2
# WSLをシャットダウンさせたあと、再度起動する
> wsl --shutdown

systemctl を使う

1
2
3
4
5
sudo nano /etc/wsl.conf

# 以下を追加する
[boot]
systemd=true
1
> wsl --shutdown

Windows Terminal を設定する

ディストリビューションを複数使用するならcommandline"C:\\Windows\\system32\\wsl.exe -d {ディストリビューション名}"の方が良いかもしれない。

ネットワークドライブを自動マウントさせる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ディレクトリを作っておく
$ sudo mkdir /mnt/archives01

# 設定ファイルを編集する。以下を記載する
$ sudo nano /etc/fstab

# UNCONFIGURED FSTAB FOR BASE SYSTEM
//xxx.xxx.xxx.xxx/archives01 /mnt/archives01 drvfs defaults 0 0

# /etc/fstabに記載した設定を反映させる
$ sudo mount -a

git push できなくなったとき

Windows の資格情報マネージャーで git に関係する項目を削除してコマンド プロンプトからwsl --shutdownする。

VSCode+WSL の Git で "Missing or invalid credentials" エラーの対処法 - Qiita

WSL2 接続時にcygpath: not foundexec: cmd: not foundが出る

1
2
/mnt/c/Users/{ユーザー名}/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
/mnt/c/Users/{ユーザー名}/.pyenv/pyenv-win/bin/pyenv: 3: exec: cmd: not found

Windows でのパスと WSL でのパスが衝突するのを回避する方法 #Windows - Qiita

Windows 側の環境変数と競合するかららしい。WSL では Windows 側の環境変数を参照しないように/etc/wsl.confに以下をマージする。

/etc/wsl.conf
1
2
[interop]
appendWindowsPath=false

Windows 側で以下のコマンドを実行し、WSL を再起動する。

1
> wsl.exe --shutdown