5.4 Настройка часового пояса (Configuring Time Zone Settings)¶
Если система Linux перемещается в другое физическое местоположение, может потребоваться настроить часовой пояс, а также параметры локали. На первый взгляд это кажется простой задачей. Однако управление временем в Linux осуществляется иначе, чем в других операционных системах, с которыми вы, возможно, знакомы.
В этой части главы мы рассмотрим следующие темы:
- Как работает время в Linux
- Настройка часового пояса
Как работает время в Linux (How Time Works on Linux)¶
Прежде чем управлять часовыми поясами в Linux, необходимо понять, как работает время в этой системе. Первое, что нужно усвоить: в системе Linux существуют два основных источника времени:
-
Аппаратные часы (Hardware clock) — эти часы работают независимо в любое время, даже когда система выключена. Аппаратные часы называют по-разному: часы реального времени (Real Time Clock, RTC) или часы BIOS/CMOS.
Совет
С помощью команды
hwclockв командной строке можно установить время аппаратных часов. -
Системное время (System time) — этот источник времени работает программно внутри самого ядра Linux. Он управляется прерыванием таймера ISA. Системное время измеряется как количество секунд, прошедших с 00:00:00 1 января 1970 года UTC.
Главное, что нужно помнить: аппаратные часы и системное время могут не совпадать. При управлении системой Linux нас больше интересует системное время, а не время, показываемое аппаратными часами. Роль аппаратных часов весьма проста: их задача — отсчитывать время, пока система выключена. При запуске операционной системы Linux системное время синхронизируется со временем аппаратных часов. После загрузки Linux использует только системное время, аппаратные часы игнорируются. При настройке аппаратных часов следует задать для них одно из следующих значений:
-
Всемирное координированное время (Universal Time Coordinated, UTC) — UTC является стандартом, которым мир регулирует время. UTC — это текущее среднее солнечное время в Королевской обсерватории в Гринвиче, Лондон, Великобритания. Поэтому UTC также называют среднегринвичским временем (Greenwich Mean Time, GMT). Местное время определяется прибавлением или вычитанием одного часа к UTC за каждый часовой пояс, отстоящий от UTC. Например, если местонахождение отстоит от Гринвича на семь часовых поясов, то местное время равно UTC–7. Следовательно, когда по местному времени 10:58, по UTC — 17:58. Если аппаратные часы установлены на UTC, а не на местное время, необходимо задать директиве
HWCLOCKв файле/etc/sysconfig/clockзначение-u. Система Linux автоматически рассчитает смещения летнего времени в соответствии с вашим местным часовым поясом.Примечание
Для систем Linux предпочтительно устанавливать аппаратные часы на UTC, а не на местное время.
-
Местное время (Local time) — в большинстве систем аппаратные часы по умолчанию установлены на местное время. В этом случае директива
HWCLOCKв файле/etc/sysconfig/clockбудет иметь значение--localtime.
Установка аппаратных часов на UTC является предпочтительным вариантом при работе с системами Linux. Использование UTC значительно упрощает вычисление разницы часовых поясов. Более того, если на системе Linux установить определённые приложения для совместной работы, может быть выдвинуто требование установить аппаратные часы на UTC, поскольку это упрощает согласование временны́х меток между большим числом компьютеров в разных часовых поясах.
Настройка часового пояса (Configuring the Time Zone)¶
В ходе начальной установки системы Linux вам будет предложено указать часовой пояс, в котором находится система. В некоторых дистрибутивах (например, Ubuntu) указанный часовой пояс сохраняется в файле /etc/timezone. Текущий часовой пояс системы можно просмотреть, выведя содержимое этого файла в командной строке с помощью команды cat. Пример:
В других дистрибутивах (например, openSUSE) эта информация хранится в файле /etc/sysconfig/clock. Директива TIMEZONE= в этом файле задаёт используемый файл зоны, как показано ниже:
Текущий часовой пояс можно также просмотреть, введя команду date в командной строке:
Если после установки потребуется изменить часовой пояс, воспользуйтесь командой tzselect или tzconfig в командной строке. В дистрибутивах на основе Debian используется команда tzconfig, тогда как в других дистрибутивах — openSUSE, Fedora и аналогичных — применяется команда tzselect. Эта команда должна выполняться от имени суперпользователя root. Пример:
openSUSE:~ # tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
Сначала команда tzselect выводит список континентов и океанов. Введите соответствующий номер для региона, в котором находится нужный часовой пояс. После этого отобразится список стран в данном регионе. Введите номер страны, в которой будет находиться система, а затем — номер соответствующего часового пояса. Будет предложено подтвердить изменение часового пояса, как показано в этом примере:
The following information has been given:
United States
Mountain Time
Therefore TZ='America/Denver' will be used.
Local time is now: Wed Feb 9 11:50:10 MST 2011.
Universal Time is now: Wed Feb 9 18:50:10 UTC 2011.
Is the above information OK?
1) Yes
2) No
#?
Если изменение верно, введите 1 для подтверждения. Обратите внимание: в приведённом примере tzselect переключает часовые пояса, устанавливая значение переменной окружения TZ. В действительности изменить часовой пояс из командной строки можно и без tzselect, установив значение переменной окружения TZ и экспортировав её. Это удобно в ситуациях, когда у вас нет пароля суперпользователя root или когда вы хотите использовать другой часовой пояс для своей учётной записи, не меняя часовой пояс других пользователей. Синтаксис: export TZ=time_zone. Список доступных часовых поясов можно найти в каталоге /usr/share/zoneinfo/, как показано ниже:
openSUSE:~ # ls /usr/share/zoneinfo/
Africa Canada Factory Iceland MST7MDT Portugal Zulu
America Chile GB Indian Mexico ROK iso3166.tab
Antarctica Cuba GB-Eire Iran Mideast Singapore posix
Arctic EET GMT Israel NZ Turkey posixrules
Asia EST GMT+0 Jamaica NZ-CHAT UCT right
Atlantic EST5EDT GMT-0 Japan Navajo US zone.tab
Australia Egypt GMT0 Kwajalein PRC UTC
Brazil Eire Greenwich Libya PST8PDT Universal
CET Etc HST MET Pacific W-SU
CST6CDT Europe Hongkong MST Poland WET
ws1:~ #
Имейте в виду, что это изменение не является постоянным. При перезагрузке системы изменение часового пояса будет потеряно. Чтобы изменение часового пояса было постоянным для вашей учётной записи, добавьте следующую строку в файл .profile в домашнем каталоге пользователя:
Изменить часовой пояс можно также с помощью файла /etc/localtime и файлов зон в каталоге /usr/share/zoneinfo, которые мы рассмотрели ранее. Для этого создайте символьную ссылку на соответствующий файл зоны в /usr/share/zoneinfo из /etc/localtime. Например, чтобы переключиться на часовой пояс горного стандартного времени США, введите ln -sf /usr/share/zoneinfo/MST /etc/localtime в командной строке.
Примечание
К распространённым кодировкам текста относятся: iso8859 (также называемая кодировкой Latin-9), разработанная для западноевропейских языков; ASCII, использующая схему кодирования символов на основе английского языка; и Unicode, разработанная для работы с наборами символов языков всего мира.