Conjunto de caracteres no sistema de arquivos do Linux

0

Acabei de instalar alguns pacotes do Arch Linux, que despejaram esse arquivo no meu disco:

/etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem

Observe que o nome do arquivo parece conter caracteres turcos. Aqui estão os diferentes comandos com sua saída:

> cd /etc/ssl/certs
> echo EBG*
EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
> ls -al EBG*
lrwxrwxrwx 1 root root 86 Nov  3 22:27 EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.pem -> /usr/share/ca-certificates/mozilla/EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.crt

Q1: Por que echo e ls produzem saídas diferentes?

Então é um link simbólico. Se eu desconsiderar isso:

> ls -alL EBG*
-rw-r--r-- 1 root root 2106 Sep 24 22:52 EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.pem

Vamos ver o alvo:

> cd /usr/share/ca-certificates/mozilla
> echo EBG*
EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
> ls -al EBG*
-rw-r--r-- 1 root root 2106 Sep 24 22:52 EBG_Elektronik_Sertifika_Hizmet_Sa??lay??c??s??.crt

Q2: Qual é a codificação usada para caracteres não-ASCII em um sistema de arquivos Linux (aqui: ext4)? Estou certo de que a codificação não é capturada em qualquer lugar e, se eu der algum disco rígido aleatório sem instruções, você precisará adivinhar qual codificação eu usei?

Percebi que houve um problema porque pacman (o gerenciador de pacotes do Arch Linux) pareceu ficar confuso sobre se o arquivo foi ou não instalado:

Q3: Como evito que pacman , ou ls ou qualquer outra coisa fique confuso sobre arquivos como esse? E se na próxima semana, algum arquivo for árabe ou hebreu em vez de turco?

    
por Johannes Ernst 05.11.2014 / 01:19

1 resposta

1
  1. echo é um programa idiota, que produz resultados, quer ache ou não sentido. ls é um programa inteligente, que tenta produzir apenas o que faz sentido no contexto. Isso resulta em ls produzindo a saída "errada" porque você não configurou sua localidade corretamente. Se você export LANG=en_US.UTF-8 (ou algum outro idioma com utf-8), então ls irá exibi-lo corretamente; normalmente há algum script de ambiente de sistema que faz isso.

  2. Os sistemas de arquivos Linux não impõem uma codificação (mas os montados no exterior podem executar transformações de codificação, por exemplo, de cp1252 para FAT), mas por convenção strong é sempre utf-8. Nos últimos anos, foi considerado um erro grave se qualquer outra codificação for usada em um pacote.

  3. Para ls , corrija seu ambiente. Por pacman , arquive um bug.

por 05.11.2014 / 02:10