Я только что установил несколько пакетов Arch Linux, которые выгружали этот файл на мой диск:

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

Обратите внимание, что имя файла содержит турецкие символы. Вот разные команды с их выводом:

> 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: Почему echo и ls выдают разные результаты?

Так что это символическая ссылка. Если я разыграю это:

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

Давайте посмотрим на цель:

> 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: Какая кодировка используется для не-ASCII символов в файловой системе Linux (здесь: ext4)? Правильно ли я понимаю, что кодировка нигде не фиксируется, и если я дам вам какой-нибудь случайный жесткий диск без инструкций, вам нужно угадать, какую кодировку я использовал?

Я заметил, что возникла проблема, потому что pacman (менеджер пакетов Arch Linux), похоже, запутался в том, установил ли он этот файл:

Q3: Как я могу предотвратить pacman , ls или чем-то еще в таких файлах? Что если на следующей неделе какой-нибудь файл будет арабским или ивритом, а не турецким?

1 ответ1

1
  1. echo - глупая программа, которая выдает результат независимо от того, считает ли он, что это имеет смысл. ls - это умная программа, которая пытается выводить только то, что имеет смысл в контексте. Это приводит к тому, что ls выдает "неправильный" вывод, потому что вы неправильно настроили свой язык. Если вы export LANG=en_US.UTF-8 (или другой язык с utf-8), то ls отобразит его правильно; обычно есть некоторый системный сценарий, который делает это.

  2. Файловые системы Linux не поддерживают кодирование (но сторонние смонтированные могут выполнять преобразования кодирования, например, из cp1252 для FAT), но по строгому соглашению это всегда utf-8. В течение последних нескольких лет считается серьезной ошибкой, если в пакете используется любая другая кодировка.

  3. Для ls исправьте свою среду. Для pacman , сообщите об ошибке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .