¡Esta es una revisión vieja del documento!
Tabla de Contenidos
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_ALLLANGTZ/usr/bin/localetzselecttimedatectldateiconv- 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"
hwclock
Muestra o cambia la hora del reloj de la placa base
hwclock –hctosys: cambia la hora del sistema por la que tenga el reloj hardwarehwclock –systohc: cambia la hora del hardware por la que tenga el sistema operativohwclock –set –date=“20:20”: cambia la hora
Si ejecutamos el comando sin opciones mostrará la fecha y hora del reloj de la placa base.
$ hwclock 2022-04-19 11:33:13.123456+0200
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 horariasdpkg-reconfigure tzdata: cambiar zona horaria/etc/timezone: archivo de texto que almacena la info de zona horariatimedatectl: gestion de de fecha y hora en systemdTZ: 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 horatimedatectl 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
107.3: Localización e internacionalización (3) locale 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= 107.3: Localización e internacionalización (3) locale locale -a → muestra los locales instalados 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 update-locale → cambia el locale por defecto del sistema 107.3: Localización e internacionalización (3) locale 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) 107.3: Localización e internacionalización (3) 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 107.3: Localización e internacionalización (3) 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 Los códigos de las diferentes codificaciones soportadas los podemos listar con iconv -l
