Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При работе между файловыми системами Windows и Linux следует учитывать ряд рекомендаций. Мы изложили несколько из них в этом руководстве, включая некоторые примеры поддержки взаимодействия для смешивания команд на основе Windows и Linux.
Хранилище файлов и производительность в разных файловых системах
Мы рекомендуем не работать с файлами между операционными системами, если у вас нет конкретной причины для этого. Для максимальной скорости производительности сохраните файлы в файловой системе WSL, если вы работаете в командной строке Linux (Ubuntu, OpenSUSE и т. д.). Если вы работаете в командной строке Windows (PowerShell, командная строка), сохраните файлы в файловой системе Windows.
Например, при хранении файлов проекта WSL:
- Используйте корневой каталог файловой системы Linux:
/home/<user name>/Project
- Не является корневым каталогом файловой системы Windows:
C:\Users\<UserName>\Project
или/mnt/c/Users/<UserName>/Project$
.
Если вы видите /mnt/
в пути к файлу командной строки WSL, это означает, что вы работаете с подключённого диска. Поэтому файловая система Windows C:/drive (C:\Users\<user name>\Project
) будет выглядеть следующим образом при подключении в командной строке WSL: /mnt/c/Users/<user name>/Project$
Файлы проекта можно хранить на подключенном диске, но скорость производительности улучшится, если вы храните их непосредственно на \\wsl$
диске.
Просмотр текущего каталога в проводнике Windows
Вы можете просмотреть каталог, в котором хранятся файлы, открыв проводник Windows из командной строки, используя следующее:
explorer.exe .
Кроме того, можно использовать команду: powershell.exe /c start .
обязательно добавьте период в конце команды, чтобы открыть текущий каталог.
Чтобы просмотреть все доступные дистрибутивы Linux и их корневые файловые системы в проводнике Windows, в адресной строке введите: \\wsl$
Конфиденциальность имени файла и регистра каталога
Чувствительность к регистру определяет, обрабатываются ли буквы верхнего регистра (FOO.txt) и строчные буквы (foo.txt) как различные (с учетом регистра) или эквивалентные (без учета регистра) в имени файла или каталога. Файловые системы Windows и Linux обрабатывают чувствительность к регистру разными способами: Windows не учитывает регистр, а Linux учитывает. Узнайте больше о том, как настроить чувствительность к регистру, особенно при монтировании дисков с помощью WSL, в статье о настройке чувствительности к регистру.
Взаимодействие между командами Windows и Linux
Средства и команды Windows и Linux можно использовать взаимозаменяемо с WSL.
- Запустите средства Windows (т. е. notepad.exe) из командной строки Linux (т. е. Ubuntu).
- Запустите средства Linux (т. е. grep) из командной строки Windows (т. е. PowerShell).
- Совместное использование переменных среды между Linux и Windows. (Сборка 17063+)
Запуск средств Linux из командной строки Windows
Запустите двоичные файлы Linux из командной строки Windows (CMD) или PowerShell с помощью wsl <command>
(или wsl.exe <command>
).
Рассмотрим пример.
C:\temp> wsl ls -la
<- contents of C:\temp ->
Двоичные файлы, вызываемые таким образом:
- Используйте тот же рабочий каталог, что и текущий запрос CMD или PowerShell.
- Запустите от имени пользователя WSL по умолчанию.
- Имеют те же права администратора Windows, что и процесс вызова и терминал.
Следующая wsl
wsl.exe
команда Linux обрабатывается как любая команда, выполняемая в WSL. Такие операции, как sudo, использование конвейеров и перенаправление файлов, работают.
Пример использования sudo для обновления дистрибутива Linux по умолчанию:
C:\temp> wsl sudo apt-get update
Имя пользователя дистрибутива Linux по умолчанию будет указано после выполнения этой команды, и вам будет предложено указать пароль. После правильного ввода пароля дистрибутив будет загружать обновления.
Сочетание команд Linux и Windows
Ниже приведены несколько примеров смешивания команд Linux и Windows с помощью PowerShell.
Чтобы использовать команду Linux для перечисления файлов и команды ls -la
findstr
PowerShell, чтобы отфильтровать результаты для слов, содержащих "git", объедините команды:
wsl ls -la | findstr "git"
Чтобы использовать команду PowerShell для перечисления файлов и команды dir
grep
Linux для фильтрации результатов для слов, содержащих git, объедините команды:
C:\temp> dir | wsl grep git
Чтобы использовать команду Linux для перечисления файлов и команды ls -la
> out.txt
PowerShell для печати этого списка в текстовый файл с именем "out.txt", объедините команды:
C:\temp> wsl ls -la > out.txt
Команды, передаваемые в wsl.exe
, пересылаются в процесс WSL без изменений. Пути к файлам должны быть указаны в формате WSL.
Чтобы использовать команду ls -la
Linux для перечисления файлов в пути файловой /proc/cpuinfo
системы Linux, с помощью PowerShell:
C:\temp> wsl ls -la /proc/cpuinfo
Чтобы использовать команду Linux ls -la
для перечисления файлов в пути файловой системы Windows C:\Program Files
, используя PowerShell:
C:\temp> wsl ls -la "/mnt/c/Program Files"
Запуск средств Windows из Linux
WSL может запускать средства Windows непосредственно из командной строки WSL с помощью [tool-name].exe
. Например: notepad.exe
.
Приложения выполняются таким образом, имеют следующие свойства:
- Сохраните рабочий каталог в командной строке WSL (для большей части — исключения описаны ниже).
- Имеют те же права доступа, как и процесс WSL.
- Запустите от имени активного пользователя Windows.
- Отображается в диспетчере задач Windows, как если бы он выполнялся непосредственно из запроса CMD.
Исполняемые файлы Windows, выполняемые в WSL, обрабатываются аналогично собственным исполняемым файлам Linux — конвейеризация, перенаправления и даже запуск в фоновом режиме работают так, как и ожидалось.
Чтобы запустить средство ipconfig.exe
Windows, используйте средство grep
Linux, чтобы отфильтровать результаты "IPv4", и используйте средство cut
Linux, чтобы удалить поля столбцов; в дистрибутиве Linux (например, Ubuntu), введите:
ipconfig.exe | grep IPv4 | cut -d: -f2
Давайте рассмотрим пример сочетания команд Windows и Linux. Откройте дистрибутив Linux (т. е. Ubuntu) и создайте текстовый файл: touch foo.txt
Теперь используйте команду ls -la
Linux для перечисления прямых файлов и сведений о создании, а также средства findstr.exe
Windows PowerShell для фильтрации результатов, чтобы отобразить только файл foo.txt
в результатах:
ls -la | findstr.exe foo.txt
Средства Windows должны включать расширение файла, соответствовать регистру файла и быть исполняемым. Не исполняемые файлы, включая пакетные скрипты. Собственные команды CMD, например dir
, могут выполняться с помощью cmd.exe /C
команды.
Например, укажите содержимое каталога файловой системы Windows C:\, введя следующее:
cmd.exe /C dir
Или используйте ping
команду для отправки эхо-запроса на веб-сайт microsoft.com:
ping.exe www.microsoft.com
Параметры передаются в двоичный файл Windows, не измененный. Например, следующая команда откроет C:\temp\foo.txt
в notepad.exe
:
notepad.exe "C:\temp\foo.txt"
Это также будет работать:
notepad.exe C:\\temp\\foo.txt
Совместное использование переменных среды между Windows и WSL с помощью WSLENV
WSL и Windows совместно используют специальную переменную среды, WSLENV
, созданную для объединения дистрибутивов Windows и Linux, работающих в WSL.
Свойства переменной WSLENV
:
- Он общий; он существует как в среде Windows, так и в среде WSL.
- Это список переменных среды для совместного использования между Windows и WSL.
- Он может форматировать переменные среды для работы в Windows и WSL.
- Он может помочь во взаимодействии между WSL и Win32.
Замечание
До сборки 17063 единственной переменной среды Windows, к которой WSL мог получить доступ, была PATH
(поэтому можно было запускать исполняемые файлы Win32 из WSL). Начиная с 17063 года, WSLENV
начинает поддерживаться.
WSLENV является чувствительным к регистру.
Флаги WSLENV
Доступны четыре флага в WSLENV
, которые могут повлиять на преобразование переменной среды.
WSLENV
Флаги:
-
/p
— преобразует путь между путями в формате WSL/Linux и путями Win32. -
/l
— указывает, что переменная среды — это список путей. -
/u
— указывает, что эта переменная среды должна быть включена только при запуске WSL из Win32. -
/w
— указывает, что эта переменная среды должна быть включена только при запуске Win32 из WSL.
Флаги можно объединить по мере необходимости.
Читать подробнее о WSLENV, включая часто задаваемые вопросы и примеры установки значения WSLENV как конкатенации с другими предварительно определёнными переменными среды, каждая из которых имеет суффикс с косой чертой и флагами, указывающими, как должно быть преобразовано значение и передачи переменных с помощью скрипта. В этой статье также приведен пример настройки среды разработки с помощью языка программирования Go, настроенного для совместного использования GOPATH между WSL и Win32.
Отключение взаимодействия
Пользователи могут отключить возможность запуска инструментов Windows для единого сеанса WSL, выполнив следующую команду с правами суперпользователя:
echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop
Чтобы повторно включить двоичные файлы Windows, закройте все сеансы WSL и снова запустите bash.exe или выполните следующую команду от имени root:
echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
Отключение взаимодействия не будет сохраняться между сеансами WSL. Взаимодействие будет включено снова при запуске нового сеанса.
Windows Subsystem for Linux