Pular para o conteúdo
Desenvolvimento & DevOps

O Linux é case sensitive? Entenda e veja como lidar

Sim, o Linux é case sensitive: diferencia maiúsculas de minúsculas em nomes de arquivos, comandos, opções e variáveis. Veja exemplos no terminal, a diferença para Windows e macOS e como usar o casefold do ext4.

Tiago da Silva CândidoPorTiago da Silva Cândido 10 min de leitura
Compartilhe

Sim, o Linux é case sensitive: ele diferencia maiúsculas de minúsculas em nomes de arquivos e pastas, comandos, opções de comandos e variáveis de ambiente. Para o sistema, Relatorio.txt, relatorio.txt e RELATORIO.TXT são três arquivos distintos, que podem existir lado a lado na mesma pasta, e digitar LS no lugar de ls resulta em “comando não encontrado”.

Esse comportamento vem dos sistemas de arquivos nativos, como ext4, Btrfs e XFS, que tratam o nome como uma sequência exata de bytes. A exceção são partições FAT32/exFAT e diretórios com o recurso casefold ativado, como mostra a tabela abaixo.

OndeDiferencia maiúsculas?Observação
Linux (ext4, Btrfs, XFS)SimPadrão em praticamente todas as distribuições
Linux com ext4 casefoldNão, por pastaAtivado com chattr +F em pasta vazia
Pendrive FAT32/exFAT no LinuxNãoLimitação do próprio formato
Windows (NTFS)Não, por padrãoPreserva a grafia; pode ativar por pasta
macOS (APFS)Não, por padrãoExiste variante APFS sensível a maiúsculas
Comandos e variáveis no shellSim$HOME é diferente de $home

O que significa ser case sensitive

Um sistema case sensitive é aquele que considera letras maiúsculas e minúsculas como caracteres diferentes. A expressão vem do inglês “case”, referência às caixas tipográficas: caixa-alta (upper case) e caixa-baixa (lower case). Em português, fala-se em “sensível a maiúsculas e minúsculas” ou “diferencia caixa”.

O oposto é o sistema case insensitive, em que “Foto.JPG” e “foto.jpg” apontam para o mesmo arquivo. Há ainda um meio-termo chamado case preserving, adotado por Windows e macOS: o sistema guarda a grafia que você digitou, mas na hora de buscar ou comparar ignora a diferença. Por isso, nesses sistemas você não consegue ter dois arquivos que só mudam na caixa das letras.

Em que o Linux diferencia maiúsculas de minúsculas

O Linux diferencia maiúsculas de minúsculas em quase tudo que você digita no terminal, não apenas em arquivos. Isso vale porque o kernel, o shell (Bash, Zsh, Fish) e a maioria dos programas herdaram a tradição do Unix, em que comparar nomes byte a byte é mais simples, mais rápido e não depende de idioma.

  • Arquivos e pastas: Documentos e documentos são diretórios diferentes; um cd documentos falha se a pasta se chama Documentos.
  • Comandos: os executáveis têm nomes exatos, quase sempre em minúsculas, então Sudo, APT ou Grep não funcionam.
  • Opções de comandos: ls -r inverte a ordem, enquanto ls -R lista de forma recursiva; trocar a caixa muda o resultado.
  • Variáveis de ambiente: $PATH e $path são variáveis distintas, e o sistema só usa a primeira para localizar programas.
  • Usuários e senhas: nomes de login são, por convenção, minúsculos, e senhas sempre diferenciam caixa.
  • URLs servidas pelo Linux: em servidores Apache ou Nginx, /Img/Logo.png e /img/logo.png são caminhos diferentes.

Mesmo nome, letras diferentes: o que o Linux entende

Arquivos

foto.jpg, Foto.jpg e FOTO.JPG = 3 arquivos separados

Comandos

ls funciona; LS retorna “comando não encontrado”

Opções

ls -r inverte a ordem; ls -R entra nas subpastas

Exceções

FAT32, exFAT e pastas ext4 com casefold ignoram a caixa

Exemplos no terminal

O teste mais rápido para ver o Linux case sensitive na prática é criar arquivos com a mesma grafia e caixas diferentes. Em qualquer pasta da sua home, rode os comandos abaixo:

$ mkdir teste && cd teste
$ touch nota.txt Nota.txt NOTA.TXT
$ ls
NOTA.TXT  Nota.txt  nota.txt
$ LS
LS: comando não encontrado
$ echo $home

$ echo $HOME
/home/usuario

Os três arquivos aparecem separados, o comando em caixa-alta não existe e a variável $home volta vazia. Se você copiar essa pasta para um pendrive formatado em FAT32 ou para o Windows, o sistema de destino vai acusar conflito, porque para ele os três nomes são iguais.

Mãos digitando comandos em teclado diante de um terminal
No terminal, um único caractere em caixa-alta muda o comando, a opção ou o arquivo acessado.

