Windows Linux 하위 시스템-Ubuntu 외부의 파일 액세스


90

예를 들어 Windows에서 파일을 만들 때 Windows 10의 Linux 하위 시스템 (bash.exe)에서 파일을 볼 수없는 이유는 무엇입니까?

스크린 샷이 설명되어야합니다.

폴더 : OMG는 Windows 탐색기에서 생성되었습니다. OMGBash 폴더는 Linux 서브 시스템 bash.exe로 작성되었습니다.

폴더 OR 파일이 bash.exe 외부에서 생성되면 권한과 소유권에 관계없이 볼 수 없습니다.

Cygwin을 사용하여 파일 권한을 표시해야하는 정보를 표시하기 위해 폴더가 표시되는지 확인하기 위해 권한도 변경했습니다. (하단에 두 개의 명령 창)

폴더, bash.exe 및 Cygwin 권한을 보여주는 스크린 샷 :

여기에 이미지 설명을 입력하십시오

모든 Cygwin 스크립트를 Linux 하위 시스템으로 옮기려고 하지만 모든 파일을 다시 작성하고 bash를 사용하여 복사하여 붙여 넣은 다음 Dos2unix를 사용하여 다시 포맷해야합니다 (매우 길다).

Linux 하위 시스템의 GitHub에서이를 찾았습니다.

다른 티켓에 대한 논의에 따르면 Windows에서 Linux 서브 시스템으로 직접 복사하는 것은 지원되지 않습니다. AppData 아래에 WSL 파일 시스템의 파일을 포함하는 것으로 보이는 디렉토리가 있습니다 (어딘가는 잊어 버렸습니다). 그러나 새 파일을 저장하거나 기존 파일을 수정하면 변경 내용이 WSL에 올바르게 반영되지 않습니다.

가장 좋은 추측은 Linux가 Windows와 파일에 대해 다른 메타 데이터 (및 디스크 버퍼링 모델도 다르기 때문에 더 많은 캐싱 정보 등)를 저장해야하며, 현재 구조의 마스터 사본을 저장하여 구현 된 것입니다. 어떤 종류의 데이터베이스에서 Linux 파일 시스템을 사용하고 Windows 파일 시스템을 해당 데이터베이스의 편리한 BLOB 저장소로 사용합니다.

실제로이 작업을 수행해야하는 경우 해결 방법은 드래그 앤 드롭 .bat 스크립트 또는 bash.exe -c "mv % 1 / home / $ USER /"를 수행하는 스크립트를 작성하는 것입니다. (% 1을 유효한 WSL 경로로 변환하려면 sed 및 tr을 사용하여 영리한 작업을 수행해야합니다.)

또는 파일을 Windows 디렉토리에 넣고 WSL 내에서 "cd ~; ln -s / mnt / c / path / to / my / files"를 수행하여 WSL homedir에있는 것처럼 보이게 할 수 있습니까?


Linux 환경에서 Windows HDD를 마운트 할 수 있습니까? 이런 식으로는 모든 실시간으로 파일 (또는 Cygwin에서 가정의 경우에도 디렉토리 만) 표시해야합니다
Hastur

3
좋은 생각이지만 불행히도 파일은 보이지 않습니다. 그 주위의 방법은 Bash.exe를 통해 Windows 디렉토리에서 Linux 하위 시스템 디렉토리로 파일을 복사하는 것입니다. 이렇게하면 cp -r --no-preserve=all 이전 권한을 삭제 해야합니다 . 여전히 많은 부분을 변경하려면 Windows 응용 프로그램을 사용하여 LinuxSubSystem에서 파일을 편집 할 수 없습니다. Windows 디렉토리에서 파일을 편집 한 다음 복사해야합니다. 이제 나는 이것이 가능하다는 것을 알고있다. 그러나 나는 리눅스 서브 시스템이 고립 된 OS보다 윈도우에 더 기본적이고 통합되어 있다는 인상을 받았다
Dave Hamilton


Windows 스토어에서 배포판을 설치하면 파일 시스템은에 있습니다 %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
이안 켐프

답변:


101

귀하의 질문을 오해하고 있는지 잘 모르겠지만 우분투 bash (오른쪽 상단 창)에서 Windows 기반 디스크에 액세스 할 수 있어야합니다 /mnt. 예를 들어, 내 컴퓨터 /mnt/c/Users/Scott/Desktop에는 Windows 바탕 화면이 있으며 vi에서 ex 파일을 읽거나 쓸 수 있습니다. 나는 아직 그 반대가 사실이라고 생각하지 않습니다. 즉, Windows 탐색기에서 bash 세계를 탐험 할 수 있다고 생각하지 않습니다.

내가 개발자로하고있는 일은 내 d에서 프로젝트를 호스팅하고 Linux 기반 도구를 해당 /mnt/d/projects/someproject/폴더로 지정하는 것입니다.

