Как установить время в линукс
Перейти к содержимому

Как установить время в линукс

  • автор:

System time (Русский)

В операционной системе время (часы) определяется тремя понятиями: значением времени (будь то местное время, UTC или что-то другое), часовым поясом и информацией о переходе на летнее время (DST), если это применимо. Эта статья рассказывает, что это такое и как их читать и менять. В системах присутствуют двое часов: аппаратные часы и системные часы, которые также подробно описаны в этой статье.

Стандартное поведение большинства операционных систем таково:

  • При загрузке для системных часов устанавливается значение из аппаратных часов.
  • Поддерживается точное время системных часов; смотрите #Синхронизация времени.
  • При выключении для аппаратных часов устанавливается значение из системных часов.

Аппаратные часы

Аппаратные часы (они же часы реального времени (RTC) или часы CMOS) хранят следующие значения: год, месяц, день, час, минута и секунда. Только в прошивках UEFI 2016 года или новее есть возможность хранить часовой пояс, а также информацию о переходе на летнее время.

Просмотр времени из аппаратных часов

Изменение времени аппаратных часов по системным часам

Следующая команда устанавливает время в аппаратных часах, беря значение из системных часов. Кроме того, она обновляет файл /etc/adjtime или создаёт его, если он отсутствует. Смотрите раздел «The Adjtime File» в hwclock(8) для более подробной информации, а также раздел #Погрешность часов.

Системные часы

Системные часы (они же программные часы) отслеживают время, часовой пояс и информацию о переходе на летнее время, если применимо. В ядре Linux они представлены как количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Начальное значение системных часов вычисляется из аппаратных часов в зависимости от содержимого файла /etc/adjtime . После завершения загрузки системные часы работают независимо от аппаратных часов. Ядро Linux отслеживает системные часы путём подсчета прерываний таймера.

Просмотр времени

Для проверки текущего времени системных часов (представленных как в местном времени, так и в UTC), а также RTC (аппаратных часов):

Изменение времени системых часов

Установка местного времени для системых часов:

Установит 26 мая 2014 года, 11 часов 13 минут 54 секунды.

Стандарт времени

Есть два основных стандарта времени: местное (локальное) время (localtime) и Всемирное координированное время (Coordinated Universal Time, UTC). Местное время зависит от текущего часового пояса, а время UTC — это глобальное время, которое одинаково для всех и не зависит от часовых поясов. UTC иногда называют гринвичским временем (GMT), хотя это немного разные вещи.

Стандарт, который будет использоваться в аппаратных часах, выбирается операционной системой. По умолчанию Windows использует местное время, macOS использует UTC, а другие UNIX и UNIX-подобные системы используют разные стандарты. ОС, использующая стандарт UTC, обычно рассматривает аппаратные часы как UTC и вносит в них поправку для установки времени ОС при загрузке в соответствии с часовым поясом.

Если на машине установлено несколько операционных систем, все они будут получать текущее время от одних и тех же аппаратных часов: рекомендуется настроить их на использование UTC, чтобы избежать конфликтов. В противном случае, если аппаратные часы установлены на местное время, сразу несколько операционных систем могут попытаться скорректировать его, например, после перехода на летнее/зимнее время, что приведёт к избыточной коррекции; проблемы могут также возникнуть при перемещении между различными часовыми поясами и использовании одной из операционных систем для сброса системных/аппаратных часов.

Значение аппаратных часов можно прочитать и изменить с помощью команды timedatectl . Вы можете узнать текущий стандарт, который Arch использует для работы с аппаратными часами, с помощью следующей команды:

Переход на использование местного времени для аппаратных часов:

Переход на использование UTC для аппаратных часов:

Эти команды автоматически обновят аппаратные часы и файл /etc/adjtime , дополнительные действия не требуются.

Во время запуска ядра, в момент загрузки драйвера RTC, значение системных часов может быть установлено по аппаратным часам. Произойдет ли это, зависит от аппаратной платформы, версии ядра и опций сборки ядра. Если это происходит, то в этот момент последовательности загрузки время аппаратных часов принимается за UTC и значение /sys/class/rtc/rtcN/hctosys (N=0,1,2. ) будет установлено в 1.

