linuxfromscratch:12.1:160-configuring_the_system_locale

Linux From Scratch - Version 12.1-systemd
Chapter 9. System Configuration
이전 위로 / 처음으로 다음
리눅스 콘솔 설정 /etc/inputrc 파일 생성

모국어 지원을 위해 일부 환경 변수가 필요합니다. 이를 올바르게 설정하면 다음과 같은 결과가 나타납니다.

  • 프로그램의 출력이 모국어로 번역됩니다.
  • 문자를 문자, 숫자 및 기타 클래스로 올바르게 분류. 이는 영어가 아닌 로캘의 명령줄에서 bash가 ASCII가 아닌 문자를 올바르게 받아들이는 데 필요합니다.
  • 국가에 맞는 올바른 알파벳순 정렬 순서
  • 적절한 기본 용지 크기
  • 화폐, 시간 및 날짜 값의 올바른 서식 지정

아래의 <ll>을 원하는 언어의 두 글자 코드(예: en)로 바꾸고 <cc>를 해당 국가의 두 글자 코드(예: GB)로 바꿉니다. <charmap>은 선택한 로캘의 표준 charmap으로 대체해야 합니다. @euro와 같은 선택적 수정자를 사용할 수도 있습니다.

다음과 같이 실행하여 Glibc에서 지원하는 모든 로캘 목록을 확인할 수 있습니다.

locale -a

Charmaps에는 여러 가지 별칭이 있을 수 있습니다 예를 들어 ISO-8859-1은 iso8859-1iso88591이라고도 합니다. 일부 애플리케이션은 다양한 동의어를 올바르게 처리할 수 없으므로(예: UTF-8utf8이 아닌 UTF-8로 작성해야 함) 대부분의 경우 특정 로캘에 대한 표준 이름을 선택하는 것이 가장 안전합니다. 표준 이름을 확인하려면 다음 명령을 실행하세요. 여기서 <locale name>은 원하는 로캘에 대한 locale -a의 출력값입니다(이 예에서는 en_GB.iso88591).

LC_ALL=<locale name> locale charmap

en_GB.iso88591 로캘의 경우 다음과 같이 출력됩니다.

ISO-8859-1

그 결과 최종 로캘 설정은 en_GB.ISO-8859-1이 됩니다. 위의 휴리스틱을 사용하여 찾은 로캘을 Bash 시작 파일에 추가하기 전에 테스트하는 것이 중요합니다.

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

위의 명령은 언어 이름, 해당 로캘에서 사용하는 언어, 문자 인코딩, 현지 통화, 전화번호 국제 코드가 순서대로 출력되야 합니다. 위의 명령 중 하나라도 실패하고 아래와 유사한 메시지가 표시되면 8장에서 로캘이 설치되지 않았거나 기본 설치 Glibc에서 지원되지 않는다는 뜻입니다.

locale: Cannot set LC_* to default locale: No such file or directory

이 경우 localedef 명령을 사용하여 원하는 로캘을 설치하거나 다른 로캘을 선택하는 것을 고려해야 합니다. 아래의 내용들은 Glibc에서 이러한 오류 메시지가 표시되지 않는다고 가정합니다.

다른 패키지도 로캘 이름이 기대에 미치지 못하는 경우 잘못 작동할 수 있지만 반드시 오류 메시지가 표시되지는 않을 수 있습니다. 이러한 경우 다른 Linux 배포판에서 해당 로캘을 어떻게 지원하는지 조사하면 유용한 정보를 얻을 수 있습니다.

적절한 로캘 설정이 결정되면 /etc/locale.conf 파일을 만듭니다.

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF
셸 프로그램 /bin/bash(이하 “셸”이라 함)는 시작 설정 파일들을 사용하여 실행할 환경을 만드는 데 도움을 줍니다. 각 파일은 용도가 다르며 로그인 및 대화형 환경에 따라 다르게 영향을 미칠 수 있습니다. /etc 디렉터리에 있는 파일은 전역 설정을 제공합니다. 홈 디렉터리에 동일한 파일이 있는 경우 해당 파일이 전역 설정을 재정의할 수 있습니다.

대화형 로그인 셸은 /bin/login을 사용하여 /etc/passwd 파일을 읽음으로써 시작됩니다. 대화형 비로그인 셸은 명령줄에서 시작됩니다(예: [prompt]$/bin/bash). 비대화형 셸은 일반적으로 셸 스크립트가 실행 중일 때 존재합니다. 비대화형 셸은 스크립트를 처리하고 명령 사이에 사용자 입력을 기다리지 않기 때문에 비대화형입니다.

로그인 셸은 /etc/locale.conf의 설정에 영향을 받지 않는 경우가 많습니다. 다음 파일은 /etc/profile'을 만들어 /etc/locale.conf에서 로캘 설정을 내보냅니다. 다만 Linux 콘솔에서 실행하는 경우에는 대신 C.UTF-8 로캘을 설정합니다(Linux 콘솔이 렌더링할 수 없는 문자를 프로그램이 출력하는 것을 방지합니다).

cat > /etc/profile << "EOF"
# Begin /etc/profile

for i in $(locale); do
  unset ${i%=*}
done

if [[ "$TERM" = linux ]]; then
  export LANG=C.UTF-8
else
  source /etc/locale.conf

  for i in $(locale); do
    key=${i%=*}
    if [[ -v $key ]]; then
      export $key
    fi
  done
fi

# End /etc/profile
EOF

systemd localectl 유틸리티를 사용하여 /etc/locale.conf를 수정할 수 있습니다. 위 예제와 같은 결과를 localectl에서 얻으려면 다음과 같이 실행하세요.

localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"

locale 출력에서 LANG, LC_CTYPE, LC_NUMERIC 등 다른 언어별 환경 변수를 지정할 수도 있습니다. 공백으로 구분하기만 하면 됩니다. LANG이 en_US.UTF-8로 설정되어 있지만 LC_CTYPE이 그냥 en_US로 설정된 예는 다음과 같습니다.

localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"

참고
localectl 명령은 루트 환경에서는 작동하지 않는다는 점에 유의하세요. 이 명령은 LFS 시스템이 systemd로 부팅된 후에만 사용할 수 있습니다.

C(기본값)와 en_US(미국 영어 사용자에게 권장되는) 로캘은 서로 다릅니다. C는 US-ASCII 7비트 문자 집합을 사용하며 비트가 높은 바이트는 유효하지 않은 문자로 취급합니다. 따라서 예를 들어, 해당 로캘에서는 ls 명령이 해당 문자를 물음표로 대체합니다. 또한 Mutt 또는 Pine에서 이러한 문자를 사용하여 메일을 보내려고 시도하면 RFC를 준수하지 않는 메시지가 전송됩니다(발신 메일의 문자 집합이 unknown 8-bit로 표시됨). 8비트 문자가 절대 필요하지 않다고 확신하는 경우에만 C 로캘을 사용하는 것이 좋습니다.

  • linuxfromscratch/12.1/160-configuring_the_system_locale.txt
  • 마지막으로 수정됨: 2024/06/15 13:18
  • 저자 baecy