Candidates should be able to localise 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.
Terms and Utilities
The earth is large and round so we have different timezones and different languages! There are even talks about a time zone for Mars and if we encounter aliens, they might also have their own languages.
This makes a few problems: 1. we may prefer our local language for our Linux 2. we need to tell linux about our timezone 3. programs may ask linux about our preferences on languages, keyboard configuration, and .. 4. and even if you do not case about yourself, your machines needs your timezone to be able to run tasks on needed times
In this section I will show you the answers Linux has to overcome these issues. But lets start simple.
On linux systems you can use
cal commands to check the date and the calendar. It is possible to print a custom date using
[[email protected] ~]$ date Fri Jun 2 02:07:35 PM EDT 2023 [[email protected] ~]$ date +'%Y%m%d-%M' 20230602-08 [[email protected] ~]$ date +'%Y%m%d-%H%M' 20230602-1408
to get more info you can try
[[email protected] ~]# timedatectl Local time: Fri 2023-06-02 14:23:34 EDT Universal time: Fri 2023-06-02 18:23:34 UTC RTC time: Sat 2023-06-03 02:37:51 Time zone: America/New_York (EDT, -0400) System clock synchronized: no NTP service: active RTC in local TZ: no
Timezone determines what is your time difference comparing with a reference timezone. This way you can talk about times regardless of your location. In another words, I can tell you "start the change request at 02:30 UTC" and we both know when the change will be started in our own timezone (mine will be 1 hour ahead so I'll start at 3:30 my time).
Most distributions will ask you about your time zone during the installation. You can change this later, either by a GUI in the system settings or using a text based user interface (TUI) like the older
tzconfig or a newer
[jadi@fedora ~]$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 7) Europe 2) Americas 8) Indian Ocean 3) Antarctica 9) Pacific Ocean 4) Asia 10) coord - I want to use geographical coordinates. 5) Atlantic Ocean 11) TZ - I want to specify the timezone using the Posix TZ format. 6) Australia #? 5 Please select a country whose clocks agree with yours. 1) Bermuda 4) Faroe Islands 7) Spain 2) Cape Verde 5) Portugal 3) Falkland Islands 6) South Georgia & the South Sandwich Islands #? 1 The following information has been given: Bermuda Therefore TZ='Atlantic/Bermuda' will be used. Selected time is now: Fri Jun 2 15:15:06 ADT 2023. Universal Time is now: Fri Jun 2 18:15:06 UTC 2023. Is the above information OK? 1) Yes 2) No #? 1 You can make this change permanent for yourself by appending the line TZ='Atlantic/Bermuda'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: Atlantic/Bermuda
When finished this program will suggest you to set a variable called
TZ as follow to set your own time zone, but not the systems:
TZ='Atlantic/Bermuda'; export TZ
or use it once to check time in a specific city:
$ env TZ='Asia/Tokyo' date Sat Jun 3 03:25:40 AM JST 2023
/usr/share/zoneinfo/ directory contains all the timezone info. These are binary files. If you need to change your system-wide timezone you need to short link the
/etc/localtime to one of these files:
# ls -ltrh /etc/localtime lrwxrwxrwx. 1 root root 38 Apr 26 09:41 /etc/localtime -> ../usr/share/zoneinfo/America/New_York
This file should be replaced by the correct file from
/usr/share/zoneinfo/. It is nicer to make a symbolic link rather than copying the actual file. This will prevent the issues during next upgrades.
To check the status of current selected system language, use the
[[email protected] ~]# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
These are environment variables telling system what languages to use. Here I'm using
LANG=en_US.UTF-8 which means I'm using English with US variant and UTF-8 encoding.
UTF-8 and other encodings will be discussed a bit later in this chapter
Other variables you see above, tell the system how to show different things based on localisation systems. For example if we change the LC_TIME to "en_GB.UTF-8" the time will be printed in Great Britain format.
Another important settings is
LC_ALL. It can be used to change ALL settings. If you do a
export LC_ALL=fa_IR.UTF-8, all the settings will be set to that one, with no exception. It is always possible to
LANG=C settings is used in many programs and scripts to make sure that the system will create coherent and predictable results in all environments. For example to make sure that the sort order will be in Binary order and all language settings will be default (en.US).
changing or adding locales
This is not a part of LPIC exam but it is good to know that on a debian based machine, you can change, add or set your default locales using
There is also this file:
[[email protected] ~]# cat /etc/locale.conf LANG="en_US.UTF-8"
and you can also add your desired
LANG config to your
localectlto check locale or use
localectl set-locale LANG=en_US.UTF-8to set it.
Computers used to work with 7bit characters encoding. That would give us 128 characters which was enough for numbers, punctuation and digits!
It had more characters and a lots of sets for Thai, Arabic and other languages but still had ASCII character sets.
Unicode Transformation Format is the newest encoding method. It is a real universal encoding with characters not only for all written languages but also for fun characters like ¾, ♠, π and ⚤. It is backward compatible with the ASCII and uses 8 bit code units (not 8 bit coding!). In most cases it is a good idea to use UTF-8 and be sure that your system will work in practically all cases.
If you needed to convert coding to each other, the command is
-l switch will show you all the available codings:
iconv -f WINDOWS-1258 -t UTF-8 /tmp/myfile.txt
Note: -f is for "from" and -t is for "to". Easy to remember
In 2023 you will seldom need this command but it is a must to know it, specially if you are living in a non US country!
|← 107.2 Automate system administration tasks by scheduling jobs||108.1 Maintain system time →|