Позже systemd снова обновляет системное время по аппаратным часам, опираясь на значения в /etc/adjtime . Следовательно, использование аппаратных часов с местным временем может привести к неожиданному поведению во время загрузки, например, системные часы могут перескочить назад по времени, что всегда является плохой идеей (это ещё не всё). Чтобы избежать этого, systemd будет синхронизироваться назад, только если аппаратные часы установлены в UTC, и не будет информировать ядро о локальном часовом поясе. Как следствие, временные метки на файловой системе FAT, которые изменены через Linux, будут в UTC.

  • Использование timedatectl требует активной шины D-Bus. Поэтому использование этой команды под chroot (например, во время установки) может оказаться невозможным. В таких случаях можно вернуться к команде hwclock или использовать systemd-nspawn вместо chroot.
  • Если файл /etc/adjtime отсутствует, systemd по умолчанию считает, что аппаратные часы используют UTC.

UTC в Microsoft Windows

При двойной загрузке с Windows рекомендуется настроить Windows на использование UTC, а не настраивать Linux на использование местного времени. (По умолчанию Windows использует местное время [1].)

Это делается простым изменением в реестре: откройте regedit и добавьте DWORD ключ со значением 1 здесь:

Это можно сделать одной командой в командной строке, запущенной от имени администратора:

Также можно создать *.reg файл и импортировать его в реестр двойным щелчком мыши:

Если Windows попросит обновить часы в связи с изменениями DST, позвольте ей это сделать. Часы останутся в UTC, как и ожидалось, скорректируется только отображаемое время.

После этого #Аппаратные часы и #Системные часы может понадобиться обновить.

Если у вас проблемы со смещением времени, попробуйте переустановить tzdata и заново установить часовой пояс:

Исторические примечания

В очень старых версиях Windows это всё не работает из-за их багов. Более конкретно,

  • В 64-битных версиях Windows 7 и старых сборках Windows 10 существовала ошибка, из-за которой требовалось значение QWORD со значением 1 вместо DWORD . Эта ошибка была исправлена в новых сборках, и теперь работает только DWORD .
  • До Vista SP2 существовала ошибка, которая сбрасывала часы на местное время после возвращения из ждущего или спящего режима.
  • В XP и более старых версиях есть ошибка, связанная с переходом на летнее время. Подробнее: [2]
  • Для еще более старых версий Windows лучше прочитать https://www.cl.cam.ac.uk/

Для этих операционных систем рекомендуется использовать местное время.

UTC в Ubuntu

Если Ubuntu на любом диске обнаруживает Windows в процессе установки, то для аппаратных часов она автоматически начинает использовать местное время. Очевидно, это сделано специально, чтобы позволить новым пользователям Linux опробовать Ubuntu на своих компьютерах с Windows без редактирования реестра.

Изменить это поведение можно так же, как описано выше.

Часовой пояс

Узнать текущий часовой пояс, установленный в системе:

Просмотр списка доступных часовых поясов:

Изменение часового пояса:

Эта команда создаст символическую ссылку /etc/localtime , которая ведёт на соответствующий файл с информацией о зоне в /usr/share/zoneinfo/ . Если вам нужно создать её вручную (например, внутри chroot, где timedatectl не работает), имейте в виду, что это должна быть именно символическая ссылка:

Смотрите timedatectl(1) и localtime(5) для более подробной информации.

Выбор на основе геолокации

