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

Чувствительность к регистру определяет, обрабатываются ли прописные (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 для каталогов с учетом регистра.

Для изменения конфиденциальности регистра каталога требуется выполнение повышенных разрешений (запуск от имени администратора). Для изменения флага конфиденциальности регистра также требуются разрешения "Запись атрибутов", "Создание файлов", "Создание папок" и "Удаление вложенных папок и файлов" в каталоге. Дополнительные сведения об этом см. в разделе по устранению неполадок.

Чтобы изменить каталог в файловой системе Windows таким образом, чтобы он был учитывает регистр (FOO ≠ foo), запустите PowerShell от имени администратора и используйте команду:

fsutil.exe file setCaseSensitiveInfo <path> enable

Чтобы изменить каталог в файловой системе Windows обратно на значение по умолчанию без учета регистра (FOO = foo), запустите PowerShell от имени администратора и используйте команду:

fsutil.exe file setCaseSensitiveInfo <path> disable

Каталог должен быть пустым, чтобы изменить атрибут флага конфиденциальности регистра в этом каталоге. Нельзя отключить флаг конфиденциальности регистра в каталоге, содержав папки и файлы, имена которых отличаются только по регистру.

Наследование конфиденциальности регистра

При создании новых каталогов эти каталоги наследуют чувствительность регистра от родительского каталога.

Предупреждение

Существует исключение из этой политики наследования при запуске в режиме WSL 1. Если распределение выполняется в режиме WSL 1, флаг конфиденциальности регистра для каждого каталога не наследуется; каталоги, созданные в каталоге с учетом регистра, не автоматически чувствительны к регистру. Необходимо явно пометить каждый каталог как чувствительный к регистру.

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

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

Чтобы настроить параметр конфиденциальности регистра wsl.config в файле при подключении диска, выполните следующие действия.

  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.config файл доступны следующие параметры:

Значение по умолчанию: 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.

Устранение неполадок

В моем каталоге есть файлы, которые являются смешанными и требуют конфиденциальности регистра, но Windows средства FS не распознают эти файлы.

Чтобы использовать Windows средства файловой системы для работы в каталоге Linux, содержающем файлы смешанного регистра, необходимо создать новый каталог и задать для него учет регистра, а затем скопировать файлы в этот каталог (с помощью клона Git или untar). Файлы останутся смешанными. (Обратите внимание, что если вы уже попытались переместить файлы в каталог без учета регистра и возникли конфликты, скорее всего, некоторые файлы были перезаписаны и больше не будут доступны.)

Ошибка: каталог не пуст

Вы не можете изменить параметр конфиденциальности регистра в каталоге, содержавшемся в других файлах или каталогах. Попробуйте создать каталог, изменить параметр, а затем скопировать в него файлы смешанного регистра.

Ошибка: отказано в доступе

Убедитесь, что у вас есть разрешения "Запись атрибутов", "Создать файлы", "Создать папки" и "Удалить вложенные папки и файлы" в каталоге, необходимом для изменения учета регистра. Чтобы проверить эти параметры, откройте каталог в Windows проводник (из командной строки используйте команду: explorer.exe .). Щелкните каталог правой кнопкой мыши и выберите "Свойства", чтобы открыть окно свойств документа, а затем выберите "Изменить", чтобы просмотреть или изменить разрешения для каталога.

Properties windows to view or change permissions on NTFS directories

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

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

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