Light Linux#2_WSL

mseokq23·2025년 1월 7일

Light Linux

목록 보기
3/4

1. WSL 개요

1.1 WSL(Windows Subsystem for Linux)?

WSL은 Windows 10(빌드 1709 이상)과 Windows 11에서 리눅스 실행 환경을 제공하는 기능.

기존에는 가상머신(VirtualBox, VMware)을 설치하거나 듀얼부팅을 해야 했지만, WSL을 통해 Windows 내부에서 가볍게 리눅스 명령어 및 애플리케이션을 실행할 수 있음.

1.2 WSL 1 vs WSL 2 비교

WSL 1: 가상머신 없이 Windows 커널과 리눅스 커널을 통합 에뮬레이션 방식으로 동작. 파일 접근이 빠르지만 일부 기능(예: Docker)이 제한적.

WSL 2: 실제 리눅스 커널(경량 VM) 사용. 네트워크가 분리되지만, 도커 등 컨테이너 기반 애플리케이션을 더욱 원활히 실행 가능.

1.3 WSL을 사용하는 이유

개발 환경: Windows 기반 툴(Visual Studio, Office 등)과 리눅스 기반 툴(gcc, Python, Docker 등)을 동시에 사용 가능

학습 목적: 리눅스 명령어, 서버 설정, 네트워크를 쉽게 익히기 좋음

자원 절약: 전통적인 가상머신에 비해 가벼우며, 빠른 설치/실행 속도

2. WSL 설치 준비

2.1 Windows 버전 확인

Win + R 키 → winver 입력
Windows 10 빌드 1709 이상 또는 Windows 11에서 사용 가능

2.2 필수 조건

BIOS/UEFI에서 가상화(VT-x, AMD-V) 기능 활성화


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


위 사진처럼 가상화가 사용처리 되었으면 완료.

이후 Microsoft Store사용을 위한 마소 계정 준비.

3. WSL 설치 및 설정

3.1 Windows 기능 활성화

  • 제어판 → 프로그램 → Windows 기능 켜기/끄기
    “Windows 하위 시스템(WSL)” 체크

“가상 머신 플랫폼(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을 다시 관리자권한으로 실행하면 설치가 잘 될것이다.

  • 만약 본인이 계정을 생성하지 않고 그냥 root계정으로 갔을 경우, adduser을 사용하여 계정을 만들어준다
    user명과 password을 제외한 나머지는 다 Enter로 스킵해준다.
    계정생성 후, su {USER_NAME}으로 이동한다.

3.2 WSL 버전 확인 및 변경

# 설치된 배포판 확인
wsl --list --verbose

# 특정 배포판을 WSL 2로 변경
wsl --set-version Ubuntu 2

3.3 배포판 설치(Ubuntu)

Microsoft Store 실행 → “Ubuntu” 검색 → 설치 버튼 클릭
설치 완료 후 처음 실행 시 리눅스 사용자 이름 및 비밀번호 설정

4. WSL에서 리눅스 환경 기본 이해

4.1 WSL 파일시스템 구조

  • 리눅스 루트 디렉터리: "/" (WSL 내부)

  • Windows 드라이브 접근: /mnt/c, /mnt/d 형식
    예: C:\Users{USER_NAME} /mnt/c/Users/{USER_NAME}에서 확인 가능

4.2 WSL Shell(쉘)과 Windows Terminal

  • 기본적으로 bash 셸이 동작
  • Windows Terminal(Microsoft Store) 설치 시 편리:
  • 여러 탭 / 스플릿 창 / 폰트 설정 등 가능
  • 여러 배포판(우분투, 데비안 등) 프로필 관리

4.3 Windows 디렉터리(\mnt\c) 접근

  • 리눅스 명령어로 Windows 폴더를 직접 조회 및 파일 생성 가능
    단, permission/줄바꿈(CRLF) 문제 발생 주의.

5. 패키지 업데이트 및 필수 유틸 설치

5.1 패키지 업데이트

sudo apt update && sudo apt upgrade

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

  • 만일 본인이 USER_NAME으로 계정을 새로 만들었을 때, sudo 명령어가 먹질 않는다면,

usermod -aG sudo {USER_NAME}  # USER에 권한주기
su - {USER_NAME}   #   USER로 이동하기

이제 잘 될것이다.

5.2 기본 개발 툴 설치

sudo apt install build-essential curl wget git -y

C/C++ 컴파일러, make 등 빌드 도구 + 네트워크 툴 + git 설치

5.3 GUI(WSLg) 사용 개요

  • Windows 11 + WSL 2 환경에서는 WSLg를 통해 GUI 앱을 실행 가능
  • 예: sudo apt install gedit 후 gedit 실행 시 윈도우 창이 뜸

6. 리눅스 기본 명령어

6.1 디렉터리 이동 및 파일 관리

cd: 디렉터리 이동

cd /home/ubuntu

ls: 파일 목록 조회

ls -l  # 자세한 정보, 권한 표시
ls -a  # 숨김 파일(.) 포함  

pwd: 현재 디렉터리 표시
mkdir, rmdir: 디렉터리 생성/삭제
rm, cp, mv: 파일 삭제, 복사, 이동

6.2 파일 내용 확인

cat: 파일 내용 출력
less, more: 페이지 단위로 파일 내용 확인
grep: 특정 문자열 검색

grep "검색어" filename

6.3 권한(chmod, chown)과 소유권 개념

리눅스에서 파일 권한은 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)

