WSL은 Windows 10(빌드 1709 이상)과 Windows 11에서 리눅스 실행 환경을 제공하는 기능.
기존에는 가상머신(VirtualBox, VMware)을 설치하거나 듀얼부팅을 해야 했지만, WSL을 통해 Windows 내부에서 가볍게 리눅스 명령어 및 애플리케이션을 실행할 수 있음.
WSL 1: 가상머신 없이 Windows 커널과 리눅스 커널을 통합 에뮬레이션 방식으로 동작. 파일 접근이 빠르지만 일부 기능(예: Docker)이 제한적.
WSL 2: 실제 리눅스 커널(경량 VM) 사용. 네트워크가 분리되지만, 도커 등 컨테이너 기반 애플리케이션을 더욱 원활히 실행 가능.
1.3 WSL을 사용하는 이유
개발 환경: Windows 기반 툴(Visual Studio, Office 등)과 리눅스 기반 툴(gcc, Python, Docker 등)을 동시에 사용 가능
학습 목적: 리눅스 명령어, 서버 설정, 네트워크를 쉽게 익히기 좋음
자원 절약: 전통적인 가상머신에 비해 가벼우며, 빠른 설치/실행 속도
Win + R 키 → winver 입력
Windows 10 빌드 1709 이상 또는 Windows 11에서 사용 가능
BIOS/UEFI에서 가상화(VT-x, AMD-V) 기능 활성화

노트북을 재부팅 시키고, 위의 브랜드에 맞는 "key to Enter BIOS"를 입력해줌



위 사진처럼 가상화가 사용처리 되었으면 완료.
이후 Microsoft Store사용을 위한 마소 계정 준비.

“가상 머신 플랫폼(Virtual Machine Platform)” 체크

PowerShell(관리자 권한)에서 간단하게 아래 명령어(윈도우10 기준)
wsl --install -d Ubuntu
Windows 11에서는 아래 명령 한 번으로 WSL, 가상머신 플랫폼, 기본 우분투 설치까지 자동 진행
wsl --install

Window 11에서 아래와 같은 오류가 발생할 경우,
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2? ?? ?? ?? ????? ?????. ??? ??? https://aka.ms/wsl2kernel? ??????.
Press any key to continue...
아래의 커널을 설치해주면 된다.
WSL2 Linux Kernel Update 를 설치
아래와 같이 Installing을 계속하는 오류가 발생하면

PowerShell을 다시 관리자권한으로 실행하면 설치가 잘 될것이다.


# 설치된 배포판 확인
wsl --list --verbose
# 특정 배포판을 WSL 2로 변경
wsl --set-version Ubuntu 2
Microsoft Store 실행 → “Ubuntu” 검색 → 설치 버튼 클릭
설치 완료 후 처음 실행 시 리눅스 사용자 이름 및 비밀번호 설정

리눅스 루트 디렉터리: "/" (WSL 내부)
Windows 드라이브 접근: /mnt/c, /mnt/d 형식
예: C:\Users{USER_NAME} /mnt/c/Users/{USER_NAME}에서 확인 가능

sudo apt update && sudo apt upgrade
우분투 계열에서 최신 패키지 목록 갱신 후 업그레이드

usermod -aG sudo {USER_NAME} # USER에 권한주기
su - {USER_NAME} # USER로 이동하기
이제 잘 될것이다.
sudo apt install build-essential curl wget git -y
C/C++ 컴파일러, make 등 빌드 도구 + 네트워크 툴 + git 설치
cd: 디렉터리 이동
cd /home/ubuntu