Por que o sistema de arquivos Linux funciona assim

O sistema de arquivos Linux trata o nome de um arquivo como uma sequência de bytes, com apenas duas restrições: não pode conter a barra (/) nem o caractere nulo. Ele não interpreta se aquele byte é uma letra, qual o idioma ou qual seria a versão maiúscula dela. Comparar bytes é direto e previsível.

Ser case insensitive exige regras de equivalência entre letras, e isso não é trivial fora do inglês. O “i” turco tem versões com e sem ponto, o “ß” alemão vira “SS” em maiúsculas e letras acentuadas podem ser codificadas de mais de uma forma em Unicode. Sistemas que ignoram a caixa precisam de tabelas para resolver esses casos, o que acrescenta complexidade e custo de processamento.

O Windows é case sensitive?

Não, o Windows não é case sensitive por padrão: o NTFS preserva a grafia, mas trata “Arquivo.txt” e “arquivo.txt” como o mesmo arquivo. O mesmo vale para o Prompt de Comando e o PowerShell, em que DIR e dir funcionam igual, e para variáveis de ambiente como %PATH%.

Com a chegada do WSL (Windows Subsystem for Linux), a Microsoft passou a permitir sensibilidade a maiúsculas por diretório no NTFS. O comando fsutil.exe file setCaseSensitiveInfo C:\pasta enable, executado como administrador, ativa o comportamento naquela pasta. Detalhes e limitações estão na documentação oficial do WSL, citada também na tabela.

E o macOS?

O macOS usa por padrão o APFS em modo case insensitive e case preserving, igual ao Windows nesse ponto, mesmo sendo um sistema derivado do Unix. Ao formatar um volume pelo Utilitário de Disco, porém, é possível escolher a variante “APFS (Sensível a Maiúsculas)”. A Apple recomenda cautela, porque alguns aplicativos não funcionam bem nesse modo; a orientação está no Suporte da Apple.

SistemaPadrãoDá para mudar?
LinuxCase sensitiveSim, com casefold (ext4/F2FS)
WindowsCase insensitive, preserva grafiaSim, por pasta, via fsutil
macOSCase insensitive, preserva grafiaSim, formatando em APFS sensível

Como deixar o Linux case insensitive

Dá para deixar o Linux case insensitive em pastas específicas usando o recurso casefold do ext4, disponível a partir do kernel 5.2, ou ajustando o shell para ignorar a caixa em buscas e no autocompletar. Transformar o sistema inteiro em insensível não é recomendado, porque muitos programas contam com a diferença entre maiúsculas e minúsculas.

Casefold no ext4, passo a passo

O casefold é útil para jogos rodando via Wine/Proton, compartilhamentos com Windows e pastas de projetos migrados. Antes de começar, faça backup: os passos envolvem formatar ou alterar o sistema de arquivos.

  1. Confira os requisitos: rode uname -r para ver se o kernel é 5.2 ou mais novo e use um e2fsprogs recente, versão 1.45 ou superior.
  2. Ative o recurso na partição: ao formatar, use mkfs.ext4 -O casefold /dev/sdX1; versões recentes do tune2fs -O casefold também ativam em partição desmontada.
  3. Monte e crie a pasta: monte a partição normalmente e crie um diretório vazio, por exemplo mkdir /dados/jogos.
  4. Marque a pasta como insensível: execute chattr +F /dados/jogos; o atributo só pode ser aplicado enquanto o diretório estiver vazio.
  5. Verifique: lsattr -d /dados/jogos deve exibir a letra F, e criar Teste.txt e depois abrir teste.txt deve levar ao mesmo arquivo.

Subpastas criadas dentro de um diretório com o atributo F herdam o comportamento. A documentação do ext4 e do recurso de codificação de nomes fica no portal de documentação do kernel Linux.

Ajustes no terminal sem mexer no disco

Se o incômodo é só na hora de digitar, o Bash e as ferramentas comuns têm opções para ignorar a caixa sem alterar nada no sistema de arquivos:

  • Autocompletar com Tab: adicione set completion-ignore-case on ao arquivo ~/.inputrc e abra um novo terminal.
  • Curingas (glob): shopt -s nocaseglob faz ls *.jpg encontrar também arquivos terminados em .JPG.
  • Busca de arquivos: find . -iname "relatorio*" localiza o nome em qualquer combinação de maiúsculas e minúsculas.
  • Busca de texto: grep -i erro log.txt encontra “erro”, “Erro” e “ERRO” nas linhas do arquivo.
  • Samba: no smb.conf, a opção case sensitive define como o compartilhamento responde a clientes Windows.

Erros comuns causados pela diferença de caixa

