A resposta é: em sistemas do tipo Unix, os nomes de arquivos são compostos de bytes , não de caracteres. Pelo menos da perspectiva do kernel e sua API.
Um kernel parecido com o Unix é normalmente neutro em relação a qualquer valor de byte, mas \ 000 (ASCII: NUL) e \ 057 (ASCII: barra). No Linux não existem outras restrições na camada do sistema de arquivos, mas alguns drivers FS e certos modos levam à rejeição de alguns nomes, geralmente devido à impossibilidade de tradução. Por exemplo, não é possível criar um nome de arquivo com UTF-8 inválido em algo montado com -o iocharset=utf8
(por exemplo, tipos cifs
ou vfat
). Nenhum dos FSs compatíveis com DOS / Windows permitirão que você faça \ 134 (ASCII: barra invertida) uma parte do nome. Ou o tipo msdos
aplicará as restrições do DOS referentes a nomes 8.3.
Ext3 / ext4 não é conhecido por ter restrições, mas acima de \ 000 e \ 057.