ls: 파일 목록 조회
ls -l # 자세한 정보, 권한 표시
ls -a # 숨김 파일(.) 포함
pwd: 현재 디렉터리 표시
mkdir, rmdir: 디렉터리 생성/삭제
rm, cp, mv: 파일 삭제, 복사, 이동
cat: 파일 내용 출력
less, more: 페이지 단위로 파일 내용 확인
grep: 특정 문자열 검색
grep "검색어" filename
리눅스에서 파일 권한은 r(읽기), w(쓰기), x(실행) 로 구성
리눅스 시스템에서 파일 작업을 수행하기 위해서는 적절한 권한이 필요. 사용자는 파일이나 디렉토리에 대해 읽기(read), 쓰기(write), 실행(execute) 권한을 가질 수 있으며, 이 권한들은 파일 소유자(owner), 그룹(group), 그리고 기타 사용자(others)에게 다르게 설정될 수 있음.
ls -l
:~$ ls -l /path/to/directory (예시)
:~$ drwxr-xr-x 2 user group 4096 Jan 25 10:00 directory (예시 출력)
이 출력에서 첫 번째 문자 d는 디렉토리임을 나타냄. 그 뒤에 나오는 rwxr-xr-x는 권한을 나타내며, 순서대로 소유자, 그룹, 기타 사용자의 권한을 의미.
chmod [변경될권한값][변경할파일]
ex) chmod 755 script.sh : 소유자는 rwx, 그룹/그 외 사용자는 r-x 권한
sudo chown userName:groupName {filename} : 소유자/그룹 변경
chown user:group /path/to/file
/path/to/file의 소유자를 user로, 그룹을 group으로 변경
예시
echo "Hello, Linux." > /path/to/file
"Hello, World!"라는 문자열을 /path/to/file에 쓰게 됨.
해당 파일이 없으면 생성해서 해당 문자열을 넣음
chmod 777 # 보안취약, 모든 사용자 권한 부여
chmod 644 # 소유자에게 읽기 쓰기, 그룹과 기타 사용자에게 읽기 권한만 부여
(1) 파일 생성 및 권한 변경(chmod)

Text editor 나가는 법) ctrl + x으로 나가기 -> 저장여부: Y -> 이름변경: Enter
(2) 소유자 변경(chown)
(3) 파일쓰기 (echo)

리눅스 시스템에서 파일과 디렉토리는 특정 권한 설정을 통해 관리됨. 각 파일 또는 디렉토리에는 세 가지 유형의 사용자가 각기 다른 권한을 가질 수 있음: 소유자(owner), 그룹(group), 그리고 기타(other) 사용자
권한종류
읽기(Read, r): 파일의 내용을 읽을 수 있는 권한이나 디렉토리 내의 파일 목록을 볼 수 있는 권한
쓰기(Write, w): 파일의 내용을 변경하거나 삭제할 수 있는 권한이나 디렉토리 내에 파일을 생성하거나 삭제할 수 있는 권한
실행(Execute, x): 파일을 프로그램으로서 실행할 수 있는 권한이나 디렉토리에 접근하여 그 내용을 탐색할 수 있는 권한
권한 설정: chmod => 위에서 이미 진행함
숫자로 권한 설정
읽기: 4 쓰기: 2 실행: 1
각 유형의 사용자에 대한 권한을 합산하여 표현.
ex.
chmod 700: 소유자에게 모든 권한을 주고, 그룹과 기타 사용자에게는 권한을 주지 않음.
chmod 770: 소유자와 그룹에게 모든 권한을 주고, 기타 사용자에게는 권한을 주지 않음.
chmod 777: 모든 사용자에게 모든 권한을 줌.
u: user(소유자)
g: group(그룹)
o: others(기타 사용자)
a: all(모든 사용자)
ㄷㅌ.
chmod u=rwx,g=rx,o=rx: 소유자는 모든 권한, 그룹과 기타 사용자는 읽기와 실행 권한만 부여.
chmod u+w: 현재 설정에 소유자의 쓰기 권한만 추가.
하위 디렉토리(예: nested 디렉토리)에 대해 특정 권한을 설정할 때는 chmod 명령어에 -R 옵션을 사용하여 하위 파일과 디렉토리에 동일한 권한을 적용할 수 있읍.
ex
chmod -R 755 /path/to/nested_directory
이 명령은 nested_directory와 그 안의 모든 파일과 하위 디렉토리에 대해 소유자에게 모든 권한을 부여하고, 그룹과 기타 사용자에게는 읽기 및 실행 권한만 부여.
이렇게 설정하면 nested_directory 내의 파일이나 디렉토리에도 동일한 권한이 적용되어, 일일이 권한을 설정할 필요 없이 간편하게 관리할 수 있음.
vim: 강력하지만 초보자에게 다소 어려울 수 있음
vim test.txt
# i(입력 모드), ESC(명령 모드), :wq(저장 후 종료), :q!(저장 없이 종료)


