저는 몇 년 동안 Linux를 사용해 왔으며 WSL2를 사용해 보고 싶었습니다. 놀라운 점은 Windows PE 바이너리(*.exe 파일)를 "이렇게" 실행할 수 있다는 것입니다. 어떤 연구 결과에 따르면 이는 binfmt_misc
Linux의 특성 때문이라는 것을 알게 되었습니다 . Windows 실행 파일의 인터프리터가 /tools/init
.
그런데 디렉터리를 찾을 수 없습니다 /tools
(실행 파일만 찾을 수 있습니다 /init
). WSL2에서 실행하면 mount | grep tools
다음이 제공됩니다.
tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)
그러나 나는 그것을 찾을 수도 없습니다 /init/
(내가 찾을 수 있는 가장 좋은 것은 C:\Windows\System32\lxss\tools
Windows에서입니다). WSL2에서는 이것이 어떻게 작동하나요? /
이 장착 지점 "위"에 설치되어 있습니까 ? 그렇다면 /tools
WSL2 또는 에서 콘텐츠를 어떻게 볼 수 있나요?/init
답변1
먼저, 대부분의 WSL은 비공개 소스이므로 관찰된 동작과 Linux 및 Windows 메커니즘에 대한 이해를 통해 일부 정보를 수집해야 합니다. 즉, Microsoft는 Interop의 작동 방식에 대한 많은 흥미로운 정보를 제공합니다. 마이크로소프트 블로그 포스트Windows와 Ubuntu 상호 운용성훌륭한 책이지만 개인적으로는 아직 부담스럽습니다. WSL1 시대에 작성되었지만 대부분은 여전히 WSL2에 적용됩니다.
이 블로그를 읽을 때 주의하세요. 일부 용어가 변경되었습니다. 예를 들어 bash.exe
지금은 wsl.exe
"Ubuntu"가 당시 사용 가능한 유일한 배포판입니다.
Microsoft의 구현은 비공개 소스이지만 이 블로그는 다음 링크로 연결됩니다.개척자 오픈 소스 프로젝트이를 통해 WSL은 Windows 바이너리를 실행할 수 있으므로 학습할 내용을 확인하는 것이 흥미로울 수 있습니다.
그러나 나는 그것을 찾을 수도 없습니다
/init/
(내가 찾을 수 있는 가장 좋은 것은C:\Windows\System32\lxss\tools
Windows에서입니다).
우리는 적어도 꽤 명확하게 대답할 수 있습니다. Windows의 도구 디렉토리에서 init
바이너리를 찾을 수 있습니다 . /init
WSL(버전 1 또는 2에 관계없이) 인스턴스에 표시되는 내용은 실제로는존재하다파일 시스템에서. 인스턴스를 시작하면 WSL에 의해 탑재됩니다. 귀하의 Windows C:\Windows\System32\lxss\tools\init
는 /init
.
WSL Store Preview를 사용하는 경우 실제 바이너리는 ..\System32\lxss
.
또한 위의 블로그 게시물에는 다음 내용이 언급되어 있습니다.
/init
Microsoft에서 작성하고LxssManager.dll
.
더 이상 그렇지 않을 수도 있습니다. 한동안 WSL1과 WSL2의 /init
파일 크기는 약간 달랐습니다. 이 시점에서 크기와 타임스탬프는 동일한 것으로 보입니다. 이는 Microsoft가 적어도 현재 실행 중인 스토어 미리 보기 빌드에서는 /init
이 작업 에서 완전히 물러났을 수 있음을 의미합니다 .LxssManager.dll
/
이 장착 지점 "위"에 설치되어 있습니까 ?
위에서 이 질문에 답했다고 생각하지만, 명확히 말하면 그 반대입니다. /init
부팅 시 설치됩니다 /
. 적어도 WSL2에서는 네트워크 파일 시스템인 9P 프로토콜 파일 시스템을 사용합니다. 기본적으로 9P는 모든 Windows 드라이브를 /mnt/c
, /mnt/d
(등) 에 마운트하는 데에도 사용됩니다 .
tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)
따라서 마운트 지점은 "Windows ..\lxss\tools
디렉터리가 9P 프로토콜을 통해 마운트되었습니다 /init
"로 해석됩니다.
더 흥미로운 정보저는 같은 문제에 대해 Reddit에 올린 u/diddlesnaps의 게시물을 알지 못합니다. 이 정보(나에게 완벽하게 이해됨)에 따르면 tools
설치는 WSL을 통해 수행된 initrd
다음 제거됩니다.