Linux 개발 환경 용 Windows 서브 시스템에서 파일 편집


23

Linux 용 Windows 하위 시스템 (WSL)은 대부분의 명령 줄 Linux 도구를 사용하지 않고 수정없이 Windows에서 작업하는 데 매우 효과적입니다. 그러나 원하는 경우 개발이 약간 까다로워집니다.

  • 잘 지원되는 Windows 버전 (Ruby, Node 등)이없는 Linux 툴체인 을 사용하여 프로젝트를 빌드하십시오.
  • Visual Studio 코드와 같은 Windows 기반 GUI 편집기를 사용하여 파일을 편집하십시오 .

문제는 Windows 앱 이 가상 lxss 파일 시스템 내의 파일을 수정할 수 없다는 것 입니다. 이러한 파일을 직접 수정하면 모든 종류의 문제가 발생하는 것으로 알려져 있습니다.

따라서 개발에 WSL을 사용하는 경우 최적이 아닌 두 가지 선택이있는 것 같습니다.

  1. lxss ( /home/foo)에 프로젝트를 저장하십시오 . 정상적인 툴체인이 제대로 작동합니다. 그러나 편집은 터미널 기반 Vim / Emacs 또는 janky X 서버 에서 실행할 수있는 것으로 제한되며 , 이는 Windows에서 실행되는 기본 편집기보다 덜 부드럽습니다.

  2. 프로젝트를 Windows 파일 시스템 ( /mnt/c/Users/foo)에 저장하십시오 . 이제 모든 Windows 기반 편집기를 개발에 사용할 수 있습니다. 그러나 Linux 기반 툴체인은 "네트워크 드라이브"에서 사용하도록 설계되지 않았기 때문에 취약하며 파일 감시 또는 데이터베이스에 문제를 일으킬 수 있습니다 .

여기에서 두 가지 이점을 모두 누릴 수있는 방법이 있습니까? 즉, 기본 Windows 응용 프로그램을 사용하여 편집 할 수 있지만 여전히 로컬 드라이브에서와 마찬가지로 Linux 도구 체인이 작동합니까?

답변:


4

Microsoft는 최근 이에 대한 포괄적 인 지원을 추가했으며 일반적으로 2019 년 4 월 (19H1) 업데이트에서 사용할 수 있습니다. 준비가되면 Linux 배포판이 실행될 때마다 9P 서버가 백그라운드에서 실행됩니다. 9P 서버는 Linux 파일 시스템 메타 데이터를 처리 할 수 ​​있으며 Windows는이를 안전하게 액세스 할 수 있도록 네트워크 드라이브로 취급 할 수 있습니다. https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/ 에서 읽을 수 있습니다 .

새로운 기능을 사용하면 9P 서버를 거치는 한 Windows에서 Windows 및 Linux 파일 시스템 파일 모두에 안전하게 액세스 할 수 있습니다. 이것은 WSL 내에서 기본적으로 처리됩니다. 예를 들어 WSL 명령 줄에서 입력 code /mnt/c/Users/username/src/windows-file.txt하여 VS 코드에서 Windows 파일 code /home/username/src/linux-file.txt을 열거 나 입력 하여 VS 코드에서 Linux 파일을 열 수 있습니다.

Windows 참가자 프로그램에 속하지 않은 경우 아직이 프로그램에 액세스 할 수 없으므로 wslpath와 같은 이전 방법을 사용해야합니다.

wslpath는 Windows 및 Linux 스타일 경로를 변환하므로 WSL 명령 행에서 Windows 파일을 쉽게 열 수 있습니다. 당으로 https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 , 그것은 리눅스 파일 시스템 경로를 변환하기를 거부한다 (예 %의 AppData % \ lxss), 9P없이 윈도우에서 이러한 파일을 수정하는 데 안전하지 않은 때문에 . 즉 /home/username/src/linux-file.txt, 열 수는 없지만 사용할 수는 있습니다 code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)".

과거에는 동일한 변환을 수행하는 많은 타사 도구가 있었지만 wslpath는 기본적으로이를 수행하지만 실제로 ls -l /bin/wslpath는 / init에 대한 링크 일뿐입니다.


@alex wsltools는 Linux 경로를 Windows와 동등한 경로로 변환 할 수 있습니다. 이런 방식으로 Linux 명령 행에서 Windows 프로그램을 열고 Windows 파일 시스템에서 파일을 열도록 지시 할 수 있습니다.
셰인 로렌스

