Настройка учета регистра

Чувствительность к регистру определяет, обрабатываются ли прописные (FOO.txt) и строчные буквы (foo.txt) как уникальные (с учетом регистра) или эквивалентные (без учета регистра) в имени файла или каталога.

  • Учитывает регистр: FOO.txt ≠ foo.txt ≠ Foo.txt
  • Без учета регистра: FOO.txt = foo.txt = Foo.txt = Foo.txt

Различия между конфиденциальности регистра Windows и Linux

При работе с файлами и каталогами 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, флаг конфиденциальности регистра для каждого каталога не наследуется; каталоги, созданные в каталоге с учетом регистра, не автоматически учитывает регистр. Необходимо явно пометить каждый каталог как конфиденциальный регистр

Параметры конфиденциальности регистра для подключения диска в файле конфигурации WSL

Конфиденциальность регистра может управляться при подключении диска к подсистема Windows для Linux с помощью файла конфигурации WSL. Каждый установленный дистрибутив Linux может иметь собственный файл конфигурации WSL, называемый /etc/wsl.conf. Дополнительные сведения о подключении диска см. в статье "Начало подключения диска Linux" в WSL 2.

Чтобы настроить параметр конфиденциальности регистра в wsl.conf файле при подключении диска:

  1. Откройте дистрибутив Linux, который вы будете использовать (т. е. Ubuntu).
  2. Измените каталоги до тех пор, пока не увидите папку etc (для этого может потребоваться переход cd .. из home каталога).
  3. Выведите список файлов в etc каталоге, чтобы узнать, существует ли wsl.conf файл (используйте ls команду или explorer.exe . просмотрите каталог с помощью Windows проводник).
  4. wsl.conf Если файл еще не существует, его можно создать с помощью: sudo touch wsl.conf или запустив sudo nano /etc/wsl.confфайл при сохранении из редактора Nano.
  5. Для добавления в 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.

Изменение конфиденциальности регистра на диске, подключенном к дистрибутиву WSL

Диски с форматированием 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, вам может потребоваться изменить 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 .). Щелкните правой кнопкой мыши каталог и выберите "Свойства", чтобы открыть документ окно свойств, а затем выберите "Изменить", чтобы просмотреть или изменить разрешения для каталога.

Properties windows to view or change permissions on NTFS directories

Ошибка: для этой операции требуется локальный том NTFS.

Атрибут конфиденциальности регистра можно задать только в каталогах в файловой системе с форматированием NTFS. Каталоги в файловой системе WSL (Linux) по умолчанию чувствительны к регистру (и не могут быть нечувствительными к регистру с помощью средства fsutil.exe).

Дополнительные ресурсы