Настройка учета регистра
Чувствительность к регистру определяет, обрабатываются ли прописные (FOO.txt) и строчные буквы (foo.txt) как уникальные (с учетом регистра) или эквивалентные (без учета регистра) в имени файла или каталога.
- Учитывает регистр: FOO.txt ≠ foo.txt ≠ Foo.txt
- Без учета регистра: FOO.txt = foo.txt = Foo.txt = Foo.txt
При работе с файлами и каталогами Linux и Windows может потребоваться изменить способ обработки конфиденциальности регистра.
Стандартное поведение:
- Файловая система Windows обрабатывает имена файлов и каталогов как нечувствительные к регистру. FOO.txt и foo.txt будут рассматриваться как эквивалентные файлы.
- Файловая система Linux обрабатывает имена файлов и каталогов в качестве регистра. FOO.txt и foo.txt будут рассматриваться как отдельные файлы.
Файловая система Windows поддерживает настройку конфиденциальности регистра с флагами атрибутов для каждого каталога. Хотя стандартное поведение не учитывает регистр, можно назначить флаг атрибута, чтобы сделать регистр каталога конфиденциальным, чтобы он распознал файлы и папки Linux, которые могут отличаться только по регистру.
Это может быть особенно верно при подключении дисков к файловой системе подсистема Windows для Linux (WSL). При работе с файловой системой WSL вы работаете под управлением Linux, поэтому файлы и каталоги обрабатываются как конфиденциальные регистры по умолчанию.
Примечание
В прошлом, если у вас были файлы, имена которых отличаются только по регистру, эти файлы не могут быть доступны Windows, так как приложения Windows обрабатывают файловую систему как нечувствительные к регистру и не могут различать файлы, имена которых отличаются только в случае. Хотя в Windows проводник будут отображаться оба файла, только один откроется независимо от выбранного вами файла.
В следующих шагах объясняется, как изменить каталог в файловой системе Windows, чтобы он учитывает регистр и распознал файлы и папки, которые отличаются только по регистру.
Предупреждение
Некоторые приложения Windows, используя предположение, что файловая система не учитывает регистр, не используйте правильный вариант для ссылки на файлы. Например, это не редкость для приложений для преобразования имен файлов для использования всех верхних или нижних регистров. В каталогах, помеченных как конфиденциальные регистры, это означает, что эти приложения больше не могут получить доступ к файлам. Кроме того, если приложения Windows создают новые каталоги в дереве каталогов, где используются конфиденциальные файлы регистра, эти каталоги не учитывает регистр. Это может затруднить работу с инструментами Windows в случае конфиденциальных каталогов, поэтому при изменении параметров конфиденциальности регистра файловой системы Windows следует соблюдать осторожность.
Чтобы проверка, если каталог учитывает регистр в файловой системе Windows, выполните команду:
fsutil.exe file queryCaseSensitiveInfo <path>
Замените <path>
путь к файлу. Для каталога в файловой системе <path>
Windows (NTFS) будет выглядеть следующим образом: C:\Users\user1\case-test
или если вы уже находитесь в каталоге user1
, можно просто запустить: fsutil.exe file setCaseSensitiveInfo case-test
Поддержка конфиденциальности регистра для каждого каталога началась в Windows 10, сборка 17107. В Windows 10 сборки 17692 поддержка была обновлена, чтобы включить проверку и изменение флага конфиденциальности регистра для каталога из WSL. Конфиденциальность регистра предоставляется с помощью расширенного атрибута с именем system.wsl_case_sensitive
. Значение этого атрибута будет равно 0 для каталогов без учета регистра и 1 для каталогов с учетом регистра.
Для изменения конфиденциальности регистра каталога требуется выполнение повышенных разрешений (запуск от имени Администратор istrator). Для изменения флага конфиденциальности регистра также требуются разрешения "Запись атрибутов", "Создание файлов", "Создание папок" и "Удаление вложенных папок и файлов" в каталоге. Дополнительные сведения об устранении неполадок см. в разделе об устранении неполадок.
Чтобы изменить каталог в файловой системе Windows, чтобы он был учитывает регистр (FOO ≠ foo), запустите PowerShell как Администратор istrator и используйте команду:
fsutil.exe file setCaseSensitiveInfo <path> enable
Чтобы изменить каталог в файловой системе Windows обратно на значение по умолчанию без учета регистра (FOO = foo), запустите PowerShell как Администратор istrator и используйте команду:
fsutil.exe file setCaseSensitiveInfo <path> disable
Каталог должен быть пустым, чтобы изменить атрибут флага конфиденциальности регистра в этом каталоге. Вы не можете отключить флаг конфиденциальности регистра в каталоге, содержащий папки и файлы, имена которых различаются только по регистру.
При создании новых каталогов эти каталоги наследуют чувствительность регистра от родительского каталога.
Предупреждение
Существует исключение этой политики наследования при запуске в режиме WSL 1. Если распределение выполняется в режиме WSL 1, флаг конфиденциальности регистра для каждого каталога не наследуется; каталоги, созданные в каталоге с учетом регистра, не автоматически учитывает регистр. Необходимо явно пометить каждый каталог как конфиденциальный регистр
Конфиденциальность регистра может управляться при подключении диска к подсистема Windows для Linux с помощью файла конфигурации WSL. Каждый установленный дистрибутив Linux может иметь собственный файл конфигурации WSL, называемый /etc/wsl.conf
. Дополнительные сведения о подключении диска см. в статье "Начало подключения диска Linux" в WSL 2.
Чтобы настроить параметр конфиденциальности регистра в wsl.conf
файле при подключении диска:
- Откройте дистрибутив Linux, который вы будете использовать (т. е. Ubuntu).
- Измените каталоги до тех пор, пока не увидите папку
etc
(для этого может потребоваться переходcd ..
изhome
каталога). - Выведите список файлов в
etc
каталоге, чтобы узнать, существует лиwsl.conf
файл (используйтеls
команду илиexplorer.exe .
просмотрите каталог с помощью Windows проводник). wsl.conf
Если файл еще не существует, его можно создать с помощью:sudo touch wsl.conf
или запустивsudo nano /etc/wsl.conf
файл при сохранении из редактора Nano.- Для добавления в
wsl.conf
файл доступны следующие параметры:
Параметр по умолчанию: dir
для включения конфиденциальности регистра для каждого каталога.
[automount]
options = case = dir
Конфиденциальность регистра недоступна (все каталоги на подключенных дисках NTFS будут нечувствительными к регистру): off
[automount]
options = case = off
При обработке всех каталогов на диске NTFS учитывается регистр: force
[automount]
options = case = force
Этот параметр поддерживается только для подключения дисков в дистрибутивах Linux, работающих как WSL 1, и может потребоваться ключ регистрации. Чтобы добавить ключ регистрации, эту команду можно использовать в командной строке с повышенными привилегиями (администратор): reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1
После внесения изменений wsl.conf
в файл необходимо перезапустить WSL, чтобы эти изменения вступили в силу. Вы можете перезапустить WSL с помощью команды: wsl --shutdown
Совет
Чтобы подключить диск (который использует подключаемый модуль файловой системы DrvFs, чтобы сделать диск доступным в /mnt, например /mnt/c, /mnt/d и т. д.) с определенным параметром конфиденциальности регистра для всех дисков, используйте /etc/wsl.conf
, как описано выше. Чтобы задать параметры подключения по умолчанию для одного конкретного диска, используйте /etc/fstab
файл для указания этих параметров.
Дополнительные параметры конфигурации WSL см. в разделе "Настройка параметров запуска для каждого дистрибутива" с помощью wslconf.
Диски с форматированием NTFS, подключенные к дистрибутиву WSL, по умолчанию будут нечувствительными к регистру. Чтобы изменить конфиденциальность регистра для каталога на диске, подключенном к дистрибутиву WSL (т. е. Ubuntu) выполните те же действия, что и описано выше для файловой системы Windows. (Диски EXT4 по умолчанию будут учитывать регистр).
Чтобы включить конфиденциальность регистра в каталоге (FOO ≠ foo), используйте команду:
fsutil.exe file setCaseSensitiveInfo <path> enable
Чтобы отключить конфиденциальность регистра в каталоге и вернуться к нечувствительной по умолчанию регистра (FOO = foo), используйте команду:
fsutil.exe file setCaseSensitiveInfo <path> disable
Примечание
Если вы изменяете флаг конфиденциальности регистра в существующем каталоге для подключенного диска во время работы WSL, убедитесь, что WSL не имеет ссылок на этот каталог или другое изменение не будет эффективным. Это означает, что каталог не должен быть открыт процессами WSL, включая использование каталога (или его потомков) в качестве текущего рабочего каталога.
Система управления версиями Git также имеет параметр конфигурации, который можно использовать для настройки конфиденциальности регистра для файлов, с которыми вы работаете. Если вы используете Git, вам может потребоваться изменить git config core.ignorecase
этот параметр.
Чтобы задать Git для учета регистра (FOO.txt ≠ foo.txt), введите следующее:
git config core.ignorecase false
Чтобы задать значение Git без учета регистра (FOO.txt = foo.txt), введите:
git config core.ignorecase true
Если этот параметр имеет значение false в файловой системе без учета регистра, это может привести к запутанным ошибкам, ложным конфликтам или повторяющимся файлам.
Дополнительные сведения см. в документации по Git Config.
В моем каталоге есть файлы, которые являются смешанными и требуют конфиденциальности регистра, но средства Windows FS не распознают эти файлы.
Чтобы использовать средства файловой системы Windows для работы с каталогом Linux, который содержит файлы смешанного регистра, необходимо создать новый каталог и задать для него регистр, а затем скопировать файлы в этот каталог (с помощью клонирования или untar). Файлы останутся смешанными. (Обратите внимание, что если вы уже пытались переместить файлы в каталог без учета регистра и существовали конфликты, скорее всего, некоторые файлы были перезаписаны и больше не будут доступны.)
Невозможно изменить параметр конфиденциальности регистра в каталоге, который содержит другие файлы или каталоги. Попробуйте создать каталог, изменить параметр, а затем скопировать в него файлы смешанного регистра.
Убедитесь, что у вас есть разрешения "Запись атрибутов", "Создание файлов", "Создание папок" и "Удаление вложенных папок и файлов", необходимых для изменения конфиденциальности регистра. Чтобы проверка этих параметров, откройте каталог в Windows проводник (из командной строки используйте команду: explorer.exe .
). Щелкните правой кнопкой мыши каталог и выберите "Свойства", чтобы открыть документ окно свойств, а затем выберите "Изменить", чтобы просмотреть или изменить разрешения для каталога.
Атрибут конфиденциальности регистра можно задать только в каталогах в файловой системе с форматированием NTFS. Каталоги в файловой системе WSL (Linux) по умолчанию чувствительны к регистру (и не могут быть нечувствительными к регистру с помощью средства fsutil.exe).
Отзыв о Windows Subsystem for Linux
Windows Subsystem for Linux — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: