Essa pergunta me ocorreu outro dia, quando eu estava trabalhando em um projeto de desenvolvimento que se baseia em uma estrutura opinativa em relação aos nomes de arquivos. A estrutura (irrelevante aqui) queria ver o primeiro nome de arquivo em maiúsculas. Isso me fez pensar.
Em um sistema de arquivos que não diferencia maiúsculas de minúsculas, diga extFAT ou HFS + (especificamente que não diferenciam maiúsculas de minúsculas) como o sistema de arquivos fornece acesso ao mesmo arquivo com as versões em maiúsculas e minúsculas do nome do arquivo.
Por exemplo:
$ 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
Todos esses comandos serão resolvidos para o mesmo diretório. Esse comportamento, especificamente a saída de pwd
apenas uma função bash
desse caso, está apenas me mostrando o que ele pensa que eu quero ver?
Outro exemplo:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
O sistema de arquivos aqui relata o caso do nome do arquivo original criado pelo usuário ou programa.
Em que ponto da pilha do sistema de arquivos o nome do arquivo legível por humanos é preservado conforme foi criado (por exemplo, maiúsculas e minúsculas) para que possa ser acessado por qualquer combinação dos caracteres ASCII maiúsculos e minúsculos corretos? Isso é apenas um truque de regex em algum lugar ou algo mais está acontecendo?
EDIT: Parece que o comportamento que eu estou curioso sobre se encontra em caso de preservação de sistemas de arquivos de maiúsculas e minúsculas depois de mais algumas pesquisas ...
fonte
Respostas:
Um sistema de arquivos que não diferencia maiúsculas de minúsculas apenas significa que sempre que o sistema de arquivos precisa perguntar "A se refere ao mesmo arquivo / diretório que B?" ele compara os nomes de arquivos / diretórios que ignoram as diferenças em maiúsculas / minúsculas (exatamente o que as diferenças em maiúsculas / minúsculas contam depende do sistema de arquivos - não é óbvio quando você ultrapassa o ASCII). Um sistema de arquivos com distinção entre maiúsculas e minúsculas não ignora essas diferenças.
Um sistema de arquivos que preserva maiúsculas e minúsculas armazena os nomes dos arquivos conforme indicado. Um sistema de arquivos sem preservação de caso não; normalmente converte todas as letras em maiúsculas antes de armazená-las (teoricamente, pode usar letras minúsculas ou RaNsOm NoTe, ou qualquer outra coisa, mas o AFAIK todas as letras do mundo real usam maiúsculas).
Você pode juntar esses dois atributos em qualquer combinação. Não tenho certeza se você pode encontrar sistemas de arquivos que não diferenciam maiúsculas de minúsculas, mas certamente pode criar um. Todas as outras combinações existem ou existiram em sistemas reais, no entanto.
Portanto, um sistema de arquivos que não faz distinção entre maiúsculas e minúsculas (o tipo de sistema de arquivos que não diferencia maiúsculas de minúsculas hoje em dia) armazenará e retornará nomes de arquivos em qualquer capitalização que você os criou ou os renomeou pela última vez, mas ao comparar dois nomes de arquivo (para verificar se um existe, para abrir um, para excluir um etc.) ignorará as diferenças entre maiúsculas e minúsculas.
Quando você usa um sistema de arquivos que não diferencia maiúsculas de minúsculas em uma caixa Unix, vários utilitários fazem coisas estranhas porque o Unix tradicionalmente usa sistemas de arquivos que diferenciam maiúsculas de minúsculas - para que não esperem
Document1
edocument1
sejam o mesmo arquivo.No
pwd
caso, o que você está vendo é que, por padrão, apenas gera o caminho que você realmente usou para chegar ao diretório. Então, se você chegou lá viacd DirName
, ele será usadoDirName
na saída. Se você chegou lá viaDiRnAmE
, veráDiRnAmE
na saída. O Bash faz isso acompanhando como você chegou ao seu diretório atual na$PWD
variável de ambiente. Principalmente, isso é para links simbólicos (se você estivercd
em um link simbólico, verá o link simbólico no seupwd
, mesmo que ele não faça parte do caminho para o diretório atual). Mas também fornece o comportamento um tanto estranho que você observa em sistemas de arquivos que não diferenciam maiúsculas de minúsculas. Eu suspeito quepwd -P
você fornecerá o nome do diretório usando o caso armazenado no disco, mas não foi testado.fonte