Чтобы автоматически выбрать часовой пояс на основе информации об IP-адресе, можно использовать какой-нибудь API геолокации для получения часового пояса (нпример curl https://ipapi.co/timezone ) и передать его вывод в команду timedatectl set-timezone . Примеры бесплатных или частично бесплатных GeoIP API:

Обновление часового пояса после подключения к сети через NetworkManager

Также можно использовать tzupdate AUR для автоматического выбора часового пояса по IP-адресу. Сравнение наиболее популярных API IP-геолокации поможет выбрать подходящий вариант.

Погрешность часов

Нет ничего идеального. В том числе и часов. Время на любых часах хоть немного но отличается от реального. Одними из наиболее точных считаются атомные часы. Кварцевые часы, используемые в компьютерах, также не являются абсолютно точными, зато имеют относительно постоянную погрешность.

При установке аппаратных часов с помощью hwclock рассчитывается новое значение дрейфа в секундах в день. Значение дрейфа вычисляется с помощью разницы между новым установленным значением и значением аппаратных часов непосредственно перед установкой, с учётом значения предыдущего значения дрейфа и времени последней установки аппаратных часов. Новое значение дрейфа и время, когда часы были установлены, записываются в файл /etc/adjtime , перезаписывая предыдущие значения. Таким образом, аппаратные часы могут быть скорректированы с учётом дрейфа при выполнении команды hwclock —adjust ; это также происходит при выключении, но только если демон hwclock включен, поэтому в Arch-системах, использующих systemd, этого не происходит.

Если аппаратные часы продолжают терять или набирать время с большим шагом, возможно, что был записан некорректный дрейф (но это применимо только в том случае, если запущен демон hwclock). Это может произойти, если вы неправильно установили время аппаратных часов или ваш стандарт времени не совпадает со стандартом времени в Windows или macOS. Значение дрейфа можно сбросить, сначала удалив файл /etc/adjtime , а затем установив правильное время аппаратных и системных часов. Затем следует проверить правильность используемого стандарта времени.

Программные часы очень точны, но, как и большинство часов, не идеально точны и могут дрейфовать. Хотя и редко, системные часы могут потерять точность, если ядро пропускает прерывания. Существуют некоторые инструменты для повышения точности программных часов; смотрите #Синхронизация времени.

Синхронизация времени

Network Time Protocol (NTP) — это протокол для синхронизации часов компьютерных систем в сетях передачи данных с коммутацией пакетов и переменной задержкой. Ниже приведены реализации NTP, доступные для Arch Linux:

  • Chrony — Клиент и сервер, дружественный к роумингу и разработанный специально для систем, которые не находятся в сети постоянно.
  • ConnMan — Лёгкий сетевой менеджер с поддержкой NTP.
  • Network Time Protocol daemon — Эталонная реализация протокола, особенно рекомендуемая для использования на серверах времени. Она также может регулировать частоту прерываний и количество тиков в секунду для уменьшения дрейфа системных часов и будет вызывать повторную синхронизацию аппаратных часов каждые 11 минут.
  • ntpclient — Простой NTP-клиент с интерфейсом командной строки.
  • NTPsec — Форк NTPd, ориентированный на безопасность.
  • OpenNTPD — Является частью проекта OpenBSD и реализует как клиент, так и сервер.
  • sntp — Клиент SNTP, который поставляется вместе с NTPd. Он заменяет ntpdate и рекомендуется в несерверных средах.
  • systemd-timesyncd — Простой демон SNTP, который реализует только клиентскую часть, фокусируясь только на запросе времени с одного удалённого сервера. Он должен быть более чем подходящим для большинства установок.

Настройки для пользователя/сессии или временные настройки

В некоторых случаях может быть полезно изменить настройки времени, не затрагивая глобальные системные значения. Например, для тестирования приложений, полагающихся на время во время разработки, или для настройки системного часового пояса при удалённом входе на сервер из другой зоны.

Чтобы заставить приложение «видеть» дату/время, отличное от системного, можно воспользоваться утилитой faketime(1) (из пакета libfaketime ).

Если вы хотите, чтобы приложение «видело» часовой пояс, отличный от системного, установите переменную окружения TZ , например:

Это отличается от простой установки времени, поскольку, например, позволяет протестировать поведение программы с положительными или отрицательными значениями смещения UTC, или влияние изменений летнего/зимнего времени при разработке на системах с часовым поясом, в котором нет переходов на летнее/зимнее время.

Другим вариантом использования является установка разных часовых поясов для разных пользователей одной системы: это можно сделать, установив переменную TZ в конфигурационном файле оболочки; смотрите Переменные окружения#Установка переменных.

Советы и рекомендации

fake-hwclock

alarm-fake-hwclock разработан специально для систем без нормально работающих аппаратных часов. Он включает в себя службу systemd, которая при выключении сохраняет текущее время, а при следующем запуске восстанавливает сохранённое время, таким образом избегая странных ошибок путешествия во времени.

Решение проблем

Часы показывают значение, которое не является ни UTC, ни местным временем

Это может быть вызвано рядом причин. Например, если ваши аппаратные часы используют местное время, но timedatectl настроен на то, чтобы считать, что они используют UTC, в результате смещение вашего часового пояса относительно UTC будет применено дважды, что приведёт к неправильным значениям местного времени и UTC.

Чтобы заставить ваши часы показывать правильное время, а также записать правильный UTC в ваши аппаратные часы, выполните следующие шаги:

Установка времени в Linux

Дистрибутивы

Установка времени в Linux является очень простым. У вас есть несколько вариантов того, как установить дату, время и часовой пояс в окне Linux. Мы расскажем про самый удобный способ.

Думаю, вы уже догадались что речь идет о «Терминале«, который является максимально универсальным инструментом.

Как установить дату, время и часовой пояс в окне Linux/Unix мы сейчас вам расскажем.
Время Unix или время POSIX, которое является системой для описания точек во времени — это количество секунд, прошедших с полуночи UTC утром 1 января 1970 года.

Кстати, мы уже писали о том как можно поменять язык системы. Рекомендуем ознакомиться, может быть очень полезной информацией.

Установка времени в Linux

Количество прошедших секунд может быть получено этой командой в системах Linux / Unix:

Установка даты в Linux

Дата Linux может быть установлена ​​с использованием следующего синтаксиса:

yyyy — год, мм — месяц, а dd — день.

Например, мы можем установить дату до 22 июня 2090 года:

Установите время в Linux

Время Linux можно установить с помощью следующего синтаксиса:

hh — час, mm — minite и ss — второй.

Например, мы можем установить время до 12:28:

Установка даты и времени в Linux

Дата и время могут быть установлены командой даты одновременно:

Первый mm означает месяц, а второй mm — время.

Например, мы можем установить дату и время до 11:28 22 июня 2090 года:

Другой способ установить новую дату и время — использовать следующий синтаксис:

Способ установки даты и времени:

Установить часовой пояс Linux

Конфигурационный файл для часового пояса обычно используется / etc / localtime, который часто является символической ссылкой на локальное время файла или на правильный файл часового пояса в системе. Каталог часового пояса: / usr / share / zoneinfo, где вы можете найти список регионов часовых поясов. В некоторых дистрибутивах, таких как Fedora / RHEL / Cent OS, файлы зон используют формат / usr / share / zoneinfo / REGION / CITY.

Метод установки часового пояса Linux:

При необходимости обновлять информацию о часовом поясе

Найдите соответствующий часовой пояс из / etc / localtime и создайте для него символическую ссылку
Например, мы хотим установить часовой пояс в Гонконге:

# ln -sf /usr/share/zoneinfo/Asia/Hong_Kong /etc/localtime

Проверка изменения часового пояса
$ date
Вы можете получить такой вывод:

$ date
Вт Июн 22 12:33:10 HKT 2017

Некоторые связанные с этим утилиты

Вот некоторые связанные с ним утилиты времени и времени Linux.

Обновление текущего системного времени по rdate

# rdate -s time.nist.gov
Список доступных серверов времени, пожалуйста, отметьте NIST Internet Time Servers.

Установите аппаратные часы

У Fedora / RHEL / CentOS есть инструмент установки даты / времени
Вы можете использовать GUI-инструмент в дистрибутивах Red Hat:

и затем выберите запись в часовом поясе.

Выводы

Надеемся, что для вас установка времени в Linux была понятной и быстрой даже как и для новичка. Если у вас есть дополнительные вопросы по этой теме, то не стесняйтесь задавать их в форму комментариев. Мы обязательно поможем вам в вопросах касающихся этой темы и подскажем, что делать еще более подробно.

Также, не забывайте делится мнением о руководстве на своих страницах в Facebook, Google+, Twitter, ВКонтакте или Одноклассники. Мы будем очень признательным вам за это.

Linux: set date through command line

Gilles 'SO- stop being evil''s user avatar

Run that as root or under sudo . Changing only one of the year/month/day is more of a challenge and will involve repeating bits of the current date. There are also GUI date tools built in to the major desktop environments, usually accessed through the clock.

To change only part of the time, you can use command substitution in the date string:

will change the date, but keep the time. See man date for formatting details to construct other combinations: the individual components are %Y , %m , %d , %H , %M , and %S .

Michael Homer's user avatar

System time

You can use date to set the system date. The GNU implementation of date (as found on most non-embedded Linux-based systems) accepts many different formats to set the time, here a few examples:

set only the year:

set only the month:

set only the day:

set all together:

Hardware time

Now the system time is set, but you may want to sync it with the hardware clock:

Use —show to print the hardware time:

You can set the hardware clock to the current system time:

Or the system time to the hardware clock

chaos's user avatar

The command to to change the system date is date .

There are two ways to call the date command(in Linux):

The easiest way is to use date -s as it allows the use of simple relative dates

The date did not change because it was executed with a limited user $ . If you actually want the date changed, use root ( # ) or sudo:

So, changing any part of a relative date is as easy as naming it:

Absolute dates are a bit more complex as they need more detail:

Or, you can use the date command twice:

replace any of the % by a valid value and the date will be set (only as root).

direct

The second date call form is used to directly change the system date.

Will set the date to the 23th of November at 08h and 12min.

Try date as a limited user to see what it would do (without changing anything):

Or, if you actually want to change the date, as root:

Note that services like NTP or chrony will be affected. And, if restarted will reset the date back to the real one.

Настройка даты и времени в Linux

При работе в сети синхронизация времени и даты это важный фактор увеличивающий стабильность и безопасность работы всех систем.

В этой статье вы узнаете как настраивать дату и время вручную. И, что более важно — как синхронизировать их с ntp сервером.

Узнать текущее системное время

Узнать текущее системное время можно командой date

Узнать текущее время BIOS

Узнать текущее системное время BIOS можно командой hwclock

date и hwclock могут показывать совершенно разное время

Исправить текущее время

Сначала нужно задать время командой date

date MM DD hh mm CCYY.ss

Также можно вводить «date MMDDhhmmCCYY» без секунд, тогда секунды выставляются на ноль.

После выполнения date нужно внести новое установленное время в BIOS:

Теперь осталось только проверить сохранились ли изменения

Синхронизация с ntp

Проверьте установлен ли ntp командой

Если ntp не установлен выполните

sudo yum install ntp

Проверьте запускается ли ntpd автоматически командой

systemctl list-unit-files | grep ntpd.s

Если ntpd неактивен (disabled) выполните

systemctl start ntpd
systemctl enable ntpd

Проверить добавлен ли сервис ntp в зону public в firewall можно командой

sudo firewall-cmd —get-services | grep ntp

Если ещё не добавлен, то чтобы разрешить UDP траффик от ntp выполните

firewall-cmd —permanent —add-service=ntp
firewall-cmd —reload

Отредактируйте файл ntp.conf с настройками сервера

Найдите свою временную зону на сайте www.ntppool.org

Я нашёл зону Helsinki и добавляю строки

server 0.fi.pool.ntp.org server 1.fi.pool.ntp.org server 2.fi.pool.ntp.org server 3.fi.pool.ntp.org

Теперь нужно перезапустить ntpd

systemctl restart ntpd

Проверить откуда берётся время можно командой

remote refid st t when poll reach delay offset jitter ============================================================================== time.cloudflare 10.79.8.177 3 u 14 64 7 3.987 -0.366 0.016 37.228.129.2 193.66.253.94 2 u 16 64 7 5.301 -1.639 1.908 ivanova.ganneff 237.17.204.95 2 u 13 64 7 5.296 3.850 0.266 ntp23.kashra-se 192.168.100.15 2 u 12 64 5 32.935 -2.213 0.192

Выставить время BIOS по только что полученному времени можно командой

Заставить систему синхронизовать время с ntp

Можно следующей командой

ntpdate -u 0.fi.pool.ntp.org

Вместо 0.fi.pool.ntp.org поставьте нужный вам сервер

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *