[Windows] WSL, Windows Subsystem for Linux

참고 문서

개요

WSL은 가상 머신 등의 설정 없이 윈도우 상에서 리눅스 명령어를 직접 실행할 수 있는 환경을 말한다. 2020년엔 버전업 된 WSL 2가 나왔다.

설치

이제 그냥 요거 한 방으로 됨:

# 기본 OS인 Ubuntu로 wsl 설치
wsl --install

# 설치 된 wsl 목록(도커 포함)과 버전 확인
wsl -l -v

버전 확인해서 2가 아니면 뭔가 잘못된 거니까 가이드 보고 다시 설치하자.

그 다음 새로 생성된 Ubuntu 앱 바로가기를 누르던지, 아니면 파워셸이나 CMD에서 wsl을 치면 WSL 터미널로 진입한다.

이전 설치 방법

설치 방법은 우선 'Linux용 Windows 하위 시스템' 옵션 기능을 사용하도록 설정하고:

# PowerShell 관리자 권한으로 실행, 재시작 필요
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 예전 버전의 도움말에선 이렇게 알랴줌
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

그 다음, WSL 2를 쓸 생각이 없다면 바로 서브 시스템을 설치하면 된다. 요것 혹은 요놈을 눌러 나오는 앱 중 하나를 골라 설치하거나,

아니면 파워셸에서 직접:

Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile Ubuntu.appx -UseBasicParsing

명령어로 다운로드/설치 하면 됨
오늘(2021-01-20) 확인해보니 설치가 제대로 안 되며, 도움말에서도 셸 명령어로 설치하라는 내용은 사라짐. 되는 방법 찾기 귀찮으니 그냥 스토어 가서 까세영. 😒

서브 시스템의 실제 경로

WSL1: 루트의 실제 경로는 설치한 서브 시스템별로 다르지만, 공통적으로 %USERPROFILE%\AppData\Local\Packages 까지는 같고 \LocalState\rootfs로 끝난다.
예를 들어 우분투는 C:\Users\norit\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs 요렇게 됨.

WSL2: 버전 2에선 셸에서 powershell.exe /c start .을 입력하면 해당하는 경로로 윈도우 탐색기가 열린다. 혹은 실행 대화 상자나 탐색기에서 \\wsl.localhost 혹은 \\wsl$을 입력하면 OS별 루트 경로에 바로 접근할 수 있다.

WSL에서 호스트 디렉터리 접근

우분투 말고는 설치를 안해봐서 정확하진 않으나 /mnt 아래에 있는 드라이브들이 호스트(WSL이 설치된 윈도우의 루트 경로) 디렉터리다.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
...
drvfs           476G  100G  377G  21% /mnt/c
drvfs           930G   69G  862G   8% /mnt/d

CMD 혹은 파워셸에서 Linux 명령어 실행

wsl ls -la

dir | wsl grep git

리눅스 명령어 앞에 wsl을 붙이면 된다.

우분투 터미널 꾸미기: Zsh, Powerlevel10k, ls color

개발자를 위한 윈도우 셋업 | 니콜라스 유튜브

Zsh는 리눅스 기본 셸인 Bash의 확장 버전이고, Powerlevel10k은 테마 같은거다.

일단 Zsh는:

# zsh 설치
apt install zsh

# oh-my-zsh 설치
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# zsh 실행
zsh

# bash로 돌아가기
bash

그리고 Powerlevel10k는 일단 폰트를 받고, 우분투의 폰트 설정을 변경한다.

윈도우 터미널의 경우 설정에서 우분투의 폰트를 변경하거나 settings.json의 우분투 프로파일에 "font": { "face": "MesloLGS NF" }를 추가하면 된다.

PowerLevel10k 설치는 아래 명령으로:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

깃 소스를 받은 다음 ~/.zshrc 파일에 ZSH_THEME="powerlevel10k/powerlevel10k" 설정.
터미널 재실행하면 자동으로 powerlevel10k 환경설정을 시작한다. 나중에 다시 바꾸려면 p10k configure.

마지막으로 ls color는 아래 실행:

echo 'LS_COLORS="ow=01;36;40" && export LS_COLORS' >> ~/.zshrc

하면 끗.

기본 셸 Zsh로 변경하려면 아래 실행:

# 로그인 셸을 Zsh로 바꾸기
chsh -s $(which zsh)

작성자 저장용 PowerLevel10k 환경설정

어디에 붙은건지 헷갈림을 방지하기 위해 Prompt Style은 아래처럼 한다:

  • WSL은 (3) Rainbow.
  • 원격 서버의 일반 유저는 (2) Classic.
  • 원격 서버의 루트 유저는 (1) Lean.
  • Docker에선 이상하게 선택 불가하고 (4) Pure.로 고정됨.

WSL용 쉘 사용자 정의 설정 모음

# .bashrc 또는 .zshrc 파일에 추가
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias sb='/mnt/c/Program\ Files/Sublime\ Text/subl.exe'
alias adb='adb.exe'

WSL에서 윈도우의 환경 변수 사용하지 않기

https://stackoverflow.com/questions/51336147/how-to-remove-the-win10s-path-from-wsl

WSL에서 윈도우의 환경 변수를 사용하지 않는 방법이다.

루트 계정으로 전환해서 /etc/wsl.conf 파일을 만들고 아래처럼 작성한다:

[interop]
  appendWindowsPath=false

그리고 WSL 재시작:

wsl --shutdown

그래도 안 되면 여기를 보자.

WSL에서 Git Credential Manager for Windows 사용하기

윈도우 환경에서는 기본값으로 '자격 증명 관리자'를 사용하는데, 이걸 변경하는 것.

WSL 터미널에서 아래를 입력하면 된다:

git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager-core.exe"

출처

WSL 기본 로그인 유저 바꾸기

우분투인 경우:

ubuntu config --default-user 유저_아이디

비밀번호를 잊어버려 재설정 할 때 쓴다.