Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Настройка системы

Линукс, Часы и Время

Введение

В этом документе описано, как вы можете установить ваши часы в Линуксе, как установить временную зону (timezone) и другую связанную с этим информацию.

В вашем компьютере есть две разновидности часов: имеющие независимое питание и всегда запущенные (их называют по разному: ``аппаратные'' (``hardware''), ``BIOS'', или ``CMOS''-часы), и другие, которые определяются операционной системой, запущенной на вашем компьютере (``системные'' часы). Аппаратные часы в основном используются для установки системного времени в момент загрузки ОС, и с этого момента до момента перезагрузки ОС или выключения питания компьютера для определения времени будут использоваться системные часы.

В Линуксе вы имеете выбор: установить в аппаратных часах всемирное время (UTC/GMT) или локальное время (local time). Наилучший вариант - установить всемирное время (UTC), что позволит автоматически учитывать переход на зимнее/летнее время. Единственное неудобство от установки всемирного времени в аппаратных часах - это в случае использования на этом же компьютере другой ОС (в случае использования dual boot), которая считает, что аппаратные часы установленны в локальное время, поэтому время в этой систему будет неверным.

Установка временной зоны (timezone)

Временная зона под Линуксом устанавливается через символическую ссылку, из /etc/localtime на файл из дирректории /usr/lib/zoneinfo (или /usr/share/zoneinfo), чем указывается, в какой временной зоне вы находитесь. Например, я живу в Новгороде (Московский часовой пояс), я должен сделать ссылку /etc/localtime на файл /usr/lib/zoneinfo/Europe/Moscow. Для этого даем команду:

ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime

Замените your/zone на соответствующую вашему месту расположения зону, например Europe/Moscow или Australia/Perth. Чтобы узнать какие временные зоны доступны, посмотрите в дирректорию /usr/lib/zoneinfo (или /usr/share/zoneinfo).

Установка всемирного или локального времени

Когда линукс загружен, один из скриптов инициализации запускает программу /sbin/clock (или /sbin/hwclock в RedHat'e) чтобы установить системные часы в соответствии с аппаратными часами. clockсчитает, что аппаратные часы установленны на локальное время, чтобы указать что используется всемирное время используют ключ -u. Далее для RedHat Линукса надо в скрипте/etc/sysconfig/clock установить переменную ``UTC'' в значение ``UTC=true'' или ``UTC=false''. Для случая Debian'a это переменная ``GMT''в файле /etc/init.d/boot, а значения ее : ``GMT="-u" '' в случае использования всемирного времени и или ``GMT="" '' в случае использования локального времени

Установка системных часов

Для установки системных часов в Линуксе используется программа date. Для примера - чтобы установить текущее время (системное!) и дату на 31 июля, 23:16, наберите ``date 07312316'' (обратите внимание, что время дано в 24-часовой записи). Если вы хотите изменить год, то наберите ``date 073123161998''. Для установки секунд набирите ``date 07312316.30'' или ``date 073123161998.30''. Чтобы узнать системное время, запустите date без аргументов.

Установка аппаратных часов

Для установки аппаратных часов, установите сначала системное время, а потом уже аппаратное, используя программу ``/sbin/clock -w'' (или``/sbin/clock -wu'' в случае использования всемирного времени). Чтобы узнать аппаратное время, запустите clock без параметров. Если аппаратные часы установлены в локальное время, а вы хотите увидеть всемирное, наберите ``/sbin/clock -u''

В некоторых приложениях время показывается неверно

Если какое-то приложение (такое как date) показывает верное время, но остальные - нет, то вы наверно неправильно установили информацию о временной зоне. Чтобы исправить ситуацию, просто создайте правильную ссылку на нужную временную зону.

Итог

  • /etc/init.d/boot (/etc/sysconfig/clock) устанавливает локальное или всемирное время

  • Символическая ссылка /etc/localtime на /usr/lib/zoneinfo/... используется для установки временной зоны.

  • Запуск ``date MMDDhhmm'' для установки текущего системного времени

  • Запустите ``/sbin/clock -w [-u]'' для установки аппаратных часов

Небольшое замечание

Ядро Linux'а всегда хранит и вычисляет врямя как число секунд прошедших с полночи 1-го января 1970 года, в независимости от того, установлены ваши часы на локальное или всемирное время. Преобразование в локальное время производится в процессе запроса.

Поскольку колличество секунд с 1-го января 1970 года всемирного времени сохраняется как знаковое 32-битное целое (это справедливо для Linux/Intel систем), ваши часы перестанут работать где-то в 2038 году. Linux не имеет проблеммы 2000-го года, но имеет проблему 2038 года. К счастью, к тому времени все linux'ы будут запущены на 64-х разрядных системах. 64-х битное целое будет содержать наши часы приблизительно до 292271-миллионного года.

Обратите внимание на другие программы

  • rdate- получает текущее время на удаленной машине; может быть использована для установки системного времени.

  • xntpd- похожа на rdate, но она более аккуратна и вы должны иметь постоянное сетевое соединение. xntpdзапускается на продолжительный срок и следит за сетевыми задержками и "уходом" часов, для работы с ней используется программа (ntpdate), устанавливающая текущее время точно так же, как это делает rdate.

Дальнейшая информация

  • date(1)

  • hwclock(8)

  • /usr/doc/HOWTO/mini/Clock


Ругатся сюда. В начало Создан : Friday, 31-Jul-1998 14:14:08 MSD
Изменен : Thursday, 27-Aug-1998 17:17:00 MSD