Thư mục chính trên Windows subsystem cho Linux là gì?


86

Khi tôi khởi động bashtrên Windows subsystem cho Linux, nó sẽ thả tôi vào thư mục

/mnt/c/Users/<username>

Khi tôi lsthư mục này, tôi thấy các thư mục Desktop, Documentsvv mà tôi có thể thấy là trong C:\Users\<username>sử dụng File Windows Explorer. Vì đây là nơi bashchương trình bắt đầu, tôi dự kiến ​​đây là thư mục nhà của tôi, nhưng khi tôi gõ cdhoặc cd ~tôi được đưa đến

/home/<username>

có chứa tệp của tôi .bashrc, .profilev.v. mà tôi mong muốn tìm thấy trong thư mục nhà của mình trong hộp Linux. Hơn nữa, nhập cd ../..từ đây tôi có thể thấy các thư mục bin, etcv.v., một lần nữa như mong đợi trên một hộp Linux.

Tôi có hai câu hỏi liên quan đến tất cả điều này:

  1. Chính xác những gì được /mnt/c/Users/<username>so sánh với C:\Users\<username>? Có vẻ như họ là một trong cùng --- vậy thì /mnt/c/sao?
  2. Làm cách nào tôi có thể xem các tệp /home/<username>bằng cách sử dụng Windows File Explorer? Không phải là tôi thực sự muốn --- Tôi chỉ đang cố gắng cảm nhận về cách Windows tổ chức Hệ thống con này cho Linux.

Câu trả lời:


102

Dành cho 2: Đường dẫn hiện tại có liên quan đến phân phối mà bạn đã cài đặt từ Microsoft Store chứ không phải là một đường dẫn toàn cầu. Vì vậy, đối với Ubuntu, nó được đặt tại:

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

Tôi giả sử các bản phân phối khác sẽ ở một vị trí tương tự trong các thư mục tương ứng của chúng trong:

%LOCALAPPDATA%\Packages\

11
Bất cứ ai khác tìm thấy thực hành này đáng lo ngại? Không phải thư mục HOME của tôi phải là nơi an toàn cho dữ liệu CỦA TÔI trong repo sao? Với cách tiếp cận này, một repo bị hỏng và cài đặt lại làm hỏng DỮ LIỆU CỦA TÔI mà KHÔNG cố gắng bảo vệ nó VÀ nó bị ẩn khi tôi đã có THỰC SỰ / nhà. Tại sao dữ liệu không tồn tại ở đó? Đây là tất cả nguy hiểm hơn bởi vì chúng tôi hiện đang được khuyến khích thử / sử dụng / trao đổi các bản phân phối (WLinux). Thực sự cảm thấy như ai đó đã không nghĩ toàn bộ điều này thông qua.
rainabba

Trong trường hợp của tôi (1809), thư mục được gọi là CanonicalgroupLrict.Ubfox18.04onWindows_79rhkp1fndgsc
jao

2
Lưu ý quan trọng: Bạn vẫn không nên chọc các tệp Linux bằng các công cụ Windows. Xem: blog.msdn.microsoft.com/commandline/2016/11/17/ trên (cũng xem chính bài đăng trên blog)
coltoneakins

tuyệt diệu. một lý do khác git cho windows / mingw vẫn hoạt động tốt hơn ... nhiều suy nghĩ hơn đặt vào khối lượng công việc thực tế hàng ngày. Có cách nào để ánh xạ lại đúng cách?
enorl76

1
@rainabba Lúc đầu, tôi đồng ý nhưng sau một số suy nghĩ, tôi vẫn chọn sử dụng Windows thay vì Ubuntu hoàn toàn. Như vậy, tôi đang coi WSL như một cách để truy cập các công cụ Linux nhưng vẫn coi hệ thống tệp windows của mình là công dân hạng nhất. Vì vậy, /mnt/c/là nơi tôi lưu trữ tất cả mọi thứ trong WSL. Tôi sẽ thích nó nếu WSL được đảo ngược thành LWS; có nghĩa là sẽ thật tuyệt vời nếu tất cả chúng ta đều chạy Ubuntu với Linux subsystems cho Windows để chạy một bản sao Windows 10 hoàn chỉnh được tích hợp vào Ubuntu. Tôi biết, điều đó sẽ khó hơn rất nhiều nhưng người ta có thể mơ.
Chev

29
  1. /mnt/clà chính xác như C:\. Đó chỉ là cú pháp để nhận nó từ WSL.
  2. Nhìn vào C:\Users\<username>\AppData\Local\Lxss\rootfs.

8
Cảnh báo: blog.msdn.microsoft.com/commandline/2016/11/17/17 đó là nơi có nhưng không thay đổi bất cứ điều gì.
chx

6
Kể từ năm 2018, câu trả lời này không còn giá trị nữa. Xem câu trả lời của @ MichaelBond.
dr01

11
Bây giờ nó đã chuyển sang C:\Users\[USERNAME]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_[CODE]\LocalState\rootfs\ Bạn có thể nhận ra mức độ tệ như thế nào nếu bạn chỉnh sửa /thủ công
mementototem

để dễ dàng truy cập thông qua copy-pasta, `% LOCALAPPDATA% \ Gói \ CanonicalgroupLrict.UbfoxonWindows_ [CODE] \ LocalState \ rootfs`
twig

Lưu ý rằng thư mục lxss sẽ bị ẩn trong File Explorer trừ khi bạn bỏ chọn "Tùy chọn thư mục> Xem: Cài đặt nâng cao: Ẩn các tệp hệ điều hành được bảo vệ (Được khuyến nghị)". Nhưng ngay cả khi nó bị ẩn, bạn vẫn có thể mở thư mục trong File Explorer nếu bạn nhập nó vào đường dẫn thư mục.
Daryn

17

Giới thiệu về hệ thống tập tin được gắn trên /mnt/c

  1. Chính xác là / mnt / c / Users / so với C: \ Users \? Có vẻ như chúng là một trong cùng --- vậy / mnt / c / là gì?

Trái ngược với Windows, Linux (và các hệ thống khác dựa trên Unix) sử dụng một cấu trúc thư mục duy nhất độc lập với số lượng đĩa bạn có. Nếu bạn có nhiều đĩa, tất cả các đĩa này phải được tôi gắn vào cấu trúc thư mục tại một số điểm.

  • Thông thường, tất cả các đĩa (khác với ổ đĩa được sử dụng để khởi động hệ thống) được gắn vào một thư mục có tên /mnthoặc/media

WSL có một loại hệ thống tập tin đặc biệt có tên DrvFS cho phép bạn truy cập vào các đĩa được sử dụng trong windows. Bạn có thể sử dụng DrvFS để gắn kết, không chỉ hệ thống tập tin windows của bạn, mà cả các đĩa mạng và các loại phương tiện khác.

  • Trong WSL, theo mặc định, C:đĩa trong windows được gắn bên dưới/mnt/c
  • Nếu bạn có một đĩa khác, ví dụ như một D:đĩa trong windows, nó sẽ được gắn vào bên dưới/mnt/d

Các tập tin bạn có thể thấy /mnt/cgiống như bạn có C:. Nếu bạn sửa đổi một số tệp, bạn cũng sẽ nhận được các thay đổi trong cửa sổ.

Bạn có thể sử dụng mountlệnh để truy cập các loại phương tiện khác (ví dụ: ổ đĩa di động hoặc chia sẻ mạng).


Về vị trí của /home/<username>

  1. Làm cách nào tôi có thể xem các tệp trong / home / bằng Windows File Explorer? Không phải là tôi thực sự muốn --- Tôi chỉ đang cố gắng cảm nhận về cách Windows tổ chức Hệ thống con này cho Linux.

Trong WSL, tất cả các hệ thống tập tin linux được đặt trong một thư mục Windows. Vị trí của thư mục phụ thuộc vào phiên bản Windows và bản phân phối WSL mà bạn đang sử dụng.

  • Các phiên bản ban đầu của WSL lưu trữ hệ thống tệp linux trong%LOCALAPPDATA%\Lxss\rootfs
  • Các bản phân phối WSL được cài đặt từ Windows Store , bắt đầu trong Windows Build 16215 (giữa năm 2017), sử dụng một thư mục như thế nào %LOCALAPPDATA%\Packages\...\LocalState\rootfs. Tên của gói thay đổi tùy theo bản phân phối (ví dụ: nó khác với Ubuntu so với Debian)
  • Các bản phân phối Linux được cài đặt bằng các công cụ khác , chẳng hạn như lxRun Offerline hoặc WSL-DistroLauncher có thể lưu trữ hệ thống tệp linux vào bất kỳ vị trí nào.

Bạn có thể kiểm tra nhiều tùy chọn để biết vị trí của thư mục WSL . Ví dụ, tôi nghĩ tùy chọn dễ nhất là sử dụng lxRun Offerline để biết thư mục cài đặt.

## You can use lxrunoffline to check which WSL distributions have installed
## using:   lxrunoffline list

C:\> lxrunoffline list
backup
Ubuntu-18.04    

## And you can use it to get the location of any of these WSL installations
## using:   lxrunoffline get-dir -n <name of distribution>

C:\> lxrunoffline get-dir -n backup
c:\wsl\installed\backup

C:\> lxrunoffline get-dir -n Ubuntu
C:\Users\Jaime\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

Một khi bạn biết vị trí của thư mục cài đặt, thì ở /home/<username>dưới <installation folder>\rootfs\home\username.

  • Ví dụ, nếu thư mục cài đặt của bạn là c:\wsl\ubuntu
  • những /home/<username>là trongc:\wsl\ubuntu\rootfs\home\username

LƯU Ý: Cả Linux và Windows cho phép các cửa hàng tập tin theo nhiều cách khác nhau. Ngày nay, WSL DrvFS lưu trữ các quyền của Linux dưới dạng Luồng (siêu dữ liệu) được đính kèm vào các tệp bạn có thể thấy trong Windows. Microsoft không khuyến nghị sửa đổi các tệp linux bằng các chương trình Windows. Có thể một số ứng dụng Windows làm hỏng quyền linux mà không cần thông báo.


5

Tôi cho rằng nó có thể phụ thuộc vào việc bạn đang xây dựng cửa sổ nào, nhưng đối với tôi vào năm 2018 trên Windows 10 Pro 64-bit, Phiên bản 1709 (OS Build 16299.522) và cả Phiên bản 1803 (OS Build 17134.165) [một bản cập nhật Windows xảy ra trớ trêu đã gõ này] vị trí vẫn còn:

C:\Users\<username>\AppData\Local\lxss

Mẹo nhỏ là khi bạn ở C:\Users\<username>\AppData\Localbạn sẽ không thấy một lxssthư mục (trừ khi bạn đã bỏ chọn "Ẩn các tệp hệ điều hành được bảo vệ (Được khuyến nghị)" trong các tùy chọn thư mục của bạn).

Tuy nhiên chỉ cần thêm \lxssvào thanh địa chỉ windows explorer và nó sẽ đưa bạn đến thư mục.

(Lưu ý rằng tôi không%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgschoặc bất cứ điều gì tương tự đã được đề cập trong câu trả lời của Michael Bonds)

Cập nhật

Hóa ra có WSL kế thừa, đó là những gì tôi đã cài đặt. Bây giờ WSL được cung cấp thông qua một ứng dụng cửa hàng Microsoft. Có các phiên bản cho Ubuntu 18.04 LTS và bây giờ cũng có một vài hương vị khác của Linux (ví dụ Debian). Nếu bạn muốn cập nhật, bạn có thể muốn gỡ cài đặt WSL cũ và cài đặt phiên bản cửa hàng Microsoft .

Thư mục nhà của bạn sẽ phụ thuộc vào loại WSL nào bạn đã cài đặt.


4
  1. Sử dụng bảng điều khiển bash WSL, trong thư mục chính của bạn, tạo một tệp có tên cụ thể tùy ý, chẳng hạn như "test_here.txt".
  2. Sau đó, sử dụng Windows Explorer, sử dụng hộp tìm kiếm, tìm kiếm tệp test_here.txt.
  3. Trên tệp tìm thấy> bấm chuột phải> Mở vị trí tệp.

Tôi đã thử điều này. Nó không hoạt động. Tôi không thấy tập tin tìm kiếm. Tuy nhiên, nếu tôi thả tệp vào / mnt / c / Users / <tên người dùng> thì rõ ràng nó hoạt động.
Eamonn Kenny

Tôi sợ tôi đã thử WSL nhưng tôi không sử dụng nó nữa. Tôi không thấy nó hữu ích lắm. (Tôi sử dụng cygwin hàng ngày, thay vì WSL và tôi thấy nó rất hữu ích.) Vì vậy, tôi không thể xác minh nó nữa, xin lỗi;)
Ellis

Tìm kiếm các rootfs hoạt động. sau đó bạn có thể điều hướng hệ thống tập tin unbfox từ đó.
TIGR

2

Bốn bước cho windows 10 pro để ghim Debian / Ubuntu / OpenSUSE $ HOME của bạn vào menu bắt đầu của Windows:

  1. Từ menu bắt đầu bắt đầu File Explorer
  2. Trong thanh địa chỉ (không phải thanh tìm kiếm), nhập% LOCALAPPDATA%.
  3. Trong thanh tìm kiếm, hãy tìm tên thư mục $ HOME của bạn, trong trường hợp của tôi là ekenny. Sẽ có khoảng 3 phiên bản này nhưng bạn muốn phiên bản có đường dẫn thực sự dài.
  4. Nhấp chuột phải vào thư mục nhà của bạn và nhấp vào "Ghim để bắt đầu".

Bây giờ bạn có thư mục nhà của bạn được ghim vào menu bắt đầu của bạn. Tôi đã thử tạo một lối tắt nhưng nó không đi đến đâu dễ hiểu.


0

Tôi chỉ cần tìm /etc/environmentbằng cách sử dụng Ubuntu 16.04 tìm kiếm vào bộ lưu trữ NTFS của Windows 10. Tôi tìm thấy nó ở đây:

C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\etc\environment
  • Tôi đã thay đổi /mnt/c/thành C:\danh pháp Windows.
  • Tôi cũng đã thay đổi tất cả các lần xuất hiện của /để \cho cùng một lý do.
  • Bạn cần thay thế USER_NAMEbằng Tên người dùng Windows của bạn.
  • Tôi đã phải sử dụng sudo -H Nautilusđể có quyền xem Tập tin người dùng được lưu trong WSL.
  • KHÔNG BAO GIỜ cập nhật các tệp Linux của bạn trong WSL bằng ứng dụng Windows. Nó sẽ làm hỏng dữ liệu Linux của bạn .

Từ phía Linux (Ubuntu 16.04), danh pháp sẽ là:

$ sudo cat /mnt/c/Users/USER_NAME/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc/LocalState/rootfs/etc/environment

PATH="/mnt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export LIBGL_ALWAYS_INDIRECT=Yes
export DISPLAY=localhost:0.0

0

Với Windows 10 Insider hiện tại (Vòng nhanh: Windows 10 build 19025.1), bạn có thể gắn distro của mình dưới dạng ổ đĩa mạng. WSL có thể truy cập dưới dạng wls$, đường dẫn là tên phân phối của bạn ( wsl -l -q).

Ví dụ net use Z: \\wsl$\Debian /PERSISTENT:YES


Bạn có chắc chắn điều này bị giới hạn ở WSL2 không? Tôi nghĩ đến năm 1903 bạn có thể khám phá nội dung của cấu trúc tệp WSL từ bên trong Windows. Tạo một vị trí mạng bản đồ sẽ có thể với sự thay đổi đó.
Ramhound

Như tôi đã viết, tôi không chắc chắn về WSL2. Có hai điểm: giới thiệu WSL2 (từ bản dựng 18432) và phân phối được hỗ trợ bởi WSL 2. Tính năng này xuất hiện cùng với WSL2 và tôi hy vọng nó hoạt động với bất kỳ phân phối nào.
ngựa

1909 (WSL2) là 18363.476, không phải 18432 (Bản xem trước nội bộ 20H1) trừ khi bạn đang nói, đây chỉ là bản dựng 20H1?
Ramhound

-1

Trong Bash, để xem thư mục hiện tại trong Windows File Explorer, chỉ cần nhập:

explorer .

Đừng bỏ qua "." Điều này sẽ mở windows explorer tại thư mục hiện tại và bạn có thể thấy mọi thứ liên quan đến phần còn lại của hệ thống windows của bạn.


Cảm ơn sự đóng góp nhưng nó chỉ hoạt động trong Bash, không phải trong WSL (Hệ thống con WIndows cho Linux), đây là câu hỏi này. Tôi sẽ khuyên bạn xóa câu trả lời của bạn hoặc nó có thể bị hạ cấp.
rmcsharry

Điều này không hoạt động trong WSL
Nicolai Anton Lynnerup
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.