Hệ thống con Windows Linux - Truy cập tệp bên ngoài Ubuntu


90

Tại sao, khi tôi tạo một tệp từ bên trong Windows chẳng hạn, tôi không thể thấy nó trong hệ thống phụ Linux trong Windows 10 (bash.exe)

Ảnh chụp màn hình nên giải thích.

Thư mục: OMG đã được tạo từ bên trong Windows Explorer. Thư mục OMGBash được tạo từ hệ thống phụ bash.exe của Linux

Khi một thư mục HOẶC tệp được tạo bên ngoài bash.exe, tôi không bao giờ có thể nhìn thấy nó, bất kể quyền và quyền sở hữu.

Để hiển thị thông tin tôi đã phải sử dụng Cygwin để hiển thị quyền truy cập tệp, tôi cũng đã thay đổi quyền để xem thư mục có xuất hiện không. (Hai cửa sổ lệnh ở phía dưới)

Ảnh chụp màn hình hiển thị thư mục, quyền bash.exe và Cygwin:

nhập mô tả hình ảnh ở đây

Tôi đang cố gắng chuyển tất cả các tập lệnh Cygwin của mình sang hệ thống con Linux, nhưng tôi không thích tái tạo mọi tệp, sau đó phải sao chép và sử dụng bash, sau đó định dạng lại sau đó sử dụng Dos2unix (rất dài).

Tìm thấy điều này trên GitHub cho hệ thống con Linux:

sao chép trực tiếp vào hệ thống con Linux từ Windows không được hỗ trợ, theo thảo luận về các vé khác. Có một thư mục dưới AppData ở đâu đó (tôi quên ở đâu) dường như chứa các tệp cho hệ thống tệp WSL. Nhưng nếu bạn đặt các tệp mới ở đó hoặc sửa đổi các tệp hiện có ở đó, các thay đổi của bạn sẽ không được phản ánh chính xác trong WSL.

Tôi đoán tốt nhất là Linux cần lưu trữ siêu dữ liệu khác nhau (và nhiều thông tin bộ đệm hơn, v.v., vì mô hình đệm đĩa của nó cũng khác nhau) về các tệp của nó so với Windows và điều này hiện được triển khai bằng cách lưu trữ bản sao chính của cấu trúc của hệ thống tệp Linux trong một cơ sở dữ liệu thuộc loại nào đó và chỉ sử dụng hệ thống tệp Windows làm kho lưu trữ BLOB thuận tiện cho cơ sở dữ liệu đó.

Nếu bạn thực sự cần phải làm điều này, một cách giải quyết sẽ là viết một tập lệnh drag'n'drop .bat hoặc somesuch có bash.exe -c "mv% 1 / home / $ USER /". (Bạn sẽ phải thực hiện một số công việc thông minh với sed và tr, có lẽ, để dịch% 1 sang đường dẫn WSL hợp lệ.)

Ngoài ra - bạn có thể đặt các tệp của mình vào một thư mục Windows và, trong WSL, hãy thực hiện "cd ~; ln -s / mnt / c / path / to / my / files" để làm cho chúng xuất hiện trong homedir WSL của bạn?


Có thể gắn ổ cứng Windows trong môi trường Linux không? Theo cách đó, nó sẽ hiển thị tất cả các tệp trong thời gian thực ... (hoặc thậm chí chỉ thư mục của nhà Cygwin)
Hastur

3
Ý tưởng tuyệt vời, nhưng tiếc là các tập tin không thể nhìn thấy. Cách xung quanh nó là Sao chép các tệp từ Thư mục Windows sang Thư mục Hệ thống phụ Linux qua Bash.exe Thực hiện theo cách này cần cp -r --no-preserve=all bỏ các quyền trước đó. Tuy nhiên, nếu bạn muốn thực hiện bất kỳ thay đổi lớn nào, bạn không thể sử dụng ứng dụng windows để chỉnh sửa tệp trong LinuxSubSystem, Bạn phải chỉnh sửa nó, trong Thư mục windows của bạn và sau đó sao chép nó. Bây giờ tôi đã biết điều này, nó hoàn toàn khả thi, NHƯNG tôi có ấn tượng rằng Hệ thống phụ Linux được tích hợp / tích hợp vào các cửa sổ nhiều hơn so với một HĐH biệt lập
Dave Hamilton

Bạn có thể theo kịp tiến trình của vấn đề này (xử lý các tệp giữa Windows và WLS) tại github.com/Microsoft/BashOnWindows/issues/1051
Gaia

Nếu bạn cài đặt một bản phân phối từ Windows Store, hệ thống tệp sẽ ở %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp

Câu trả lời:


101

Tôi không chắc liệu tôi có hiểu nhầm câu hỏi của bạn không, nhưng bash Ubuntu của bạn (cửa sổ trên cùng bên phải) sẽ có quyền truy cập vào các đĩa dựa trên Windows của bạn /mnt. Ví dụ: trên máy của tôi /mnt/c/Users/Scott/Desktoplà máy tính để bàn Windows của tôi và tôi có thể đọc / ghi tệp từ vi cho ex. Tôi không tin điều ngược lại là đúng. Đó là, tôi không nghĩ bạn có thể khám phá thế giới bash của mình từ Windows explorer.

Những gì tôi đã làm với tư cách là một nhà phát triển là lưu trữ các dự án trên d của tôi: và trỏ các công cụ dựa trên linux vào /mnt/d/projects/someproject/thư mục đó .

Đảm bảo rằng bạn cập nhật các bản dựng Windows của mình theo định kỳ vì chúng dường như đang khắc phục rất nhiều vấn đề với mỗi bản dựng, đặc biệt là xung quanh các liên kết sym và vượt qua ranh giới FS giữa Linux / Windows.


1
Bạn nói đúng, tôi nghĩ tôi đã nhảy súng một chút. Trong khi Bash có thể truy cập các tệp windows, Windows không thể sao chép các tệp vào thư mục Linux Sub System. . Chính điều này đã khiến tôi bắt đầu con đường đau đầu. Tôi đã cấu hình Bashrc của tôi bây giờ để có một thư mục bắt đầu của môi trường Linux trước đây của tôi bây giờ và làm việc từ đó. Cảm ơn bạn đã phản hồi của bạn.
Dave Hamilton

Đợi đã, làm thế nào để bạn có được / mnt / d để hiển thị? chẳng hạn, khi tôi kết nối điện thoại qua MTP, nó sẽ hiển thị dưới một đường dẫn như "This PC \ PhoneName" nhưng không có ký tự ổ đĩa được liên kết với nó.
Michael

Symlink hoạt động nếu bạn không có dấu gạch chéo. Ngoài ra, bạn cần phải có các tệp ở phía Windows của hệ thống tệp để thực hiện những việc như chạy các dự án Django cục bộ và truy cập chúng trong trình duyệt
Zags

nhưng các tập tin linux không cập nhật khi tôi sửa đổi các tập tin windows?!?!
PrimitiveNom

20

@ scottt732 trả lời đẹp.

Chỉ là một mẹo dành cho các nhà phát triển sẽ làm việc trong Windows và muốn truy cập các tệp đó trong Hệ thống con Linux thực sự nhanh chóng. Bạn có thể sử dụng các liên kết tượng trưng .

Ví dụ: Nếu bạn đang làm việc trên một dự án d:/projects/web-project, bạn có thể tạo một liên kết tượng trưng tại vị trí /var/www/web-projectvà tất cả các tệp bạn thay đổi trong cửa sổ sẽ có sẵn để được truy cập trong Linux Bash.

Đối với điều này, bạn sẽ sử dụng lnlệnh như thế này

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

Trong dòng trên /mnt/dcó nghĩa là ổ đĩa d của bạn trên windows. Thiết lập máy chủ ảo Apache của bạn theo đường dẫn này và bạn đã sẵn sàng để đi.


nó không thực sự đồng bộ hóa ... trừ khi tôi phải khởi động lại máy chủ mỗi lần?
PrimitiveNom

@Anthony liên kết tượng trưng của nó, vì vậy bạn không cần phải khởi động lại máy chủ cho việc này. Trên thực tế đây không phải là đồng bộ hóa, nó chỉ trỏ đến thư mục / đường dẫn đó.
Riz

1
Tôi đã tìm ra vấn đề. Đó là bởi vì tệp CSS có một dấu gạch ngang trong tên như, ví dụ , css-file.css. Tôi đã đăng về vấn đề này ở đây .
PrimitiveNom

9

Chúng tôi khuyên bạn không nên sao chép / tạo / cập nhật các tệp Linux bằng ứng dụng Windows .

Thay vào đó, lưu trữ các tệp trong hệ thống tệp Windows (ví dụ c:\dev\project) mà bạn muốn chỉnh sửa tệp bằng các công cụ Windows và / hoặc xây dựng / kiểm tra / chạy bằng các công cụ / runtimes / nền tảng Linux (ví dụ: thông qua /mnt/c/dev/project).

Trong kịch bản cụ thể của bạn, nếu bạn muốn sao chép các tệp Cygwin của mình vào Bash, sau đó mở Bash và sao chép các tệp từ thư mục Cygwin của bạn trên C: vào ~/, như thế này cp /mnt/c/Users/dave/Documents/Cygwin/* ~/:)

HTH.


1

Tôi có nhu cầu làm việc với PyCharm / nhật thực trên Windows 10 trong khi chạy / kiểm tra tôi cần một môi trường Linux;

Tôi gặp vấn đề khi kiểm tra từ git vào Hệ thống phụ Linux và chỉnh sửa bằng các tệp PyCharm không được nhìn thấy ngay lập tức và có vấn đề;

devcode=/DevCode

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

Tôi đã có ở trên trong .bashrc của tôi trong khu vực Ubuntu. Nó hoạt động trơn tru. Tôi có thể chỉnh sửa Windows và chạy / kiểm tra trong Ubuntu mà không gặp vấn đề gì.


0

Tôi có một nhu cầu tương tự để sao chép các tệp giữa WSL và win10. Tôi đã kết thúc việc kích hoạt sshd trên bản cài đặt Ubuntu để tôi có thể ssh vào Linux từ win10. Sau đó, tôi sử dụng wincp để sao chép các tập tin qua lại. Không tối ưu, nhưng tôi không sao chép tập tin rất thường xuyên. Tôi đã cố gắng tìm bài đăng tôi đã sử dụng để kích hoạt sshd nhưng không thể xác định vị trí của nó.

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.