36

Когда я запускаю bash в Windows Subsystem для Linux, он бросает меня в каталог

/mnt/c/Users/<username>

Когда я этот каталог ls я вижу директорию Desktop Documents и т.д. , которые я могу видеть в C:\Users\<username> , используя Проводник Windows. Так как именно здесь запускается программа bash , я ожидал, что это мой домашний каталог, но когда я набираю cd или cd ~ меня переводят в

/home/<username>

который содержит мой файл .bashrc , .profile и т. д., который я ожидаю найти в моем домашнем каталоге в коробке Linux. Более того, ввод cd ../.. отсюда я вижу каталоги bin и etc и т. д., как и ожидалось, на коробке с Linux.

У меня есть два вопроса относительно всего этого:

  1. Что именно /mnt/c/Users/<username> сравнивает с C:\Users\<username>? Кажется, что они один и тот же --- так что же такое /mnt/c/?
  2. Как я могу просмотреть файлы в /home/<username> с помощью проводника Windows? Не то, чтобы я действительно этого хотел - я просто пытаюсь понять, как Windows организует эту подсистему для Linux.

7 ответов7

49

Для 2: текущий путь теперь связан с тем, какой дистрибутив вы установили из Магазина Microsoft, а не с одним глобальным путем. Итак, для Ubuntu он теперь находится по адресу:

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

Я предполагаю, что другие дистрибутивы будут находиться в аналогичном месте в соответствующих папках:

%LOCALAPPDATA%\Packages\
16
  1. /mnt/c - это то же самое, что и C:\ . Это всего лишь синтаксис для получения от него WSL.
  2. Посмотрите в C:\Users\<username>\AppData\Local\Lxss\rootfs .
11

О файловой системе, смонтированной в /mnt/c

  1. Что такое /mnt / c / Users / по сравнению с C:\Users\? Кажется, что они один и тот же --- так что же такое /mnt / c /?

В отличие от Windows, Linux (и другие системы, основанные на Unix) используют единую структуру папок независимо от количества дисков. Если у вас есть несколько дисков, все эти диски должны быть в какой-то момент монтированы в структуру папок.

  • Как правило, все диски (отличные от используемых для загрузки системы) монтируются в папку с именем /mnt или /media

WSL имеет специальный тип файловой системы с именем DrvFS, который дает вам доступ к дискам, используемым в Windows. Вы можете использовать DrvFS для монтирования не только файловой системы Windows, но также сетевых дисков и других типов носителей.

  • В WSL по умолчанию диск C: в Windows монтируется в /mnt/c
  • Если у вас есть другой диск, например диск D: в Windows, он будет смонтирован в /mnt/d

Файлы, которые вы видите в /mnt/c такие же, как и в C: Если вы измените какой-либо файл, вы получите изменения и в окнах.

Вы можете использовать команду mount для доступа к другим типам носителей (например, съемным дискам или сетевым ресурсам).


О местонахождении /home/<username>

  1. Как я могу просмотреть файлы в /home / с помощью Windows File Explorer? Не то, чтобы я действительно этого хотел - я просто пытаюсь понять, как Windows организует эту подсистему для Linux.

В WSL вся файловая система linux находится в папке Windows. Расположение папки зависит от версии Windows и используемого вами дистрибутива WSL.

  • Начальные версии WSL хранят файловую систему linux в %LOCALAPPDATA%\Lxss\rootfs
  • В дистрибутивах WSL, установленных из Магазина Windows, начиная с Windows Build 16215 (середина 2017 года), используется папка, подобная %LOCALAPPDATA%\Packages\...\LocalState\rootfs . Имя пакета зависит от дистрибутива (например, для Ubuntu оно отличается от Debian)
  • Дистрибутивы Linux, установленные с использованием других инструментов, таких как lxRunOffline или WSL-DistroLauncher, могут хранить файловую систему linux в любом месте.

Вы можете проверить множество параметров, чтобы узнать местоположение папки WSL. Например, я думаю, что самый простой вариант - использовать lxRunOffline, чтобы узнать папку установки.

## 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

Как только вы узнаете местоположение папки установки, /home/<username> находится в <installation folder>\rootfs\home\username .

  • Например, если вашей установочной папкой является c:\wsl\ubuntu
  • /home/<username> находится в c:\wsl\ubuntu\rootfs\home\username

ПРИМЕЧАНИЕ. В Linux и Windows права доступа к файлам хранятся по-разному. В настоящее время WSL DrvFS хранит разрешения Linux в виде потоков (метаданных), прикрепленных к файлам, которые вы можете видеть в Windows. Microsoft не рекомендует изменять файлы linux с помощью программ Windows. Возможно, что некоторые приложения Windows повреждают разрешения linux, не замечая этого.

4
  1. Используя консоль WSL bash, в своем домашнем каталоге создайте файл с произвольным определенным именем, таким как «test_here.txt».
  2. Затем с помощью проводника Windows с помощью поля поиска найдите файл test_here.txt.
  3. На найденном файле> щелкните правой кнопкой мыши> Открыть местоположение файла.
3

Я полагаю, это может зависеть от того, на каких сборках Windows вы работаете, но для меня в 2018 году в Windows 10 Pro 64-bit, Версии 1709 (OS Build 16299.522), а также Версии 1803 (OS Build 17134.165) [обновление Windows произошло по иронии судьбы, когда я печатал это], местоположение все еще:

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

Хитрость заключается в том, что когда вы находитесь в C:\Users\<username>\AppData\Local вы не увидите папку lxss (если вы не отметили «Скрыть защищенные файлы операционной системы (рекомендуется)» в настройках папки).

Однако просто добавьте \lxss в адресную строку Windows Explorer, и вы попадете в папку.

(Обратите внимание, что у меня не было %LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc или что-нибудь подобное, что было упомянуто в ответе Майкла Бондса)

Обновить

Оказывается, существует устаревший WSL, который я и установил. Теперь WSL предоставляется через приложение магазина Microsoft. Существуют версии для Ubuntu 18.04 LTS, а также несколько других версий Linux (например, Debian). Если вы хотите быть в курсе, вы можете удалить устаревший WSL и установить версию магазина Microsoft.

Место вашей домашней папки будет зависеть от того, какой из этих типов WSL вы установили.

0

Четыре шага для Windows 10 pro, чтобы закрепить ваш Debian/Ubuntu/OpenSUSE $ HOME в меню «Пуск» Windows:

  1. Из меню Пуск запустить File Explorer
  2. В адресной строке (не в строке поиска) введите% LOCALAPPDATA%.
  3. В строке поиска найдите ваше имя каталога $ HOME, в моем случае это было ekenny. Там будет около 3-х версий этого, но вы хотите тот, который действительно длинный путь.
  4. Щелкните правой кнопкой мыши свой домашний каталог и нажмите "Прикрепить к началу".

Теперь у вас есть домашний каталог, прикрепленный к меню «Пуск». Я пытался создать ярлык, но это никуда не денется.

0

В Bash для просмотра текущего каталога в проводнике Windows просто введите:

explorer .

Не оставляйте "." Откроется окно проводника в текущей папке, и вы увидите, где все находится по отношению к остальной части вашей системы Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .