Herramientas de usuario

Herramientas del sitio


informatica:certificaciones:lpic:lpic-1:107_administrative_tasks:107.3_localisation_and_internationalisation

107.3 Localisation and internationalisation

Pertenece a Topic 107: Administrative Tasks

  • Weight: 3
  • Description: Candidates should be able to localize a system in a different language than English. As well, an understanding of why LANG=C is useful when scripting.
  • Key Knowledge Areas:
    • Configure locale settings and environment variables.
    • Configure timezone settings and environment variables.
  • The following is a partial list of the used files, terms and utilities:
    • /etc/timezone
    • /etc/localtime
    • /usr/share/zoneinfo/
    • LC_*
    • LC_ALL
    • LANG
    • TZ
    • /usr/bin/locale
    • tzselect
    • timedatectl
    • date
    • iconv
    • UTF-8
    • ISO-8859
    • ASCII
    • Unicode

Fecha y hora del sistema

En cualquier Sistema Operativo podemos entender el reloj interno como Reloj de Software o Reloj de Hardware.

El Reloj de Hardware es el que forma parte de la propia placa base.

El Reloj de Software es el que podemos controlar desde el SO y podemos modificar a nuestro antojo, así como sincronizarlo con determinados relojes de referencia.

date

El comando por antonomasia para gestionar fecha y hora es date.

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Si se utiliza sin opciones, este comando muestra la fecha y la hora actuales.

$ date 
Tue Apr 19 15:23:19 CEST 2022

En UTC:

$ date -u
Tue Apr 19 13:23:56 UTC 2022

Si queremos poner por ejemplo la fecha de 26 de Noviembre de 2022 a las 19:30:

date 112619302022 # formato MMDDhhmmAAAA

Dependiendo de la versión del sistema, es posible que no nos deje cambiar la hora (aunque no dé error), ya que quien está controlando el reloj es systemd (ver timedatectl)

Formatear la salida de date

Podemos obtener la salida del comando dandole el formato que nosotros queramos utilizando el signo + seguido de variables:

  • %A: Dia de la semana
  • %B: Mes
  • %d: Dia del mes
  • %H: Hora
  • %M: Minutos

Muy útil para scripts.

En la página del manual de date están todos los controles de formato (man date).

date +"Son las %H y %M minutos"

NTP (Network Time Protocol)

Muchas veces en servidores en producción el ajuste de la hora debe ser muy preciso debido a tareas que puedan estar programadas o de sincronización.

Lo ideal es que todo un entorno tenga siempre el mismo uso y misma hora. Para centralizar esto, se hace uso del protocolo NTP, un servico de sincronización horaria con un servidor de horas externo.

ntpdate: comando para sincronizar hora

En sistemas Debian se instala mediante el paquete ntpdate

ntpdate ntp.ubuntu.com

Configuración regional

/etc/localtime

Linux usa UTC internamente que es la hora de Greenwich. Cuando escribimos un archivo en Linux, el timestamp (marca de tiempo) es almacenado en UTC.

Linux busca dentro del archivo /etc/localtime para conseguir información de la zona horaria. No es un archivo de texto plano, así que no intentéis editarlo. Generalmente tiene un enlace simbólico apuntando a una base de datos que contiene la información de la zona.

La info de todas las zona horarias se encuentra en /usr/share/zoneinfo

Si queremos cambiar nuestro uso horario por otro, bastaría con eliminar el fichero /etc/localtime y crear un enlace alguno de los usuarios horarios. Ejemplo:

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/US/Eastern /etc/localtime

Comandos y archivos de configuración regional

  • tzselect: Consultar zonas horarias
  • dpkg-reconfigure tzdata: cambiar zona horaria
  • /etc/timezone: archivo de texto que almacena la info de zona horaria
  • timedatectl: gestion de de fecha y hora en systemd
  • TZ: Variable de entorno que se puede usar para definir la zona horaria (normalmente no está en uso).

timedatectl