git config --global user.name "내이름"
git config --global user.email "내이메일"
python 예제 파일을 우분투 파일로 그대로 옮겨서 권한부여 및 파일 실행

아마도 오류가 발생할텐데, 이를 해결하기 위해 opencv 라이브러리 설치
1) pip로 설치
pip install opencv-python
2) pip3로 설치
pip3 install opencv-python
그런데 또 다시 오류가 발생할 것임

오류를 읽어보면 가상환경 설치하라고 함을 알 수 있음
가상환경 안하고 그냥 바로 테스트하려면
(apt 패키지 관리자(시스템 패키지)로 설치하는 방법)sudo apt update sudo apt install python3-opencv이걸 shell에 입력함 => Ubuntu 저장소에 바로 OpenCV 모듈이 설치될 것임.
이대로 matplotlib 도 설치해줌sudo apt install python3-matplotlib
하지만 위와 같은 방법으로 하는건 여러 라이브러리를 설치하는 것이 번거롭기에 가상환경 설치하는 방법을 배워보자.
가상환경(Virtual Environment)은 프로젝트마다 다른 패키지 버전을 사용해야 할 때,
시스템 전역(Global) 환경의 파이썬 패키지와 충돌을 일으키지 않도록 독립된 격리 환경을 만드는 것을 말함. 이렇게 하면 프로젝트 간의 패키지 버전이 충돌하지 않으며, 추후 프로젝트를 재현(Reproducible)하기도 쉬워짐.
프로젝트에서 특정 버전의 OpenCV와 NumPy를 사용해야 하는데, 다른 프로젝트에서는 더 높은 버전의 NumPy를 사용해야 한다면 전역에 설치해서는 버전 충돌이 일어나기 쉬움.
가상환경을 쓰면 각 프로젝트마다 원하는 버전을 설치해둘 수 있어 문제 없이 관리할 수 있다.
파이썬이 설치되어 있는지 확인
python3 --version
버전이 출력된다면 설치되어 있는 것.
sudo apt install python3-venv
python3 -m venv myenv # 현재 위치에 'myenv'라는 디렉터리가 생성되며, 그 안에 가상환경이 구성.
myenv 대신 원하는 이름을 지정할 수 있음.
생성 후, myenv/bin/ 폴더 안에 파이썬 실행 파일과 pip 등이 포함.
source myenv/bin/activate

활성화 후에는 (myenv) 라는 프롬프트 표시가 추가됨.
가상환경 상태에서 python3 또는 pip 등을 실행하면 전역 환경이 아닌 가상환경에 설치된 패키지가 사용됨.
pip install opencv-python
가상환경을 활성화한 상태에서 설치해야 함.
필요한 다른 패키지도 동일하게 pip install 패키지명으로 설치.

python -c "import cv2; print(cv2.__version__)"
정상적으로 버전이 출력된다면 설치가 완료된 것

deactivate
가상환경을 비활성화하면 다시 전역 환경(또는 다른 환경)으로 돌아감.
이 과정을 통해 독립된 환경에서 다른 프로젝트 환경과 충돌없이 안정적으로 라이브러리 버전 관리를 할 수 있다.
# 현재 구동중인 가상 머신 확인
$ wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
# Ubuntu 종료
$ wsl -t Ubuntu
# 확인
$ wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2



끝.