chmod [변경될권한값][변경할파일]

ex) chmod 755 script.sh : 소유자는 rwx, 그룹/그 외 사용자는 r-x 권한
sudo chown userName:groupName {filename} : 소유자/그룹 변경

  • 소유자 변경하기 (chown)
    chown 명령어는 파일이나 디렉토리의 소유자나 그룹을 변경
chown user:group /path/to/file

/path/to/file의 소유자를 user로, 그룹을 group으로 변경

  • 파일 쓰기
    파일에 쓰기 작업을 수행하기 위해서는 쓰기 권한이 필요.
    echo와 리디렉션(>)을 사용하여 파일에 텍스트를 쓸 수 있음.

예시

echo "Hello, Linux." > /path/to/file

"Hello, World!"라는 문자열을 /path/to/file에 쓰게 됨.
해당 파일이 없으면 생성해서 해당 문자열을 넣음

  • 권한오류 해결방안
chmod 777 # 보안취약, 모든 사용자 권한 부여
chmod 644 # 소유자에게 읽기 쓰기, 그룹과 기타 사용자에게 읽기 권한만 부여

6.3.1 실습

(1) 파일 생성 및 권한 변경(chmod)

Text editor 나가는 법) ctrl + x으로 나가기 -> 저장여부: Y -> 이름변경: Enter

(2) 소유자 변경(chown)

(3) 파일쓰기 (echo)

6.3.2 리눅스 파일 권한 이해 및 설정 예시

리눅스 시스템에서 파일과 디렉토리는 특정 권한 설정을 통해 관리됨. 각 파일 또는 디렉토리에는 세 가지 유형의 사용자가 각기 다른 권한을 가질 수 있음: 소유자(owner), 그룹(group), 그리고 기타(other) 사용자

권한종류
읽기(Read, r): 파일의 내용을 읽을 수 있는 권한이나 디렉토리 내의 파일 목록을 볼 수 있는 권한
쓰기(Write, w): 파일의 내용을 변경하거나 삭제할 수 있는 권한이나 디렉토리 내에 파일을 생성하거나 삭제할 수 있는 권한
실행(Execute, x): 파일을 프로그램으로서 실행할 수 있는 권한이나 디렉토리에 접근하여 그 내용을 탐색할 수 있는 권한

  1. 권한 설정: chmod => 위에서 이미 진행함

  2. 숫자로 권한 설정

    읽기: 4 쓰기: 2 실행: 1

각 유형의 사용자에 대한 권한을 합산하여 표현.

ex.
chmod 700: 소유자에게 모든 권한을 주고, 그룹과 기타 사용자에게는 권한을 주지 않음.
chmod 770: 소유자와 그룹에게 모든 권한을 주고, 기타 사용자에게는 권한을 주지 않음.
chmod 777: 모든 사용자에게 모든 권한을 줌.

  1. 문자로 권한 설정

    u: user(소유자)
    g: group(그룹)
    o: others(기타 사용자)
    a: all(모든 사용자)

ㄷㅌ.

chmod u=rwx,g=rx,o=rx: 소유자는 모든 권한, 그룹과 기타 사용자는 읽기와 실행 권한만 부여.
chmod u+w: 현재 설정에 소유자의 쓰기 권한만 추가.

6.3.3 하위 디렉토리(nested directory)의 권한 설정

하위 디렉토리(예: nested 디렉토리)에 대해 특정 권한을 설정할 때는 chmod 명령어에 -R 옵션을 사용하여 하위 파일과 디렉토리에 동일한 권한을 적용할 수 있읍.

ex

chmod -R 755 /path/to/nested_directory

이 명령은 nested_directory와 그 안의 모든 파일과 하위 디렉토리에 대해 소유자에게 모든 권한을 부여하고, 그룹과 기타 사용자에게는 읽기 및 실행 권한만 부여.

