Chỉnh sửa tệp trong môi trường phụ Windows cho môi trường phát triển Linux


23

Hệ thống con Windows cho Linux (WSL) hoạt động khá tốt để làm cho hầu hết các công cụ Linux dòng lệnh có sẵn và hoạt động trên Windows mà không cần sửa đổi. Tuy nhiên, nó có một chút khó khăn để phát triển, khi một người muốn

  • Xây dựng dự án bằng cách sử dụng chuỗi công cụ Linux không có tương đương Windows được hỗ trợ tốt (Ruby, Node, v.v.)
  • Chỉnh sửa tệp bằng trình chỉnh sửa GUI dựa trên Windows, chẳng hạn như mã Visual Studio.

Vấn đề là các ứng dụng Windows không thể sửa đổi các tệp bên trong hệ thống tệp lxss ảo . Sửa đổi trực tiếp các tập tin này được biết là gây ra tất cả các loại vấn đề.

Do đó, dường như chỉ có hai lựa chọn tối ưu khi sử dụng WSL để phát triển:

  1. Lưu trữ dự án theo lxss ( /home/foo). Các toolchain bình thường hoạt động đúng. Tuy nhiên, việc chỉnh sửa bị giới hạn ở cả Vim / Emacs dựa trên thiết bị đầu cuối hoặc bất cứ thứ gì có thể được chạy trong máy chủ X janky , hoạt động kém mượt mà hơn các trình soạn thảo gốc chạy trên Windows.

  2. Lưu trữ dự án trong hệ thống tập tin Windows ( /mnt/c/Users/foo). Bây giờ bất kỳ trình soạn thảo dựa trên Windows có thể được sử dụng để phát triển. Tuy nhiên, chuỗi công cụ dựa trên Linux rất mong manh vì nó không được thiết kế để sử dụng trên "ổ đĩa mạng" và có thể gây ra sự cố với xem tệp hoặc cơ sở dữ liệu .

Có cách nào để có được thứ tốt nhất của cả hai thế giới ở đây - nghĩa là có thể chỉnh sửa bằng ứng dụng Windows gốc, nhưng vẫn có công cụ Linux hoạt động như bình thường trên ổ đĩa cục bộ?

Câu trả lời:


4

Microsoft gần đây đã bổ sung hỗ trợ toàn diện cho việc này và thường sẽ có sẵn trong bản cập nhật tháng 4 năm 2019 (19H1). Khi đã sẵn sàng, máy chủ 9P sẽ chạy trong nền bất cứ khi nào bản phân phối Linux đang chạy. Máy chủ 9P sẽ có thể xử lý siêu dữ liệu hệ thống tập tin Linux và Windows sẽ có thể coi nó như một ổ đĩa mạng để có thể truy cập nó một cách an toàn. Bạn có thể đọc về nó tại https://bloss.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/ .

Với tính năng mới, bạn sẽ có thể truy cập an toàn cả tệp hệ thống tệp Windows và Linux từ Windows, miễn là bạn đi qua máy chủ 9P. Điều này sẽ được xử lý tự nhiên từ bên trong WSL. Ví dụ: từ dòng lệnh WSL, bạn sẽ có thể nhập code /mnt/c/Users/username/src/windows-file.txtđể mở tệp Windows trong Mã VS hoặc nhập code /home/username/src/linux-file.txtđể mở tệp Linux trong Mã VS.

Nếu bạn không phải là một phần của Chương trình Người dùng nội bộ Windows, bạn sẽ không có quyền truy cập này vì vậy bạn vẫn phải sử dụng một phương pháp cũ hơn, chẳng hạn như wslpath.

wslpath sẽ chuyển đổi giữa các đường dẫn kiểu Windows và Linux để bạn có thể dễ dàng mở các tệp Windows từ dòng lệnh WSL. Theo https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 , nó sẽ từ chối chuyển đổi đường dẫn hệ thống tệp Linux (ví dụ:% AppData% \ lxss), vì không có 9P để sửa đổi các tệp này từ Windows . Điều này có nghĩa là bạn không thể mở /home/username/src/linux-file.txt, nhưng bạn có thể sử dụng code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)".

Trước đây, có một số công cụ của bên thứ ba thực hiện cùng một chuyển đổi nhưng wslpath thực hiện điều đó - thực tế, ls -l /bin/wslpathcho thấy rằng đó chỉ là một liên kết đến / init.


@alex wsltools có thể chuyển đổi các đường dẫn Linux sang tương đương Windows của chúng. Bằng cách này, bạn có thể mở một chương trình Windows từ dòng lệnh Linux và bảo nó mở một tệp trên hệ thống tệp Windows.
Shane Lawrence

