Что такое домашний каталог в подсистеме Windows для Linux?

88

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

/mnt/c/Users/<username>

Когда я lsэтот каталог, я вижу , каталоги Desktop, Documentsи т.д. , которые я могу видеть в C:\Users\<username>использовании файлов Windows Explorer. Так как именно здесь и началась 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.
BCF
источник

Ответы:

104

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

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

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

%LOCALAPPDATA%\Packages\
Майкл Бонд
источник
11
Кто-нибудь еще находит эту практику тревожной? Разве моя папка HOME не должна быть ОДНЫМ безопасным местом для МОИХ данных в репо? При таком подходе сломанный репо и переустановка шлангов МОИ ДАННЫЕ НЕ БУДУТ пытаться защитить вообще, И они скрыты, когда у меня уже есть РЕАЛ / ДОМ. Почему там не хранятся данные? Это тем более опасно, потому что теперь нам предлагается попробовать / использовать / поменять дистрибутивы (WLinux). На самом деле кажется, что кто-то не все продумал.
rainabba
В моем случае (1809) папка называется CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc
Джао
2
Важное примечание: Вы все равно не должны ковыряться в файлах Linux, используя инструменты Windows. См. Blogs.msdn.microsoft.com/commandline/2016/11/17/… (также см. Само сообщение в блоге)
coltoneakins
фантастика. Еще одна причина, по которой git для windows / mingw по-прежнему работает лучше ... гораздо больше внимания уделяется реальной ежедневной рабочей нагрузке. есть ли способ переназначить его правильно?
enorl76
1
@rainabba На первый взгляд, я согласен, но, подумав, я все же предпочитаю использовать Windows, а не полноценную Ubuntu. Поэтому я отношусь к WSL как к средству доступа к инструментам Linux, но все еще отношусь к своей файловой системе Windows как к первоклассному гражданину. Так /mnt/c/вот, где я храню все в WSL. Я был бы рад, если бы WSL был изменен на LWS; Это означает, что было бы замечательно, если бы мы все работали с Ubuntu с подсистемами Linux для Windows, чтобы запустить полную копию Windows 10, интегрированную в Ubuntu. Я знаю, это будет намного сложнее, но можно мечтать.
Chev
29
  1. /mnt/cточно так же, как C:\. Это всего лишь синтаксис для получения от него WSL.
  2. Посмотри C:\Users\<username>\AppData\Local\Lxss\rootfs.
Джозеф Сибл-Восстановить Монику
источник
8
Предупреждение: blogs.msdn.microsoft.com/commandline/2016/11/17/… это место да, но ничего не меняйте.
chx
6
По состоянию на 2018 год этот ответ больше не действителен. Смотрите ответ @ MichaelBond.
dr01
12
Теперь дело C:\Users\[USERNAME]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_[CODE]\LocalState\rootfs\/
дошло
для быстрого доступа через copy-pasta, `% LOCALAPPDATA% \ Packages \ CanonicalGroupLimited.UbuntuonWindows_ [CODE] \ LocalState \ rootfs`
веточка
Обратите внимание, что папка lxss будет скрыта в проводнике, если вы не снимите флажок «Параметры папки> Вид: Расширенные настройки: Скрыть защищенные файлы операционной системы (рекомендуется)». Но даже если он скрыт, вы все равно можете открыть папку в проводнике, если введете ее в путь к папке.
Дарин
18

О файловой системе, смонтированной на /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? Не то, чтобы я действительно этого хотел - я просто пытаюсь понять, как 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, не замечая этого.

Jaime
источник
5

Я полагаю, это может зависеть от того, на каких сборках Windows вы работаете, но для меня в 2018 году в Windows 10 Pro 64-bit, Версия 1709 (сборка ОС 16299.522), а также Версия 1803 (сборка ОС 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 вы установили.

пользователь
источник
4
  1. Используя консоль WSL bash, в своем домашнем каталоге создайте файл с произвольным определенным именем, например «test_here.txt».
  2. Затем с помощью проводника Windows с помощью поля поиска найдите файл test_here.txt.
  3. На найденном файле> щелкните правой кнопкой мыши> Открыть местоположение файла.
Эллис
источник
Я попробовал это. Не работает Я не вижу файл в поиске. Однако если я уроню файл в / mnt / c / Users / <username>, он, очевидно, будет работать.
Имонн Кенни
Боюсь, я попробовал WSL, но больше этим не пользуюсь. Я не нашел это очень полезным. (Я использую cygwin ежедневно вместо WSL, и я нахожу это очень полезным.) Поэтому я не могу больше это проверять, извините;)
Эллис
Поиск rootfs работает. оттуда вы можете перемещаться по файловой системе unbuntu.
Tigr
2

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

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

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

Имонн Кенни
источник
0

Мне просто нужно было найти /etc/environmentиспользование Ubuntu 16.04 в хранилище Windows 10 NTFS. Я нашел это здесь:

C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\etc\environment
  • Я изменил /mnt/c/к C:\для Windows , номенклатуры.
  • Я также изменил все вхождения /в \течение той же самой причине.
  • Вам необходимо заменить USER_NAMEимя пользователя Windows.
  • Мне пришлось использовать, sudo -H Nautilusчтобы получить разрешения для просмотра пользовательских файлов, хранящихся в WSL.
  • НИКОГДА не обновляйте свои файлы Linux в WSL с помощью приложения Windows. Это повредит ваши данные Linux .

Со стороны Linux (Ubuntu 16.04) номенклатура будет:

$ 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
WinEunuuchs2Unix
источник
0

С текущей версией Windows 10 Insider (Fast Ring: Windows 10 build 19025.1) вы можете подключить ваш дистрибутив как сетевой диск. WSL доступен как wls$, путь - это имя вашего дистрибутива ( wsl -l -q).

Например net use Z: \\wsl$\Debian /PERSISTENT:YES

жеребенок
источник
Вы уверены, что это ограничено WSL2? Я думал, что с 1903 года вы можете исследовать содержимое файловой структуры WSL из Windows. С этим изменением было бы возможно создание карты сети.
Ramhound
Как я уже писал, я не уверен насчет WSL2. Есть два момента: введение WSL2 (из сборки 18432) и дистрибутив, поддерживаемый WSL 2. Эта функция появляется вместе с WSL2, и я надеюсь, что она работает с любым дистрибутивом.
жеребенок
1909 (WSL2) - 18363.476, а не 18432 (предварительный просмотр инсайдерской информации 20H1), если вы не говорите, что это только на сборках 20H1?
Ramhound
-1

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

explorer .

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

Гэри Барретт
источник
Спасибо за вклад, но он работает только в Bash, а не в WSL (WIndows Subsystem для Linux), о чем этот вопрос. Я бы посоветовал вам удалить свой ответ, иначе он может быть опущен.
rmcsharry
Это не работает в WSL
Николай Антон Линнеруп