Windows 빌드가 각 빌드와 관련된 많은 문제, 특히 sym-links 및 Linux / Windows 간의 FS 경계를 넘는 문제를 해결하는 것처럼 주기적으로 업데이트해야합니다.


1
당신은 맞습니다, 나는 총을 약간 뛰었다 고 생각합니다. Bash는 Windows 파일에 액세스 할 수 있지만 Windows는 Linux Sub System 디렉토리에 파일을 복사 할 수 없습니다. (그런 다음 복사 할 수는 있지만 Bash는 파일 권한을 유지하므로 파일을 볼 수 없습니다) bash를 설치했을 때 가장 논리적 인 것은 프로젝트를 한 Linux 환경에서 다른 Linux 환경으로 옮기는 것이 었습니다 (Cwygin을 비우려고 시도했습니다). 이것이 두통의 길을 시작하게했습니다. 나는 지금 나의 이전 리눅스 환경의 시작 디렉토리를 가지고 거기에서 작동하도록 Bashrc를 설정했다. 당신의 응답을 주셔서 감사합니다.
Dave Hamilton

잠깐, 어떻게 / mnt / d를 표시합니까? 예를 들어, MTP를 통해 전화를 연결하면 "This PC \ PhoneName"과 같은 경로에 표시되지만 이와 관련된 드라이브 문자는 없습니다.
Michael

후행 슬래시가 없으면 심볼릭 링크가 작동합니다. 또한 Django 프로젝트를 로컬에서 실행하고 브라우저에서 파일에 액세스하는 것과 같은 작업을 수행하려면 파일 시스템의 Windows 측에 파일이 있어야합니다.
Zags

그러나 Windows 파일을 수정할 때 Linux 파일은 업데이트되지 않습니까?!?!
BugWhisperer

20

@ scottt732가 아름답게 대답했습니다.

Windows에서 작업하고 Linux Subsystem에서 해당 파일에 빠르게 액세스하려는 개발자를위한 팁입니다. 심볼릭 링크 를 사용할 수 있습니다 .

예를 들어에서 프로젝트를 작업하는 경우 d:/projects/web-project위치에서 심볼릭 링크를 만들 수 /var/www/web-project있으며 Windows에서 변경 한 모든 파일을 Linux Bash에서 쉽게 액세스 할 수 있습니다.

이를 위해 다음 ln과 같은 명령을 사용 합니다

ln -s  /mnt/d/projects/web-project  /var/www/web-project

위의 줄 /mnt/d은 Windows에서 d 드라이브로 사용되었습니다. 이 경로에 Apache 가상 호스트를 설정하면 바로 사용할 수 있습니다.


매번 서버를 다시 시작하지 않으면 실제로 동기화되지 않습니다.
BugWhisperer

@Anthony의 심볼릭 링크이므로 서버를 다시 시작할 필요가 없습니다. 실제로 이것은 동기화되지 않으며 해당 폴더 / 경로를 가리 킵니다.
Riz

1
나는 문제를 알아 냈다. CSS 파일은 예를 들어와 같이 이름에 대시가 있기 때문 css-file.css입니다. 이 문제에 대해 여기에 게시했습니다 .
BugWhisperer

9

Windows 앱을 사용하여 Linux 파일을 복사 / 만들기 / 업데이트하지 않는 것이 좋습니다 .

대신 c:\dev\projectWindows 도구를 사용하여 파일을 편집하거나 Linux 도구 / 런타임 / 플랫폼 (예 :를 통해 /mnt/c/dev/project)을 사용하여 파일을 편집하려는 파일을 Windows 파일 시스템 (예 :)에 저장하십시오 .

로 : 특정 시나리오에서는 다음 배쉬로 열린 강타를 당신의 Cygwin에서 파일을 복사하고 C에 Cygwin에서 폴더에서 파일을 복사하려면 ~/다음과 같이 : cp /mnt/c/Users/dave/Documents/Cygwin/* ~/)

HTH.


1

Windows 10에서 PyCharm / eclipse로 작업 해야하는 동안 Linux 환경이 필요했습니다.

git에서 Linux Sub System으로 체크 아웃하는 데 문제가 있었고 PyCharm 파일로 편집하는 것이 즉시 보이지 않고 문제가있었습니다.

devcode=/DevCode

if [ ! -L $devcode ]; then
     ln -s /mnt/c/DevCode /DevCode 
fi

우분투 지역의 .bashrc에 위의 내용이 있습니다. 원활하게 작동합니다. 아무 문제없이 Windows를 편집하고 우분투에서 실행 / 테스트 할 수 있습니다.


0

WSL과 win10 사이에 파일을 복사 해야하는 비슷한 요구가있었습니다. 우분투 설치에서 sshd를 활성화하여 win10에서 Linux로 ssh 할 수있었습니다. 그런 다음 winscp를 사용하여 파일을 앞뒤로 복사합니다. 최적은 아니지만 파일을 자주 복사하지는 않습니다. sshd를 활성화하는 데 사용한 게시물을 찾으려고했지만 찾을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.