Đừng nghĩ vậy. blog.msdn.microsoft.com/commandline/2016/11/17/ . Bạn có thể cung cấp bất kỳ tài liệu tham khảo rằng nó là an toàn để làm như vậy?
Alex

@alex cảm ơn vì đã đưa cái này lên. Đây là một điểm tốt để làm rõ. Liên kết bạn đã chia sẻ (cũng là câu hỏi của OP) đang nói với bạn rằng không mở các tệp trong hệ thống tệp Linux từ Windows (tức là không sử dụng các ứng dụng Windows để thay đổi mọi thứ trong% AppData% \ lxss). Câu trả lời của tôi và nhận xét trước đây của tôi đều mô tả cách mở tệp Windows trong các chương trình Windows từ dòng lệnh WSL (ví dụ: mở "C: \ Users \ Username \ src \ example.txt" từ đường dẫn WSL của nó "/ mnt / c / Users / Tên người dùng / src / example.txt "). Cũng có một phương pháp mới được đưa ra. Tôi đã cập nhật câu trả lời của mình để cho thấy sự khác biệt và phương pháp mới.
Shane Lawrence

Shane, điểm sử dụng WSL là gì nếu bạn định chỉnh sửa các tệp windows với nhị phân windows? Tại sao không chỉ sử dụng windows?
Alex

Tin tốt: WSL hiện có thể chỉnh sửa các tệp linux mà không gặp sự cố với Win10 1903: devbloss.microsoft.com/commandline/, "Trước đây, việc tạo và thay đổi các tệp Linux từ Windows dẫn đến mất tệp hoặc làm hỏng dữ liệu. Tính năng được yêu cầu cao và được mong đợi từ lâu. Chúng tôi tự hào thông báo rằng giờ đây bạn có thể dễ dàng truy cập tất cả các tệp trong bản phân phối Linux của mình từ Windows. "
KERR

1

Tôi chắc rằng những người thông minh hơn tôi đã xem xét câu hỏi này. Nhưng tôi sẽ trả lời nó. Tôi thành thật tin rằng câu trả lời hiện tại là không. Có cách tốt hơn để có được những điều tốt nhất của cả hai thế giới, ngoài những thế giới bạn đã đề cập (Điều mà tôi biết).

Tôi chắc chắn đó không phải là câu trả lời mà ai cũng muốn, nhưng tôi nghĩ đó là câu trả lời đúng. Tôi biết đó là điều mà Microsoft đang cố gắng để làm cho trơn tru hơn, nhưng nó chưa ở đó.


Và nó vẫn không.
hugo der hungrige

0

Trong nửa đầu năm 2018, Microsoft đã phát hành một số cải tiến cho WSL nhằm giải quyết một số vấn đề sau:

Cả hai điều này đều không giải quyết được các vấn đề trong câu hỏi ban đầu của tôi, nhưng chúng có thể cải thiện khả năng sử dụng trong một số trường hợp cụ thể.


Cảm ơn! Giữ cho nó cập nhật. Tôi thậm chí sẽ ổn nếu nó cho phép tôi "sử dụng" trình soạn thảo GUI yêu thích của mình cho các tệp được chọn, tôi có thể sống mà không cần tích hợp công cụ xây dựng thích hợp (có thể được thực hiện từ bảng điều khiển). Ngay cả các tệp "rsync-ing" tạm thời sang bản sao windows cục bộ cũng sẽ ổn miễn là nó được thực hiện trong suốt. Tôi đang tiếp cận một điểm khó chịu ở đó, thật khó để chỉnh sửa và theo dõi tất cả các tệp từ CLI (ít nhất là đối với tôi) và tôi thực sự chỉ muốn "làm tất cả mọi thứ trên windows," gửi / sao chép "mã cho WSL , chạy các công cụ ở đó.
Dan M.

0

Nếu bạn muốn chạy các lệnh linux và chỉnh sửa với các trình soạn thảo windows. Bạn có thể giữ mã nguồn của mình (mà bạn muốn chỉnh sửa và kiểm tra), ở đâu đó trong hệ thống tệp của bạn (như c: \ source \) và truy cập mã đó trong bảng điều khiển linux thông qua / mnt / c / source. Hi vọng điêu nay co ich.


0

Bây giờ Visual Studio Code hỗ trợ (Như tôi đang sử dụng nó). "Phần mở rộng WSL" cho phép bạn thực hiện CRUD (Tạo, đọc, cập nhật, xóa) các tệp / thư mục từ vị trí Linux. Mặc dù tôi vẫn đang vật lộn để có được thiết lập tương tự cho nguyên tử, đó là lựa chọn của tôi về trình soạn thảo cho phát triển ứng dụng Rails trên nền tảng Linux.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.