Этот вопрос возник у меня на днях, когда я работал над проектом разработки, который опирается на продуманную структуру в отношении имен файлов. Фреймворк (здесь не имеет значения) хотел видеть имена файлов в верхнем регистре. Это заставило меня задуматься.
В файловой системе без учета регистра, скажем, extFAT или HFS + (особенно без учета регистра), как файловая система обеспечивает доступ к одному и тому же файлу как в верхнем, так и в нижнем регистре версий имени файла.
Например:
$ cd ~/Documents
$ pwd
/home/derp/Documents
$ cd ../documents
$ pwd
/home/derp/documents
$ cd ../docuMents
$ pwd
/home/derp/docuMents
$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS
$ cd ../documentS
$ pwd
/home/derp/documentS
Все эти команды будут преобразованы в один и тот же каталог. Является ли это поведение, в частности вывод pwd
только функцией bash
в данном случае, просто показывает мне, что, по его мнению, я хочу видеть?
Другой пример:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
Здесь файловая система сообщает случай исходного имени файла, созданного пользователем или программой.
В какой точке стека файловой системы сохраняется понятное человеку имя файла, как оно было создано (например, в верхнем и нижнем регистре), чтобы к нему можно было получить доступ любой комбинацией правильных символов ASCII в верхнем и нижнем регистре? Это просто трюк с регулярными выражениями или что-то еще происходит?
РЕДАКТИРОВАТЬ: Похоже, что поведение, которое мне интересно, обнаруживается в сохраняющих регистр нечувствительных к регистру файловых систем после некоторых дополнительных исследований ...
источник
Ответы:
Независимая от регистра файловая система просто означает, что всякий раз, когда файловая система должна спросить «относится ли A к тому же файлу / каталогу, что и B?» он сравнивает имена файлов / каталогов, игнорируя различия в верхнем / нижнем регистре (именно то, что количество различий в верхнем / нижнем регистре зависит от файловой системы - это неочевидно, когда вы выйдете за пределы ASCII). Чувствительная к регистру файловая система не игнорирует эти различия.
Сохраняющая регистр файловая система хранит имена файлов как дано. Не сохраняющая регистр файловая система этого не делает; как правило, он преобразует все буквы в верхний регистр перед их сохранением (теоретически он может использовать строчные буквы или регистр RaNsOm NoTe, или что-то еще, но AFAIK все реальные буквы используют верхний регистр).
Вы можете объединить эти два атрибута в любой комбинации. Я не уверен, сможете ли вы найти не сохраняющие регистр файловые системы, чувствительные к регистру, но вы наверняка сможете создать такую. Все остальные комбинации существуют или существовали в реальных системах.
Таким образом, сохраняющая регистр, нечувствительная к регистру файловая система (наиболее распространенный тип нечувствительной к регистру файловой системы в настоящее время) будет хранить и возвращать имена файлов в том виде, в каком они были написаны заглавными буквами или когда они последний раз переименовывались, но при сравнении двух имен файлов (чтобы проверить, одно существует, чтобы открыть один, удалить один и т. д.) он будет игнорировать различия регистра.
Когда вы используете файловую систему без учета регистра в окне Unix, различные утилиты будут делать странные вещи, потому что Unix традиционно использует чувствительные к регистру файловые системы - поэтому они не ожидают
Document1
иdocument1
будут одним и тем же файлом.В данном
pwd
случае вы видите, что по умолчанию он просто выводит путь, который вы фактически использовали для доступа к каталогу. Так что, если вы попали туда черезcd DirName
, он будет использоватьсяDirName
в выводе. Если вы попали туда черезDiRnAmE
, вы увидитеDiRnAmE
на выходе. Bash делает это, отслеживая, как вы попали в текущий каталог в$PWD
переменной окружения. В основном это для символических ссылок (если выcd
перейдете по символической ссылке, вы увидите символическую ссылку в вашейpwd
, хотя она на самом деле не является частью пути к вашему текущему каталогу). Но это также дает несколько странное поведение, которое вы наблюдаете в файловых системах без учета регистра. Я подозреваю, чтоpwd -P
даст вам имя каталога, используя регистр, сохраненный на диске, но не проверенный.источник