Os problemas mais frequentes aparecem quando um projeto nasce no Windows ou no macOS e depois roda em um servidor Linux, como uma VPS ou um pipeline de CI. No sistema de origem tudo funciona, porque a caixa é ignorada; no Linux, o arquivo “não existe”.

  • Imagens quebradas no site: o HTML chama logo.png, mas o arquivo enviado se chama Logo.PNG; no servidor Linux, o navegador recebe erro 404.
  • Imports que falham: em Node.js ou Python, import "./Utils" funciona no Mac quando o arquivo é utils.js, mas quebra no build em Linux.
  • Renomear só a caixa no Git: com core.ignorecase ativo, mudar “readme.md” para “README.md” pode não ser detectado; use git mv -f readme.md README.md.
  • Arquivos duplicados no clone: um repositório com Nota.txt e nota.txt, criado no Linux, gera conflito ao ser clonado em Windows ou macOS.
  • Tabelas de banco de dados: no MySQL rodando em Linux, nomes de tabelas viram arquivos em disco e podem diferenciar caixa.

A melhor prevenção é adotar uma convenção simples: nomes de arquivos e pastas em minúsculas, sem espaços e sem acentos, usando hífen ou sublinhado. Isso evita surpresas em qualquer sistema operacional.

Rack de servidores em data center com luzes de status
Servidores e VPS rodam Linux na maioria dos casos, por isso erros de caixa costumam surgir no deploy.

Linguagens de programação e SQL são case sensitive?

A maioria das linguagens usadas no Linux diferencia maiúsculas de minúsculas, mas a regra depende da linguagem, não do sistema operacional. Um mesmo código em C se comporta igual no Windows e no Linux quanto a nomes de variáveis; o que muda entre sistemas é a forma como os arquivos incluídos são encontrados.

LinguagemCase sensitive?Detalhe
C e C++Simtotal e Total são variáveis diferentes
JavaSimNome da classe pública deve bater com o arquivo
Python, JavaScript, BashSimVariáveis e funções diferenciam caixa
SQL (palavras-chave)NãoSELECT e select funcionam igual
SQL (nomes e dados)DependeVaria conforme banco, configuração e collation

No SQL, as palavras-chave nunca diferenciam caixa, mas identificadores e comparações de texto variam. O PostgreSQL converte nomes sem aspas para minúsculas e respeita a caixa de nomes entre aspas duplas. No MySQL, a sensibilidade de nomes de tabelas depende do sistema operacional e da variável lower_case_table_names, explicada na documentação oficial do MySQL. Já comparações de valores, como WHERE nome = 'ana', dependem da collation configurada.

Que tipo de sistema é o Linux?

O Linux é um kernel de sistema operacional livre e de código aberto, do tipo Unix-like, ou seja, inspirado no Unix e compatível com boa parte de seus padrões. Junto com ferramentas GNU, gerenciadores de pacotes e ambientes gráficos, ele forma as distribuições, como Ubuntu, Debian, Fedora e Arch Linux.

Por ser multiusuário e herdeiro do Unix, o Linux manteve a sensibilidade a maiúsculas desde o início. É também o sistema dominante em servidores e VPS, o que explica por que tantos erros de caixa só aparecem na hora do deploy.

Perguntas frequentes

O Linux é case sensitive em todas as distribuições?

Sim. Ubuntu, Debian, Fedora, Arch e as demais usam por padrão sistemas de arquivos case sensitive, como ext4, Btrfs ou XFS. A diferença só desaparece em partições FAT32/exFAT ou em pastas com casefold ativado.

Posso ter dois arquivos com o mesmo nome e caixas diferentes?

Pode, desde que estejam em um sistema de arquivos sensível a maiúsculas. Evite fazer isso em projetos compartilhados: ao copiar para Windows, macOS ou um pendrive, um dos arquivos será sobrescrito ou gerará conflito.

O Windows é case sensitive?

Não por padrão. O NTFS preserva a grafia, mas ignora a caixa nas buscas. É possível ativar a sensibilidade por pasta com o comando fsutil.exe file setCaseSensitiveInfo, recurso criado para o WSL.

A linguagem C e a linguagem Java são case sensitive?

Sim, ambas. Em C, main é diferente de Main; em Java, String é um tipo e string não existe, além de o nome da classe pública precisar coincidir com o nome do arquivo .java.

O SQL é case sensitive?

As palavras-chave não são. Nomes de tabelas, colunas e comparações de texto variam conforme o banco de dados, o sistema operacional e a collation; consulte a documentação do seu banco para saber o comportamento exato.

Ativar casefold apaga meus arquivos?

Ativar o recurso com mkfs.ext4 formata a partição e apaga tudo. Já o chattr +F só funciona em pasta vazia, então é preciso mover os arquivos para fora, aplicar o atributo e trazê-los de volta.

Mais em Desenvolvimento & DevOps

Compartilhe
Próxima leituraO que é VPS Windows, para que serve e quando escolher10 min de leitura

Mapa do site