WSL(Linux용 Windows 하위 시스템)은 기존 Windows 데스크톱 및 앱과 함께 Windows에서 직접 Linux 명령줄 도구 및 GUI 앱과 함께 Linux 파일 시스템을 실행할 수 있는 Windows 운영 체제의 기능입니다.
자세한 내용은 정보 페이지를 참조하세요.
이는 주로 개발자, 특히 웹 개발자, 오픈 소스 프로젝트에서 작업하거나 Linux 서버 환경에 배포하는 개발자를 위한 도구입니다. WSL은 Bash, 일반적인 Linux 도구(sed
, awk
등) 및 Linux 우선 프레임워크(Ruby, Python 등)를 사용하는 것을 좋아하지만, Windows 생산성 도구를 사용하는 것을 좋아하는 모든 사용자를 위한 것입니다.
WSL을 사용하면 배포(Ubuntu, Debian, OpenSUSE, Kali, Alpine 등)를 선택하여 Bash 셸에서 Linux를 실행할 수 있습니다. Bash를 사용하면 Linux 명령줄 도구 및 앱을 실행할 수 있습니다. 예를 들어 lsb_release -a
를 입력하고 Enter 키를 누릅니다. 그러면 현재 실행되고 있는 Linux 배포판의 세부 정보가 표시됩니다.
또한 Linux Bash 셸 내에서 로컬 머신의 파일 시스템에 액세스할 수 있습니다. 이 경우 로컬 드라이브는 /mnt
폴더 아래에 탑재되어 있습니다. 예를 들어 C:
드라이브가 /mnt/c
아래에 탑재되어 있습니다.
WSL은 내부 개발 루프의 일부로 사용하려는 개발자를 대상으로 합니다. Sam이 CI/CD 파이프라인(Continuous Integration & Continuous Delivery)을 만들고 있으며 클라우드에 배포하기 전에 로컬 머신(랩톱)에서 먼저 테스트하려 한다고 가정해 보겠습니다. Sam은 WSL(& WSL 2)을 사용하여 속도와 성능을 향상시킨 다음, 원하는 Bash 명령어와 도구를 사용하여 로컬(랩톱 상의)에서 정품 Linux Ubuntu 인스턴스를 사용할 수 있습니다. 개발 파이프라인이 로컬에서 확인되면 Sam은 해당 CI/CD 파이프라인을 Docker 컨테이너로 만들고 프로덕션 준비가 된 Ubuntu VM에서 실행되는 클라우드 인스턴스로 푸시하여 이 컨테이너를 클라우드(예: Azure)까지 푸시할 수 있습니다.
Bash는 널리 사용되는 텍스트 기반 셸 및 명령 언어입니다. 이는 Ubuntu 및 기타 Linux 배포판에 포함된 기본 셸입니다. 사용자가 명령을 셸에 입력하여 스크립트를 실행하거나 명령과 도구를 실행하여 많은 작업을 수행합니다.
Windows 명령줄 블로그에서 이 문서를 확인하십시오. WSL을 통해 Windows가 Linux 파일에 액세스할 수 있는 방법에 대한 자세한 내용에서 기본 기술에 대해서 자세히 설명합니다.
WSL에는 전체 가상 머신보다 적은 리소스(CPU, 메모리 및 스토리지)가 필요합니다. 또한 WSL을 사용하면 Windows 명령줄, 데스크톱 및 스토어 앱과 함께 Linux 명령줄 도구 및 앱을 실행하고 Linux 내에서 Windows 파일에 액세스할 수 있습니다. 이렇게 하면 원하는 경우 동일한 파일 세트에서 Windows 앱 및 Linux 명령줄 도구를 사용할 수 있습니다.
일부 플랫폼 간 도구는 이러한 도구가 실행되는 환경이 Linux처럼 동작한다고 가정하여 구축되었습니다. 예를 들어 일부 도구에서는 매우 긴 파일 경로에 액세스할 수 있거나 특정 파일/폴더가 있다고 가정합니다. 이로 인해 Windows에서 Linux와 다르게 동작하는 문제가 발생하는 경우가 많습니다.
Ruby 및 Node.js와 같은 많은 언어는 Windows에서 이식되어 매우 효율적으로 실행되는 경우가 많습니다. 그러나 일부 Ruby Gem 또는 Node/NPM 라이브러리 소유자는 Windows를 지원하기 위해 라이브러리를 이식하지 않으며 많은 소유자가 Linux 관련 종속성을 사용하고 있습니다. 이로 인해 이러한 도구와 라이브러리를 사용하여 빌드된 시스템의 Windows에서 빌드 및 때로는 런타임 오류 또는 원치 않는 동작이 발생하는 경우가 많습니다.
이러한 문제 중 일부는 Windows의 명령줄 도구를 개선하도록 많은 사용자가 Microsoft에 요청하게 하였으며, Windows에서 네이티브 Bash 및 Linux 명령줄 도구를 실행할 수 있도록 하기 위해 Microsoft에서 Canonical과 파트너 관계를 맺게 하였습니다.
OSS 프로젝트에서 작업하는 동안 PowerShell 프롬프트에서 Bash를 사용하는 것이 매우 유용한 시나리오가 많이 있습니다. Bash 지원은 보완적이며 Windows에서 명령줄의 가치를 강화하여 PowerShell 및 PowerShell 커뮤니티에서 널리 사용되는 다른 기술을 활용할 수 있도록 합니다.
자세한 내용은 Windows용 Bash: 뛰어난 기능 및 PowerShell에 대한 의미는 무엇일까요?라는 PowerShell 팀 블로그를 참조하세요.
WSL은 x64 및 ARM CPU를 지원합니다.
로컬 머신의 하드 드라이브에 대한 탑재 지점이 자동으로 만들어져 Windows 파일 시스템에 쉽게 액세스할 수 있습니다.
/mnt/<드라이브 문자>/
예를 들어 c:\에 액세스하려면 cd /mnt/c
를 사용합니다.
Git 자격 증명 관리자를 설정하고 Windows 자격 증명 관리자에 인증 토큰을 저장하는 방법에 대한 섹션을 제공하는 Linux용 Windows 하위 시스템 Git사용 시작하기에 대한 자습서를 참조하십시오.
WSL의 이점 중 하나는 Windows 및 Linux 앱 또는 도구를 통해 파일에 액세스할 수 있다는 것입니다.
WSL은 머신의 고정 드라이브를 Linux 배포판의 /mnt/<drive>
폴더 아래에 탑재합니다. 예를 들어 C:
드라이브는 /mnt/c/
아래에 탑재됩니다.
탑재된 드라이브를 사용하면 Visual Studio 또는 VS Code를 사용하여 C:\dev\myproj\
에서 코드를 편집하고, /mnt/c/dev/myproj
를 통해 동일한 파일에 액세스하여 Linux에서 해당 코드를 빌드/테스트할 수 있습니다.
Windows 및 Linux 파일 시스템 간 작업 문서에서 자세히 알아보십시오.
Linux 루트(예:
/
) 아래의 파일은 다음을 포함하지만 이에 국한되지 않는 Linux 특정 동작을 모방하는 WSL에서 제어됩니다.- 잘못된 Windows 파일 이름 문자가 포함된 파일
- 관리자가 아닌 사용자에 대해 만들어진 symlink
- chmod 및 chown을 통한 파일 특성 변경
- 파일/폴더 대/소문자 구분
탑재된 드라이브의 파일은 Windows에서 제어하며 다음과 같은 동작을 수행합니다.
- 대/소문자 구분 지원
- 모든 권한이 Windows 권한을 가장 잘 반영하도록 설정됨
WSL에서 배포를 제거하고 해당 Linux 배포와 연결된 모든 데이터를 삭제하려면, wsl --unregister <distroName>
을(를) 실행합니다. 여기서 <distroName>
은(는) wsl -l
명령의 목록에서 볼 수 있는 Linux 배포판의 이름입니다.
다른 스토어 애플리케이션과 마찬가지로 Windows에서 Linux 배포판 앱을 제거할 수도 있습니다.
WSL 명령에 대한 자세한 내용은 WSL에 대한 기본 명령 문서를 참조하십시오.
OpenSSH는 선택적 기능으로 Windows와 함께 제공됩니다. OpenSSH 설치 문서를 참조하십시오. WSL에서 OpenSSH를 실행하려면 Windows의 관리자 권한이 필요합니다. OpenSSH 서버를 실행하려면 WSL 배포(예: Ubuntu) 또는 Windows 터미널을 관리자로 실행합니다. WSL을 사용하는 SSH 시나리오를 다루는 여러 리소스가 있습니다. Scott Hanselman의 블로그 문서: Linux 또는 Windows에 SSH를 적용하는 방법, 외부 컴퓨터에서 Windows 10 WSL2로 SSH를 적용하는 방법, 외부 컴퓨터에서 Windows 10의 Bash 및 WSL2로 SSH를 적용하는 쉬운 방법, Windows 10의 기본 제공 OpenSSH를 사용하여 원격 Linux 컴퓨터에 자동으로 SSH를 적용하는 방법을 확인합니다.
WSL 설치는 Windows 설치의 로캘과 일치하도록 Ubuntu 로캘을 자동으로 변경하려고 합니다. 이 동작을 원하지 않는 경우 설치가 완료된 후 다음 명령을 실행하여 Ubuntu 로캘을 변경할 수 있습니다. 이 변경 내용이 적용되려면 WSL 배포를 다시 시작해야 합니다.
아래 예제에서는 로캘을 en-US로 변경합니다.
sudo update-locale LANG=en_US.UTF8
일부 사용자가 WSL에서 인터넷 액세스를 차단하는 특정 방화벽 애플리케이션의 문제를 보고했습니다. 보고된 방화벽은 다음과 같습니다.
- Kaspersky
- AVG
- Avast
- Symantec Endpoint Protection
- F-Secure
방화벽을 해제하면 액세스가 허용되는 경우도 있습니다. 단순히 방화벽을 설치하면 경우에 따라 액세스가 차단되는 것처럼 보입니다.
WSL은 Windows에서 실행되는 Windows의 IP 주소를 공유합니다. 따라서 localhost의 모든 포트에 액세스할 수 있습니다. 예를 들어 1234 포트에 웹 콘텐츠가 있는 경우 https://localhost:1234 를 Windows 브라우저에 연결할 수 있습니다. 자세한 내용은 네트워크 애플리케이션 액세스를 참조하십시오.
배포판을 백업하거나 이동하는 가장 좋은 방법은 Window 버전 1809 이상에서 사용할 수 있는 내보내기/가져오기 명령을 사용하는 것입니다.
wsl --export
명령을 사용하여 전체 배포를 tarball로 내보낼 수 있습니다. 그런 다음, wsl --import
명령을 사용하여 이 배포판을 WSL로 다시 가져올 수 있습니다. 이 명령을 사용하면 가져올 새 드라이브 위치의 이름을 지정할 수 있으므로 WSL 배포 상태를 백업, 저장하거나 이동할 수 있습니다.
AppData 폴더의 파일을 백업하는 기존 백업 서비스(예: Windows Backup)는 Linux 파일을 손상시키지 않습니다.
WSL은 내부 루프 개발 워크플로와 함께 사용하도록 설계되었습니다. WSL에는 이러한 용도에 적합하지만 다른 제품에 비해 프로덕션 관련 시나리오에 어려운 디자인 기능이 있습니다. WSL이 일반 VM 환경과 어떻게 다른지 명확히 하여 비즈니스 요구 사항에 맞는지 여부를 결정할 수 있도록 하는 것이 목표입니다.
WSL과 기존 프로덕션 환경 간의 주요 차이점은 다음과 같습니다.
- WSL에는 리소스를 자동으로 시작, 중지 및 관리하는 경량 유틸리티 VM이 있습니다.
- Windows 프로세스에 대한 열린 파일 핸들이 없는 경우, WSL VM이 자동으로 종료됩니다. 즉, 웹 서버로 SSH를 사용하여 서버를 실행한 다음 종료하는 경우, VM은 사용자가 사용을 완료하고 리소스를 정리한다는 것을 감지하기 때문에 VM이 종료될 수 있습니다.
- WSL 사용자는 Linux 인스턴스에 대한 모든 권한을 갖습니다. VM의 수명, 등록된 WSL 배포 등은 모두 사용자가 액세스할 수 있으며 사용자가 수정할 수 있습니다.
- WSL은 Windows 파일에 대한 파일 액세스 권한을 자동으로 제공합니다.
- Windows 경로는 기본적으로 경로에 추가되어 기존 Linux 환경에 비해 특정 Linux 애플리케이션에 대해 예기치 않은 동작이 발생할 수 있습니다.
- WSL은 Linux에서 Windows 실행 파일을 실행할 수 있으며, 이는 기존 Linux VM과 다른 환경으로 이어질 수도 있습니다.
- WSL에서 사용하는 Linux 커널이 자동으로 업데이트됩니다.
- WSL의 GPU 액세스는 GPU 호출을 Windows GPU로 라우팅하는
/dev/dxg
디바이스를 통해 발생합니다. 이 설정은 기존 Linux 설정과 다릅니다. - 운영 체제 미설치 Linux에 비해 다른 작은 차이가 있으며, 내부 루프 개발 워크플로의 우선 순위가 지정됨에 따라 향후 더 많은 차이가 발생할 것으로 예상됩니다.
이 작업을 수행할 수 있는 몇 가지 방법이 있습니다.
- 가장 쉬운 방법은 명령을 사용하여
wsl --export --vhd
WSL 배포를 VHD 파일로 내보내는 것입니다. 그런 다음 이 파일을 다른 컴퓨터에 복사하고 를 사용하여wsl --import --vhd
가져올 수 있습니다. 자세한 내용은 명령 문서를 참조하세요. - 위의 구현에는 많은 디스크 공간이 필요합니다. 디스크 공간이 많지 않은 경우 Linux 기술을 사용하여 파일을 이동할 수 있습니다.
- 를 사용하여
tar -czf <tarballName> <directory>
파일의 tarball을 만듭니다. 그런 다음 이러한 특정 파일을 새 컴퓨터에 복사하고 를 실행tar -xzf <tarballName>
하여 추출할 수 있습니다. - 다음과 같은
dpkg --get-selections | grep -v deinstall | awk '{print $1}' > package_list.txt
명령을 사용하여apt
설치된 패키지 목록을 내보낸 다음 파일을 전송한 후와 같은sudo apt install -y $(cat package_list.txt)
명령을 사용하여 다른 컴퓨터에 동일한 패키지를 다시 설치할 수도 있습니다.
- 를 사용하여
WSL 2는 Windows 10 Home과 Windows 11 Home을 포함하여 WSL이 현재 제공되는 모든 데스크톱 SKU에서 사용할 수 있습니다.
최신 버전의 WSL은 Hyper-V 아키텍처를 사용하여 가상화를 지원합니다. 이 아키텍처는 'Virtual Machine 플랫폼' 옵션 구성 요소에서 사용할 수 있습니다. 이 옵션 구성 요소는 모든 SKU에서 사용할 수 있습니다. 이 환경에 대한 자세한 내용은 WSL 2 릴리스를 앞두고 제공될 예정입니다.
현재 WSL 1을 사용 중단할 계획은 없습니다. WSL 1과 WSL 2 배포판을 함께 실행하고 원하는 배포판을 언제든지 업그레이드하고 다운그레이드할 수 있습니다. WSL 2를 새 아키텍처로 추가하면 WSL 팀이 더 나은 플랫폼을 통해 Windows에서 Linux 환경을 원활하게 실행하는 데 필요한 기능을 제공할 수 있습니다.
Hyper-V를 사용 중인 경우 일부 타사 애플리케이션을 작동할 수 없습니다. 즉, VMware 및 VirtualBox와 같이 WSL 2를 사용하도록 설정된 경우에는 일부 타사 애플리케이션이 실행되지 않습니다. 그러나 최근에 VirtualBox와 VMware는 모두 Hyper-V 및 WSL2를 지원하는 버전을 릴리스했습니다! VirtualBox 변경 내용 및 VMware 변경 내용에서 자세히 알아보세요. 문제 해결은 GitHub의 WSL 리포지토리에 있는 VirtualBox 문제 토론을 참조하세요.
저희는 타사의 Hyper-V 통합을 지원하기 위해 지속적으로 솔루션을 개발하고 있습니다. 예를 들어 타사 가상화 공급자가 Hyper-V와 호환되는 소프트웨어를 만드는 데 사용할 수 있는 하이퍼바이저 플랫폼이라는 API 세트를 제공합니다. 이를 통해 애플리케이션은 현재 Hyper-V와 호환되는 VirtualBox 6 이상 버전과 Google Android Emulator 같은 에뮬레이션에 Hyper-V 아키텍처를 사용할 수 있습니다.
VirtualBox 6.1의 WSL 2 문제에 대한 자세한 배경 및 논의는 WSL 문제 리포지토리를 참조하십시오.
*Windows 가상 머신을 찾는 경우, Windows 개발자 센터에서 VMWare, Hyper-V, VirtualBox 및 Parallels VM 다운로드를 사용할 수 있습니다.
WSL 2 배포판 내부의 GPU 액세스 지원을 릴리스했습니다. 즉, 이제 빅 데이터 세트가 관련될 때 기계 학습, AI 및 데이터 과학 시나리오에 대해 WSL을 더 쉽게 사용할 수 있습니다. GPU 지원 시작 자습서를 확인하세요. 현재 WSL 2에는 직렬 지원 또는 USB 디바이스 지원이 포함되어 있지 않습니다. 이러한 기능을 추가하는 가장 좋은 방법을 찾고 있습니다. 그러나, USB 지원은 이제 USBIPD-WIN 프로젝트를 통해 사용할 수 있습니다. USB 디바이스 지원을 설정하는 단계는 USB 디바이스 연결을 참조하십시오.
예, 일반적인 네트워킹 애플리케이션은 전체 시스템 호출 호환성을 제공하므로 WSL 2에서 잘 작동하고 훨씬 빠릅니다. 그러나, WSL 2 아키텍처는 가상화된 네트워킹 구성 요소를 사용합니다. 즉, WSL 2는 가상 머신과 유사하게 작동합니다. WSL 2 배포판은 호스트 컴퓨터(Windows OS)와 다른 IP 주소를 갖습니다. 자세한 내용은 WSL에서 네트워크 애플리케이션 액세스를 참조하십시오.
예! 가상 머신에 중첩된 가상화가 사용 설정되었는지 확인해야 합니다. PowerShell 창에서 관리자 권한으로 다음 명령을 실행하면 부모 Hyper-V 호스트에서 이를 사용하도록 설정할 수 있습니다.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
'<VMName>'을 가상 머신 이름으로 바꾸세요.
WSL 2는 WSL 1에서 사용하는 것과 동일한 wsl. 파일을 지원합니다. 즉, WSL 1 배포판에서 설정한 모든 구성 옵션(예: Windows 드라이브 자동 탑재, interop 사용 또는 사용 안 함, Windows 드라이브가 탑재될 디렉터리 변경 등)이 모두 WSL 2 내에서 작동합니다. 배포판 관리 페이지에서 WSL의 구성 옵션에 대해 자세히 알아볼 수 있습니다. WSL 2에서 Linux 디스크 탑재 문서에서 드라이브, 디스크, 디바이스 또는 VHD(가상 하드 디스크) 탑재 지원에 대해서 자세히 알아봅니다.
WSL 제품 리포지토리 문제를 통해 다음을 수행할 수 있습니다.
- 기존 문제를 검색하여 현재 발생하는 문제와 관련된 문제가 있는지 확인합니다. 검색 창에서 "is:open"을 제거하여 이미 해결된 문제를 검색에 포함할 수 있습니다. 미해결 문제 중에서 우선적으로 해결되기를 원하는 관심을 표시하려는 문제에 주석을 달거나 좋아요를 눌러 주시기 바랍니다.
-
새 문제를 제출합니다. WSL에서 문제를 발견했는데 기존 문제가 아닌 것으로 보이는 경우 녹색 새 문제 단추를 선택한 다음, WSL - 버그 보고서를 선택하면 됩니다. 문제의 제목, Windows 빌드 번호(현재 빌드 번호를 보려면
cmd.exe /c ver
실행), WSL 1 또는 2 중에 현재 실행하고 있는 버전, 현재 Linux 커널 버전 번호(wsl.exe --status
또는cat /proc/version
실행), 배포판의 버전 번호(lsb_release -r
실행), 관련된 기타 소프트웨어 버전, 재현 단계, 예상 동작, 실제 동작 및 진단 로그(사용 가능하고 적절한 경우)를 포함해야 합니다. 자세한 내용은 WSL에 기여를 참조하세요. - 녹색 새 문제 단추를 선택하고 기능 요청을 선택하여 기능 요청을 제출합니다. 요청을 설명하는 몇 가지 질문에 답해야 합니다.
다음도 가능합니다.
- WSL 문서 리포지토리를 사용하여 설명서 문제를 제출합니다. WSL 문서에 기여하려면 Microsoft Docs 기여자 가이드를 참조하세요.
- 문제가 Windows 터미널, Windows 콘솔 또는 명령줄 UI와 좀 더 관련이 있는 경우 Windows 터미널 제품 리포지토리를 사용하여 Windows 터미널 문제를 제출합니다.
최신 WSL 뉴스를 최신 상태로 유지하려면 다음을 수행하세요.
- 명령줄 팀 블로그
- Twitter. Twitter에서 @craigaloewen을 팔로우하여 뉴스, 업데이트 등에 대해서 알아보십시오.