그렇게 생각하지 마십시오. blogs.msdn.microsoft.com/commandline/2016/11/17/... . 그렇게하는 것이 안전하다고 언급 할 수 있습니까?
Alex

@alex 감사합니다. 이것은 명확히하는 좋은 포인트입니다. 공유 한 링크 (OP의 질문이기도 함)는 Windows에서 Linux 파일 시스템의 파일을 열지 말라고 지시합니다 (즉, Windows 응용 프로그램을 사용하여 % AppData % \ lxss에서 항목을 변경하지 마십시오). 내 대답과 이전 의견은 WSL 명령 줄에서 Windows 프로그램 내에서 Windows 파일을 여는 방법을 설명합니다 (예 : WSL 경로 "/ mnt / c / Users /에서"C : \ Users \ Username \ src \ example.txt "열기). 사용자 이름 /src/example.txt "). 새로운 방법도 나오고 있습니다. 구별과 새로운 방법을 보여주기 위해 답변을 업데이트했습니다.
셰인 로렌스

셰인, Windows 바이너리를 사용하여 Windows 파일을 편집하려는 경우 WSL을 사용하는 시점은 무엇입니까? 왜 창문 만 사용하지 않습니까?
Alex

좋은 소식 : WSL은 이제 Win10 1903 관련 문제없이 Linux 파일을 편집 할 수 있습니다. devblogs.microsoft.com/commandline/… "과거에는 Windows에서 Linux 파일을 생성하고 변경하면 파일이 손실되거나 데이터가 손상되었습니다. "요청이 많고 오랫동안 기대되는 기능입니다. 이제 Windows에서 Linux 배포판의 모든 파일에 쉽게 액세스 할 수있게 된 것을 자랑스럽게 생각합니다."
KERR

1

저보다 똑똑한 사람들이이 질문을 본 것 같습니다. 그러나 나는 대답 할 것이다. 나는 정답이 현재 아니오라고 믿습니다. 당신이 언급 한 것 이외의 두 세계를 모두 얻는 더 좋은 방법이 있습니다 (내가 아는 것).

나는 그것이 누군가가 원하는 대답이 아니라고 확신하지만 그것이 정답이라고 생각합니다. 나는 그것이 Microsoft가 더 매끄럽게하려고 노력하고 있지만 아직 거기에 있지 않다는 것을 알고 있습니다.


그리고 여전히 그렇지 않습니다.
hugo der hungrige

0

2018 년 상반기에 Microsoft는 이러한 문제 중 일부를 해결하기 위해 WSL에 대한 몇 가지 개선 사항을 발표했습니다.

이들 중 어느 것도 내 원래 질문의 문제를 완전히 해결하지는 못하지만 특정 사례에서는 유용성을 향상시킬 수 있습니다.


감사! 계속 업데이트하십시오. 선택한 파일에 내가 좋아하는 GUI 편집기를 "안전하게"사용할 수 있다면 괜찮을 것입니다. 적절한 빌드 도구 통합 없이도 콘솔에서 수행 할 수 있습니다. 파일을 투명하게 수행하는 한 파일을 로컬 창 복사로 일시적으로 "동기화"해도 문제가 없습니다. CLI에서 모든 파일을 편집하고 추적하기가 너무 어렵습니다. (최소한 저에게는), Windows의 모든 항목, "보내기 / 복사"코드를 WSL에 원합니다. ., 도구가 실행
댄 M.

0

Linux 명령을 실행하고 Windows 편집기를 사용하여 편집하려는 경우 파일 시스템의 어딘가 (c : \ source \와 같은) 소스 코드 (편집하고 테스트하려는)를 보유하고 / mnt / c / source를 통해 Linux 콘솔에서 액세스 할 수 있습니다. 도움이 되었기를 바랍니다.


0

이제 Visual Studio Code가 지원합니다 (사용하고 있습니다). Linux 위치에서 CRUD (만들기, 읽기, 업데이트, 삭제) 파일 / 폴더를 수행 할 수있는 "WSL 확장명" 나는 여전히 atom에 대해 동일한 설정을 얻는 데 어려움을 겪고 있지만 Linux 플랫폼에서 Rails 응용 프로그램 개발을 위해 선택한 편집기였습니다.

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