Git-Bash와 WSL은 디렉터리 구조가 다릅니다.

Git-Bash와 WSL은 디렉터리 구조가 다릅니다.

그래서 저는 현재 Windows에서 매우 유용한 명령줄 도구를 사용할 수 있도록 Windows 10 워크스테이션에서 WSL을 구성하고 설정하는 중입니다. 이제 WSL과 Git-Bash 모두에서 사용자가 액세스할 수 있는 PC의 모든 드라이브와 파티션, 모든 파일에 액세스할 수 있지만 경로는 다릅니다. temp몇 개의 파일이 있는 디렉토리가 있다고 가정해 보겠습니다.

tree C:\Temp
C:\TEMP
├───tempfile1.txt
├───tempfile2.txt
└───tempfile3.txt

그런 다음 Git-Bash를 열 때(사용하여이것SO Q&A) 디렉토리에서 명령 C:\Temp을 실행하면 pwd경로가 다음과 같이 표시됩니다.

/c/Temp

하지만 이상하게도 Git-Bash ls에서 명령을 실행하면 디렉터리 /도 표시되지 않고 디렉터리 c도 표시되지 않습니다 mnt.

이제 WSL을 사용하려면 Open Linux Shell hereWindows 탐색기에서 마우스 오른쪽 버튼을 클릭하고 실행하면 pwd경로가 다음과 같이 표시됩니다.

/mnt/c/Temp

그래서 제 질문은 이것입니다: Windows에서 '/' 디렉토리는 무엇이며 어디에 있습니까? 그리고 이것이 루트 디렉토리를 "모의"하는 두 가지 다른 방법입니까?

편집하다:
Windows 버전: Windows 10 Enterprise Edition 버전 1903(빌드 18362.267)
WSL 버전: 1809(빌드 17763)(작성 당시 최신 릴리스)

답변1

Git-Bash는 일반적인 Windows 프로그램이며 그와 같은 기능을 합니다. C:\루트 디렉토리로 간주됩니다 .

그러나 WSL은 다릅니다. 컨테이너인지 VM인지는 확실하지 않지만, 어쨌든 일반적인 Windows 프로그램은 아닙니다.
여전히 Windows에서 실행되지만 WSL에서 실행하는 모든 항목은 본질적으로 Windows가 아닌 Linux에서 실행되는 것으로 간주됩니다. 이는 Linux의 디렉토리 구조와 같은 Linux 표준을 따르도록 합니다.

C:\이는 가 아닌 자체 루트 디렉토리가 있음을 의미합니다 /. 이 디렉터리의 위치는 AppData 어딘가에 있으며 WSL 버전과 Ubuntu, OpenSUSE 등을 사용하는지 여부에 따라 다릅니다.

Linux에서는 드라이브에 문자가 부여되지 않습니다. 마운트 지점이 제공됩니다. 예를 들어 루트는 /WSL의 경우 루트 파티션 또는 폴더의 탑재 지점입니다. 아래의 모든 드라이브가 /동일한 드라이브는 아닙니다. 예를 들어 내 노트북에서는 /home/별도의 파티션에 있습니다.

/mnt/Linux 파일 구조의 마운트 디렉터리입니다. 그것은 외부 물건을위한 것입니다.

/mnt/c/너의 C:\. Linux는 드라이브 문자를 제공하지 않기 때문에 이와 같아야 합니다. 이는 WSL에서 Windows 파일에 액세스하는 정확하고 가장 우아한 방법입니다. 이것이 WSL의 bash가 C:\.

가장 일반적인 WSL 배포판(Ubuntu)이 있다고 가정하면 /다음 위치에 있어야 합니다.

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

해당 배포판이 없거나 다른 배포판을 사용하는 경우 여기를 확인하세요.

%LOCALAPPDATA%\Packages\

그러나 Linux는 Windows와 매우 다르게 파일 권한을 처리합니다. 파일 탐색기와 같은 Windows 도구를 사용하여 여기에서 아무 작업도 수행하지 마십시오. OS 간에 상호 작용해야 하는 경우 WSL 내에서 수행하세요.

답변2

간단히 bash에서 이 명령을 사용하세요

cd //wsl.localhost/dir

나는 아래 명령을 사용하여 내 lampp의 htdocs에 들어갑니다.

cd //wsl.localhost/Ubuntu/opt/lampp/htdocs/

답변3

WSL용 / 폴더는 WSL용으로 설치한 Linux 배포판에 따라 C:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation 네트워크 리소스 또는 유사한 네트워크 리소스로 찾을 수도 있습니다 .\\wsl$\Ubuntu-18.04

git bash의 경우 위치는 다음과 같습니다.C:\Program Files\Git

explorer.exe .폴더에 git bash를 입력하면 언제든지 폴더의 실제 위치를 찾을 수 있으며 wsl은 모두 .경로를 변환하여 실행하는 Windows 응용 프로그램에 전달합니다.

즉, /WSL 파일을 사용하면 제대로 읽는 데 문제가 있을 수 있으므로 응용 프로그램의 창을 통해 이러한 에뮬레이트된 폴더의 파일을 열면 안 됩니다.

이러한 프로그램은 CPU와 메모리 할당이 분리된 가상 머신을 생성하지 않고 Unix 파일 시스템을 에뮬레이션합니다. 일반 응용 프로그램처럼 창과 공유합니다. (Windows 10 pro Hyper-V를 사용하여 전체 VM을 실행하는 WSLv2의 경우 제외)

/c또는 위치 /mnt/c는 Windows에서 네트워크 드라이브를 매핑 Z:하고 로컬 디스크인 것처럼 가장하는 것과 매우 유사한 네트워크 마운트입니다.

GIT bash 및 WSL은 마치 네트워크 리소스인 것처럼 Windows 루트 드라이브를 마운트합니다. Linux에서는 /folder드라이브 문자 개념이 없기 때문에 드라이브를 마운트합니다 .

원하는 경우 git bash와 동일한 방식으로 드라이브를 마운트하도록 WSL에 지시할 수 있습니다.

wsl 유형에서 /etc/wsl.conf파일을 편집하십시오.

그리고 다음을 추가하세요.

[automount]
root = /

파일을 저장하고 Windows에서 로그오프한 후 다시 로그인하세요.

이제 WSL을 시작하면 로컬 하드 드라이브에 대한 git bash와 동일한 경로를 갖게 됩니다.

또한 이들은 Linux 운영 체제에서 사용하는 파일 시스템을 에뮬레이트하지만 완벽하게 수행하지는 않으며 동일한 방식으로 수행하지도 않습니다.

예를 들어 Unix 파일 시스템에는 파일에 대한 권한이 있으며, git bash는 "SHOULD BE"와 실행 파일이 무엇인지 자동으로 감지하고 +x 속성을 추가합니다. WSL은 이 작업을 잘 수행하지 않으며 일반적으로 모든 것을 실행 가능하게 만듭니다.

관련 정보