Es la herramienta de systemd que gestiona todas las operaciones de fecha y hora que ya hemos visto con los anteriores comandos.

  • timedatectl set-timezone Europe/Madrid: fija la zona horaria.
  • timedatectl list-timezones: muestra las zonas horarias.
  • timedatectl set-time “22:00”: fija la hora
  • timedatectl set-ntp true/false: activa sincronización

Si hacemos timedatectl set-ntp false podríamos hacer modificaciones de fecha con date y se mantendrían.

Locales

En Linux, los locales son las variables que almacenan la información del idioma y las características propias del idioma (separador de miles, divisa, formato de telefono, unidades de medida, etc) que se van a utilizar en el entorno de shell. Las podemos ver con el comando locale:

# locale
LANG=es_ES.UTF-8
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=
  • locale -a: muestra los locales instalados y que podríamos utilizar
  • locale -k VARIABLE: muestra la info de dicha variable

Si queremos añadir o cambiar locales en el sistema debemos instalarlos.

  • /etc/locale.gen: archivo para generar locales
  • /etc/locale.alias: archivo que define alias para locales
  • locale-gen: genera los locales (en base al fichero /etc/locale.gen)
  • update-locale: cambia el locale por defecto del sistema

Se pueden ver todos las diferentes idiomas usados para diferentes localizaciones (idioma, uso monetario, etc), que se especifican por diferentes variables de entorno.

Si se quiere cambiar la información del locale podemos hacerlo exportando las variables

export LANG=en_GB.UTF-8

O usando el comando update-locale:

update-locale LANG=en_GB.UTF-8

Este comando modifica el fichero que define la configuración por defecto de locales:

  • /etc/default/locale (Debian)
  • /etc/locale.conf (CentOS/RedHat)

Si los cambios hechos de este modo no se aplican es casi seguro que estemos en un sistema con Systemd y se esté encargando de ello (ver localectl)

  • LC_CTYPE: clase de caracteres y conversión.
  • LC_NUMERIC: formato numérico por defecto, diferente del de la moneda.
  • LC_TIME: formato por defecto de la fecha y la hora.
  • LC_COLLATE: reglas de comparación y de ordenación (por ejemplo, los caracteres acentuados).
  • LC_MONETARY: formato de moneda.
  • LC_MESSAGES: formato de los mensajes informativos, interactivos y de diagnóstico.
  • LC_PAPER: formato de papel por defecto (por ejemplo, A4).
  • LC_NAME: formato del nombre de una persona.
  • LC_ADDRESS: igual para una dirección.
  • LC_TELEPHONE: igual para el teléfono.
  • LC_ALL: reglas para todas las demás variables LC.

localectl

Nos permite gestionar locales y perfiles de teclado del sistema por medio de systemd

  • localectl: nos muestra toda la info
  • localectl set-locale: cambia el local del sistema
  • localectl list-locales: cambia el local del sistema

Por ejemplo, establecer UTF-8 y distribución de teclado española:

# localectl set-locale LANG=es_ES.utf8
# localectl set-keymap es

iconv

Con el comando iconv podemos modificar la codificación del texto de los archivos con los que trabajamos. Las opciones que usan son -f (source) y -t (destination). Ejemplo:

iconv -f iso-8859-1 -t UTF-8 umlautfile.txt > umlautfile-utf8.txt

Con el comando anterior estaríamos convirtiendo el contenido del fichero umlautfile.txt con la codificación ISO-8859-1 a un fichero umlautfile-utf8.txt con codificación UTF-8.

Podemos consultar la codificación de un fichero con file: file fichero.txt

Los códigos de las diferentes codificaciones soportadas los podemos listar con iconv -l

dos2unix

Hay una herramienta muy útil llamada dos2unix que permite convertir los saltos de línea de un fichero de texto en formato Unix a formato DOS y viceversa:

dos2unix fichero
informatica/certificaciones/lpic/lpic-1/107_administrative_tasks/107.3_localisation_and_internationalisation.txt · Última modificación: por tempwin