Как отображать дату и время в терминале Linux (и использовать их в сценариях Bash) –

Fake-hwclock

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

Установите пакет fake-hwclock-gitAUR, запустите и включите службу fake-hwclock.service.

Timedatectl для настройки времени в debian

В большинстве современных дистрибутивов с systemd служба синхронизации времени уже присутствует в дефолтной установке и реализуется через systemd-timesyncd. Эта служба призвана заменить ntpd. Со слов разработчиков, она легче и быстрее, чем ntpd, плюс интегрирована в systemd, поэтому для автоматической синхронизации времени рекомендуется использовать именно ее.

Тут важно понимать, что systemd-timesyncd не может работать в качестве сервера времени, который мы настроим ниже. Так что, если у вас одиночный сервер, вам вполне подойдет timesyncd. Если же вы хотите использовать свой сервер времени, то надо настраивать ntp.

Для начала, давайте проверим, что у нас настроено в качестве службы обновления времени.

# timedatectl

Синхронизация времени уже включена и работает через timesyncd. Посмотрим ее статус.

# timedatectl timesync-status Server: 195.3.254.2 (2.debian.pool.ntp.org)
Poll interval: 17min 4s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: C23ACA94 Precision: 2us (-19)
Root distance: 42.113ms (max: 5s) Offset: -8.977ms Delay: 63.598ms Jitter: 9.582937s Packet count: 19 Frequency: 7.550ppm

В принципе, больше ничего делать не нужно. Синхронизация времени через интернет уже настроена и работает. Время обновляется с сервера 2.debian.pool.ntp.org. Для надежности, можно убедиться, что служба работает, плюс, добавим ее сразу в автозагрузку, если ее там нет.

# systemctl status systemd-timesyncd
# systemctl enable systemd-timesyncd

Список серверов для синхронизации времени в timedatectl настраивается в конфигурационном файле /etc/systemd/timesyncd.conf.

Utc в microsoft windows

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

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

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformationRealTimeIsUniversal

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

reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetControlTimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

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

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001

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

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

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

# timedatectl set-timezone Europe/Moscow

Utc в ubuntu

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

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

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

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

Варианты отображения времени

% T: печатает время в формате ЧЧ: ММ: СС.% R: часы и минуты печатаются в формате ЧЧ: ММ без секунд в 24-часовом формате.% r: печатает время в соответствии с вашим языком, используя 12-часовой формат и индикатор до или после полудня.% X: печать времени в соответствии с вашим языком в 24-часовом формате. Якобы.

Обратите внимание, что во время тестирования эта опция вела себя точно так же, как% r, как показано ниже. На компьютере с Linux, настроенном для локали Великобритании и установленном на GMT, он печатал время, используя 24-часовые часы без индикатора AM или PM, как и ожидалось.

Варианты отображения года

% C: Печатает век без года. В 2022 году он напечатает 20.% y: выводит год в виде двух цифр. в 2022 году напечатает 19.% Y: вывод года в виде четырех цифр.

Варианты отображения даты

% D: печатает дату в формате мм / дд / гг.% F: печатает дату в формате гггг-мм-дд.% x: печатает дату в формате для вашего региона.

Варианты отображения дня

% a: печатает название дня, сокращенное до понедельника, вторника, среды и т. д.% A: печатает полное название дня, понедельник, вторник, среду и т. Д.% u: выводит номер дня недели, где понедельник = 1, вторник = 2, среда = 3 и т. д.% w: выводит номер дня недели, где воскресенье = 0, понедельник = 1, вторник = 2 и т. д.% d: печатает день месяца с нулем в начале (01, 02… 09), если требуется.% e: выводит день месяца с пробелом в начале (‘1’, ‘2’… ‘9’), если требуется. Обратите внимание, что апострофы не печатаются.% j: печатает день года с двумя ведущими нулями, если требуется.

Варианты отображения месяца

% b или% h: печатает название месяца, сокращенное до января, февраля, марта и т. д.% B: печатает полное название месяца, января, февраля, марта и т. Д.% m: печатает номер месяца с ведущим нулем, если требуется 01, 02, 03… 12.

Варианты отображения недели

% U: выводит номер недели в году, считая воскресенье первым днем ​​недели. Например, третья неделя года, двадцатая неделя года и т. Д.% V: выводит номер недели года по стандарту ISO, считая понедельник первым днем ​​недели.% W: номер недели в году, считая понедельник первым днем ​​недели.

Варианты отображения секунд

% s: выводит количество секунд с 1970-01-01 00:00:00, начало Эпоха Unix.% S: печатает секунды 01, 02, 03… 59 с нулем в начале, если требуется.% N: печатает наносекунды.

Варианты отображения часа

% H: печать часов 00, 01, 02… 23.% I: Печатает час в 12-часовом формате 00, 01, 02… 12 с начальным нулем, если требуется.

Еще два изящных трюка

Чтобы узнать время последней модификации файла, используйте параметр -r (ссылка). Обратите внимание, что здесь используется знак — (дефис) вместо знака% и не требуется знак . Попробуйте эту команду в своей домашней папке:

date -r .bashrc

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

TZ=GMT date %c

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

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

# hwclock --systohc

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

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

# timedatectl set-time "гггг-ММ-дд чч:мм:сс"

Например:

:/>  Установка и настройка Key Management Service (KMS) в корпоративной среде Windows Server 2008/Windows Vista - Про ИТ и не только

# timedatectl set-time "2022-05-26 11:13:54"

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

Использование даты в скриптах

Включение сценария оболочки Bash для печати времени и даты тривиально. Создайте текстовый файл со следующим содержимым и сохраните его как gd.sh.

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

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

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

Как отобразить дату и время

Вы, возможно, догадались, что команда отображает дату и время, используя командную строку Linux. Это довольно просто:

 дата 


По умолчанию вывод будет примерно таким:

 Ср 20 апреля 19:19:21 BST 2022 

Вы можете получить дату для отображения любого или всех следующих элементов:

  • % a – сокращенное название дня (т.е. понедельник, вторник, среда)
  • % A – полное имя дня (т.е. понедельник, вторник, среда)
  • % b или% h – сокращенное название месяца (т.е. январь, февраль, март)
  • % B – полное название месяца (январь, февраль, март)
  • % c – локализует дату и время (полная дата и время)
  • % C – короткий год (т.е. 14, 15, 16)
  • % d – день месяца (т.е. 01, 02, 03)
  • % D – так же, как M/D/Y (т.е. 20.04.16)
  • % e – день дополнения месяца (т. е. «1», «2»)
  • % F – полная дата, аналогично гггг-мм-дд
  • % H – час (00, 01, 02, 21, 22, 23)
  • % I – час (1,2,3,10,11,12)
  • % j – день года (то есть 243)
  • % k – добавленный час (то есть «1» становится «1»)
  • % l – подкачка часов (12 часов)
  • % m – номер месяца (1,2,3)
  • % M – минута (1,2,3,57,58,59)
  • % n – новая строка
  • % N – наносекунды
  • % p – AM или PM
  • % P – как% p, но в нижнем регистре (как ни странно)
  • % r – 12 часов в часах
  • % R – 24-часовая версия часа и минуты
  • % s – секунды с 1970-01-01 00:00:00
  • % S – второй (01,02,03, 57, 58, 59)
  • % t – вкладка
  • % T – время такое же, как% H:% M:% S
  • % u – день недели (1 – понедельник, 2 – вторник и т. д.)
  • % U – номер недели в году (при условии, что воскресенье является первым днем ​​недели)
  • % V – номер недели ISO с понедельником в качестве первого дня недели
  • % w – день недели (0 – воскресенье)
  • % W – номер недели в году с понедельником в качестве первого дня недели
  • % x – представление даты локали (31.12.2022)
  • % X – представление времени в локалях (14:44:44)
  • % y – последние две цифры года
  • % Y – год
  • % z – числовой часовой пояс (т.е. -0400)
  • %: z – числовой часовой пояс следующим образом (т.е. -04: 00)
  • % :: z – числовой часовой пояс следующим образом (т.е. -04: 00: 00)
  • % Z – буквенное сокращение часового пояса (GMT)
  • – – один дефис предотвращает заполнение нулями
  • _ – одиночные знаки подчеркивания с пробелами
  • 0 – колодки с нулями
  • ^ – используйте заглавные буквы, если это возможно
  • # – используйте противоположный случай, если это возможно

Это огромное количество опций, и мы подозреваем, что команда date является той, к которой большинство людей пытаются что-то добавить, когда они впервые хотят внести свой вклад в Linux и скомпилировать свою первую программу.


По сути, если вы хотите отобразить только время, вы можете использовать следующее:

 дата % T 

Это выведет 19:45:00. (то есть часы, минуты, затем секунды)

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

 дата % H:% M:% S 


Вы также можете прикрепить дату, используя приведенную выше команду:

 дата % d /% m /% Y% t% H:% M:% S 

По сути, вы можете использовать любую комбинацию вышеуказанных переключателей после символа плюс, чтобы вывести дату по своему желанию. Если вы хотите добавить пробелы, вы можете использовать кавычки вокруг даты.

 дата '% d /% m /% Y% H:% M:% S' 

Как показать дату rfc

Вы можете просмотреть дату RFC для вашего компьютера, используя следующую команду:

 date -r 


Это отображает дату в следующем формате:

 Ср, 20 апреля 2022 г. 19:56:52 0100 

Это полезно, поскольку показывает, что вы на час опережаете время по Гринвичу.

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

