Работа в файловых системах Windows и Linux
При работе с файловыми системами Windows и Linux следует учитывать ряд моментов. В этом пошаговом руководстве рассматриваются некоторые из них, а также приводятся примеры поддержки взаимодействия для смешанного использования команд на основе Windows и Linux.
Хранение файлов и производительность в файловых системах
Мы не рекомендуем работать с разными операционными системами, если на это нет особой причины. Для ускорения производительности сохраняйте файлы в файловой системе WSL, если используете командную строку Linux (Ubuntu, OpenSUSE и т. д.). Если вы работаете в командной строке Windows (PowerShell, командной строке), сохраняйте файлы в файловой системе Windows.
Например, при хранении файлов проекта WSL:
- Используйте корневой каталог файловой системы Linux:
/home/<user name>/Project
- Используйте корневой каталог файловой системы Windows:
/mnt/c/Users/<user name>/Project$
илиC:\Users\<user name>\Project
.
Если вы видите /mnt/
в пути к файлу в командной строке WSL, это означает, что вы работаете с подключенного диска. Поэтому диск C:/ (C:\Users\<user name>\Project
) в файловой системе Windows при подключении в командной строке 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 ->
Двоичные файлы вызываются следующим образом.
- Используется тот же рабочий каталог, что и для текущей командной строки или сеанса PowerShell.
- Файл выполняется от имени пользователя WSL по умолчанию.
- Требуются те же права администратора Windows, что и у вызывающего процесса и терминала.
Команда Linux после wsl
(или wsl.exe
) обрабатывается как любая команда, выполняемая в WSL. Можно выполнять sudo, конвейерную передачу и перенаправление файлов.
Пример использования sudo для обновления дистрибутива Linux по умолчанию:
C:\temp> wsl sudo apt-get update
Имя пользователя дистрибутива Linux по умолчанию будет указано после выполнения этой команды, и вам будет предложено указать пароль. После правильного ввода пароля дистрибутив скачает обновления.
Смешивание команд Linux и Windows
Ниже приведено несколько примеров смешиваний команд Linux и Windows с помощью PowerShell.
Чтобы выполнить команду Linux ls -la
для вывода списка файлов и команду PowerShell findstr
для фильтрации результатов слов, содержащих git, объедините команды:
wsl ls -la | findstr "git"
Чтобы выполнить команду PowerShell dir
для вывода списка файлов и команду Linux grep
для фильтрации результатов слов, содержащих git, объедините команды:
C:\temp> dir | wsl grep git
Чтобы использовать команду Linux ls -la
для вывода списка файлов и команду PowerShell > out.txt
для вывода этого списка в текстовый файл с именем out.txt, объедините команды:
C:\temp> wsl ls -la > out.txt
Команды, передаваемые в wsl.exe
, перенаправляются в процесс WSL без изменения. Пути к файлам должны быть указаны в формате WSL.
Чтобы выполнить команду Linux ls -la
для вывода списка файлов в пути файловой системы Linux /proc/cpuinfo
с помощью 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 так, как если бы они выполнялись непосредственно из командной строки.
Исполняемые файлы Windows, выполняемые в WSL, обрабатываются аналогично собственным исполняемым файлам Linux — конвейерной передаче, перенаправлению и даже фоновому режиму работы.
Чтобы запустить средство Windows ipconfig.exe
, использовать средство Linux grep
для фильтрации результатов IPv4, а также средство Linux cut
для удаления полей столбцов из дистрибутива Linux (например, Ubuntu), введите:
ipconfig.exe | grep IPv4 | cut -d: -f2
Давайте рассмотрим пример сочетания команд Windows и Linux. Откройте дистрибутив Linux (например, Ubuntu) и создайте текстовый файл: touch foo.txt
. Теперь используйте команду Linux ls -la
, чтобы отобразить список файлов прямого доступа и сведения об их создании, а также средство Windows PowerShell findstr.exe
, чтобы отфильтровать результаты и отобразить только файл foo.txt
:
ls -la | findstr.exe foo.txt
Средства Windows должны иметь расширение файла, его регистр символов должен совпадать с регистром в имени файла и эти файлы должны быть исполняемыми. Неисполняемые файлы, в том числе сценарии пакетного выполнения и собственные команды командной строки, такие как dir
, можно выполнять с помощью команды cmd.exe /C
.
Например, отобразите список содержимого каталога C:\ файловой системы Windows, введя:
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 или выполните следующую команду от имени привилегированного пользователя.
echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
Отключение взаимодействия не будет сохраняться между сеансами WSL, оно снова будет включено при запуске нового сеанса.
Windows Subsystem for Linux