
Итак, я сейчас нахожусь в процессе настройки и установки WSL на моей рабочей станции Windows 10, чтобы я мог использовать некоторые очень полезные инструменты командной строки в Windows. Теперь и в WSL, и в Git-Bash у вас есть доступ ко всем дискам и разделам и всем файлам на ПК (к которым имеет доступ ваш пользователь), но пути разные. Допустим, у меня есть каталог, temp
расположенный по адресу с несколькими файлами в нем
tree C:\Temp
C:\TEMP
├───tempfile1.txt
├───tempfile2.txt
└───tempfile3.txt
Затем, когда я открываю Git-Bash (используяэтотSO Q&A) в C:\Temp
каталоге выполните pwd
команду Я вижу путь как
/c/Temp
но как ни странно, когда я запускаю ls
команду /
в Git-Bash, я не вижу ни c
каталога, ни mnt
каталога.
Теперь перейдем к WSL. Когда я делаю это Open Linux Shell here
через контекстное меню правой кнопки мыши в проводнике Windows и запускаю, pwd
он показывает путь как
/mnt/c/Temp
Итак, мой вопрос: Что такое каталог '/' в Windows и где он находится? И это просто 2 разных способа "имитации" корневого каталога?
Редактировать:
Версия Windows: Windows 10 Enterprise Edition версии 1903 (сборка 18362.267)
Версия WSL: 1809 (сборка 17763) (последний выпуск на момент написания статьи)
решение1
Ваш Git-Bash — это типичная программа Windows, и функционирует как таковая. Он видит C:\
в качестве своего корневого каталога.
Однако ваш WSL отличается. Я не уверен, контейнер это или VM, но в любом случае это определенно не типичная программа Windows.
Он все еще работает на Windows, но все, что вы запускаете в WSL, по сути, видит себя работающим на Linux, а не на Windows. Это заставляет его следовать стандартам Linux, таким как структура каталогов Linux.
Это означает, что у него есть свой собственный корневой каталог, который вместо C:\
. /
Расположение этого каталога находится где-то в вашем AppData и зависит от версии WSL и от того, используете ли вы Ubuntu, OpenSUSE или что-то еще.
В Linux дискам не присваиваются буквы. Им присваиваются точки монтирования. Например, корень /
— это точка монтирования вашего корневого раздела или папки в случае WSL. Не все, что находится ниже, /
— это один и тот же диск. Например, на моем ноутбуке /home/
это отдельный раздел.
/mnt/
это каталог монтирования в файловой структуре Linux. Он предназначен для внешних вещей.
/mnt/c/
это ваш C:\
. Он должен быть таким, потому что Linux не присваивает букв дискам. Это правильный и самый элегантный способ доступа к файлам Windows из WSL. Вот почему bash в WSL имеет другое расположение для вашего C:\
.
Если у вас самый распространенный дистрибутив WSL (Ubuntu), то вы /
должны быть здесь:
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
Если его там нет или вы используете другой дистрибутив, посмотрите здесь:
%LOCALAPPDATA%\Packages\
Но будьте осторожны, Linux обрабатывает разрешения файлов совсем не так, как Windows. Не делайте здесь ничего с помощью инструментов Windows, таких как File Explorer. Если вам нужно взаимодействовать между ОС, делайте это из WSL.
решение2
просто используйте эту команду в вашем bash
cd //wsl.localhost/dir
Я использую эту команду ниже, чтобы войти в htdocs в моем lampp
cd //wsl.localhost/Ubuntu/opt/lampp/htdocs/
решение3
Папка / для WSL находится в
C:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation
, а также ее можно найти как сетевой ресурс в
\\wsl$\Ubuntu-18.04
или аналогичном месте в зависимости от того, какой дистрибутив Linux вы установили для WSL.
Для git bash он находится по адресуC:\Program Files\Git
Вы всегда можете узнать реальное местоположение любой папки, перейдя в нее с помощью explorer.exe .
git bash, и wsl преобразует .
путь для вас и передаст его приложениям Windows, которые вы запускаете.
При этом не следует открывать файлы этих эмулированных /
папок через приложения Windows, поскольку они могут иметь проблемы с их корректным чтением, особенно с приложениями WSL.
Эти программы эмулируют файловую систему Unix для вас, не создавая виртуальную машину с раздельными выделениями процессора и памяти. Они просто делятся с Windows, как это делает обычное приложение. (за исключением случая WSLv2, который запускает полную виртуальную машину с использованием Windows 10 Pro Hyper-V)
Расположение /c
или /mnt/c
представляет собой сетевое монтирование, очень похожее на подключение сетевого диска в Windows, скажем, Z:
и представление его как локального диска.
GIT bash и WSL монтируют ваши корневые диски Windows, как будто это сетевые ресурсы. В Linux вы монтируете диск в, /folder
потому что нет такого понятия, как буква диска.
Если хотите, вы можете указать WSL монтировать диски так же, как это делает git bash.
В wsl введите редактирование /etc/wsl.conf
файла
И добавьте следующее:
[automount]
root = /
Сохраните файл, выйдите из Windows и войдите снова.
Теперь при запуске WSL будут те же пути, что и у git bash для ваших локальных жестких дисков.
Кроме того, имейте в виду, что они эмулируют файловую систему, используемую операционными системами Linux, но делают это не идеально и не таким же образом.
Например, файловые системы Unix имеют разрешения на файлы, git bash автоматически определит, что "ДОЛЖНО БЫТЬ" и исполняемый файл, и добавит атрибут +x. WSL не очень хорошо справляется с этим, обычно просто делает все исполняемым.