Начнем с самого простого – подключимся к серверу по ssh и посмотрим в консоли на текущее время. Сделать это можно с помощью простой команды date.

# date
Wed 21 Aug 2022 03:38:12 PM MSK
Wedдень недели, в данном случае среда
21 Augчисло и месяц, 21-е августа
2022год
03:38:12время в формате часы:минуты:секунды
PMобозначение времени суток, am или pm, до или после полудня
MSKчасовой пояс, он же timezone

Как вы видите, у нас установлен часовой пояс MSK, текущая дата и время в 12-ти часовом формате. Это не очень удобно. Если вам нужно посмотреть время в 24-х часовом формате, добавьте отображение %R к date.

# date %R
16:04

Подобные параметры удобно использовать в скриптах. Вот наиболее популярные комбинации просмотра текущего времени, которые использую я.

# date %Y-%m-%d
2022-08-21
# date %H-%M-%S
16-09-47
# date %Y-%m-%d_%H-%M-%S
2022-08-21_16-09-50

Также есть еще один способ получить полную информацию о времени сервера Debian – воспользоваться командой timedatectl.

# timedatectl status

Настройка времени в linux — xcat

Недавно был день перехода на зимнее время, но т.к. сам переход на него в нашей стране отменен, решил перепроверить подконтрольные мне серверы ну и заодно собрать «повседневные» команды, для работы с часами на UNIXах в одном месте.

Чтобы посмотреть системное время можно воспользоваться командой

date

или

hwclock

Для установки времени вручную из под рута выполняем команду:

date MMDDhhmmCCYY.ss

где: MM — месяц, DD — день месяца, hh — часы, mm — минуты, CCYY — 4 цифры года, ss — секунды.

Если в системе установлены пакеты ntp и ntpdate то можно взять время с ntp-сервера, для этого нужно выполнить команду

ntpdate [адрес NTP сервера]

Для смены часового пояса, вместо файла /etc/localtime создаем символическую ссылку на файл временной зоны (файлы временных зон хранятся в папке /usr/share/zoneinfo/)

ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime

либо просто переписываем содержимое файла /etc/localtime на содержимое файла нужной нам временной зоны:

cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Настройка сервера ntp в debian

Теперь настроим свой сервер времени, с которого другие наши сервера смогут синхронизировать свои часы. Сервер времени ntp использует отдельный одноименный протокол — Network Time Protocol, который для работы использует UDP порт 123. Перед установкой и настройкой службы времени убедитесь, что на фаерволе открыт этот порт.

:/>  Оптимальный размер диска под windows 10

Файл конфигурации ntp – /etc/ntp.conf. Привожу минимальную достаточную конфигурацию для своего сервера времени.

driftfile /var/lib/ntp/ntp.drift
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict 192.168.155.0 mask 255.255.255.0 nomodify notrap
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
logfile /var/log/ntp.log

Так же я обычно отключаю ipv6 протокол, если он не используется. Для этого в файле /etc/default/ntp заменяем параметр на

NTPD_OPTS='-4 -g'

После изменения конфигурации, перезапустим ntp и проверим статус службы.

# systemctl restart ntp
# systemctl status ntp

Теперь убедимся, что она запущена.

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

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

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

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

$ date && export TZ=":/usr/share/zoneinfo/Pacific/Fiji" && date
Вт 01 ноя 2022 16:34:51 MSK
Ср 02 ноя 2022 01:34:51 12

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

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

Некоторые полезные команды даты


Хотите узнать дату следующего понедельника? Попробуйте это:

 date -d "следующий понедельник" 

В момент написания возвращается «Пн 25 Апр 00:00:00 BST 2022»

-D в основном печатает дату в будущем.


Используя ту же команду, вы можете узнать, в какой день недели ваш день рождения или Рождество.

 дата - 25.12.2022 

Результат – Солнце 25 декабря.

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

Создайте скрипт NetworkManager dispatcher:

/etc/NetworkManager/dispatcher.d/09-timezone

Параметры для изменения других параметров

Эти модификаторы могут быть вставлены между% и буквой параметра других параметров, чтобы изменить их отображение. Например,% -S удалит ведущий ноль для однозначных значений секунд.

-: одиночный дефис предотвращает заполнение нулями однозначных значений._: одиночное подчеркивание добавляет ведущие пробелы для однозначных значений.0: предоставляет ведущие нули для однозначных значений.^: Если возможно, используются прописные буквы (не все параметры соответствуют этому модификатору).#:

Параметры отображения информации о часовом поясе

% z: печатает разницу во времени между вашим часовым поясом и UTC.%: z: печатает разницу во времени между вашим часовым поясом и временем в формате UTC с: между часами и минутами. Обратите внимание на: между знаком% и z.% :: z: выводит разницу во времени между вашим часовым поясом и временем в формате UTC с: между часами, минутами и секундами. Обратите внимание на :: между знаком% и z.% Z: печатает буквенное название часового пояса.

Параметры отображения минут

% M: выводит минуты 01, 02, 03… 59 с нулем в начале, если требуется.

Параметры, связанные с форматированием

% p: вывод индикатора AM или PM в верхнем регистре.% P: Печатает индикатор am или pm в нижнем регистре. Обратите внимание на причуду этих двух вариантов. Строчная буква p соответствует прописной, а заглавная — строчной.% t: печать табуляции.% n: печатает новую строку.

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

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

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

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

Примечание: Если время аппаратных часов устанавливается повторно менее чем через 24 часа после предыдущей установки, дрейф не пересчитывается, поскольку hwclock считает прошедший период времени слишком коротким для точного расчёта дрейфа.

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

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

Помогла статья? подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

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

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

$ timedatectl

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

# hwclock --show

Резюме


Стоит проверить страницу руководства для команды date с помощью следующей команды:

 свидание 

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

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

Синхронизация времени с помощью ntp и ntpdate

Если вам по какой-то причине не подходит описанная выше синхронизация, либо вам нужен свой сервер времени в сети, то timesyncd можно выключить.

# systemctl stop systemd-timesyncd
# systemctl disable systemd-timesyncd

Проверяем.

# timedatectl

Покажу теперь простую утилиту ntpdate, с помощью которой можно разово синхронизировать время, не автоматически. Для начала ее нужно установить в систему.

# apt install ntpdate

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

# ntpdate pool.ntp.org
ntpdate[5621]: adjust time server 85.21.78.91 offset -0.020548 sec

В данном случае pool.ntp.org – адрес сервера времени. Можно использовать любой. Все, время синхронизировано и никаких автоматических служб не запущено.

:/>  Ipadian premium 10.1 crack with serial number 2021 full latest

Если у вас ntpdate выдает ошибку — the NTP socket is in use, exiting, значит у вас уже установлена и запущена служба ntp, которая заняла udp порт 123, необходимый для работы ntpdate. Установкой и настройкой этой службы мы и займемся далее. Также, если ntpdate не работает, посмотрите материал, может это ваш случай.

Для обновления времени сервера можно воспользоваться службой ntp. Ее так же надо установить отдельно.

# apt install ntp

Это старая проверенная служба времени, которую использовали еще задолго до появления systemd и его юнитов. Запустим ее и добавим в автозагрузку.

# systemctl start ntp
# systemctl enable ntp

После запуска она сразу же автоматически синхронизирует время. Проверим статус службы ntp в Debian.

# systemctl status ntp

Синхронизация времени через ntp заработала сразу же. Дополнительная настройка не нужна, если вас не интересует свой сервер времени, который мы настроим ниже.

При этом, для проверки статуса службы времени ntp можно использовать утилиту ntpq. Посмотрим статус синхронизации.

# ntpq -p

Поясню значения каждого столбца.

remoteАдрес удаленного эталона времени, с которого была синхронизация
refidУказывает, откуда каждый эталон получает точное время. Это могут быть другие сервера времени, система GPS и другое
stStratum (уровень) это число от 1 до 16, которое указывает на точность эталона. 1- максимальная точность, 16 – сервер недоступен. Уровень вашего сервера будет равен уровню наименее точного удаленного эталона плюс 1.
pollИнтервал в секундах между опросами
reachВосьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с эталоном. Бит выставлен, если удаленный сервер ответил.
delayВремя задержки ответа на запрос о точном времени
offsetРазница между вашим и удаленным сервером
jitterДисперсия (Jitter) – это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Чем меньше значение дисперсии, тем лучше, поскольку позволяет точнее синхронизировать время.

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

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

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

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

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

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

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

$ timedatectl | grep local
RTC in local TZ: no

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

# timedatectl set-local-rtc 1

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

# timedatectl set-local-rtc 0

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

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

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

Чтобы избежать этого, systemd будет синхронизироваться назад, только если аппаратные часы установлены в UTC, и не будет информировать ядро о локальном часовом поясе. Как следствие, временные метки на файловой системе FAT, которые изменены через Linux, будут в UTC.

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

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

Цели статьи

  1. Показать, как смотреть и настраивать системное время в Debian.
  2. Рассказать, как управлять часовыми поясами.
  3. Настроить автоматическую синхронизацию времени через интернет.
  4. Показать настройку своего ntp сервера в информационной системе.

Часовой пояс

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

$ timedatectl status

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

$ timedatectl list-timezones

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

# timedatectl set-timezone Регион/Город

Например:

# timedatectl set-timezone Europe/Moscow

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

# ln -sf /usr/share/zoneinfo/Регион/Город /etc/localtime

Совет: Можно найти и выбрать нужный часовой пояс с помощью интерактивного помощника tzselect.

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