이렇게 설정하면 nested_directory 내의 파일이나 디렉토리에도 동일한 권한이 적용되어, 일일이 권한을 설정할 필요 없이 간편하게 관리할 수 있음.

6.4 프로세스 관리

  • ps, top, htop: 현재 실행 중인 프로세스 조회
  • kill [PID]: 프로세스 종료
  • jobs, bg, fg: 백그라운드 작업, 포그라운드 복귀

7. 편집기와 개발 환경

7.1 CLI 편집기 (vim, nano)

vim: 강력하지만 초보자에게 다소 어려울 수 있음

  • 사용법 [나중에 링크 넣어야함](나중에 링크 넣어야함)
vim test.txt
# i(입력 모드), ESC(명령 모드), :wq(저장 후 종료), :q!(저장 없이 종료)
  • nano: 직관적이지만 기능이 상대적으로 단순, 위에서 사용한것과 동일

7.2 VSCode + WSL Remote 확장 사용

  1. VSCode(Windows용) 설치 (palatable python#2 보시면 됩니다.)
  2. “Remote - WSL” 확장 설치 후, VSCode 하단 좌측의 “><” 아이콘 클릭 → “WSL에서 열기”

  1. WSL 내부 디렉터리를 VSCode로 직접 편집 가능

7.3 Git 사용과 Windows-WSL 충돌 주의사항

  • Git 설정:
git config --global user.name "내이름"
git config --global user.email "내이메일"
  • Windows에서도 Git을 사용한다면, CRLF ↔ LF 변환 문제에 유의

8. 실습#2

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

하지만 위와 같은 방법으로 하는건 여러 라이브러리를 설치하는 것이 번거롭기에 가상환경 설치하는 방법을 배워보자.

9. shell script 와 자동화

10. python 가상환경 설치

가상환경(Virtual Environment)은 프로젝트마다 다른 패키지 버전을 사용해야 할 때,
시스템 전역(Global) 환경의 파이썬 패키지와 충돌을 일으키지 않도록 독립된 격리 환경을 만드는 것을 말함. 이렇게 하면 프로젝트 간의 패키지 버전이 충돌하지 않으며, 추후 프로젝트를 재현(Reproducible)하기도 쉬워짐.

프로젝트에서 특정 버전의 OpenCV와 NumPy를 사용해야 하는데, 다른 프로젝트에서는 더 높은 버전의 NumPy를 사용해야 한다면 전역에 설치해서는 버전 충돌이 일어나기 쉬움.
가상환경을 쓰면 각 프로젝트마다 원하는 버전을 설치해둘 수 있어 문제 없이 관리할 수 있다.

10.1 가상환경 셋팅 및 OpenCV 설치 방법

  1. venv 모듈(파이썬 기본 가상환경) 사용법

파이썬이 설치되어 있는지 확인

python3 --version

버전이 출력된다면 설치되어 있는 것.

  1. 가상환경 생성
sudo apt install python3-venv
python3 -m venv myenv # 현재 위치에 'myenv'라는 디렉터리가 생성되며, 그 안에 가상환경이 구성.

myenv 대신 원하는 이름을 지정할 수 있음.
생성 후, myenv/bin/ 폴더 안에 파이썬 실행 파일과 pip 등이 포함.

  1. 가상환경 활성화
source myenv/bin/activate

활성화 후에는 (myenv) 라는 프롬프트 표시가 추가됨.
가상환경 상태에서 python3 또는 pip 등을 실행하면 전역 환경이 아닌 가상환경에 설치된 패키지가 사용됨.

  1. 가상환경 내에서 OpenCV 설치
pip install opencv-python

가상환경을 활성화한 상태에서 설치해야 함.
필요한 다른 패키지도 동일하게 pip install 패키지명으로 설치.

  1. 설치가 잘 되었는지 확인
python -c "import cv2; print(cv2.__version__)"

정상적으로 버전이 출력된다면 설치가 완료된 것

  1. 가상환경 비활성화
    작업이 끝나면 다음 명령어로 가상환경을 벗어날 수 있음.
deactivate

가상환경을 비활성화하면 다시 전역 환경(또는 다른 환경)으로 돌아감.

이 과정을 통해 독립된 환경에서 다른 프로젝트 환경과 충돌없이 안정적으로 라이브러리 버전 관리를 할 수 있다.

11. Docker(도커) 등 가상화/컨테이너

12. WSL 종료하기

# 현재 구동중인 가상 머신 확인
$ wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
# Ubuntu 종료
$ wsl -t Ubuntu

# 확인
$ wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         2

12.1 VScode내에서 WSL 종료하여 윈도우 개발환경으로 돌아오기

끝.

0개의 댓글