Как узнать текущее время Linux
Иногда знание текущего времени на компьютере играет большую роль, например, при отслеживании выполнения тех или иных процессов. И далеко не всегда нужную информацию можно посмотреть через системный интерфейс Linux. Поэтому существуют различные команды для терминала.
В данной статье мы расскажем про то, как узнать текущее время Linux. Заодно упомянем тему часовых поясов и синхронизацию с серверами времени.
Текущее время Linux
В системе Linux есть три удобных утилиты для определения точного времени. Наиболее продвинутой из них можно назвать date. Но и остальные имеют свои особенности.
С помощью date
Чтобы получить общую информацию, выполните команду:

Сначала выводится дата (день-число-месяц-год), время в 12-часовом формате с пометками AM (до полудня) и PM (после полудня) и часовой пояс. Информацию можно вывести в мировом UTC-формате:

Форматирование задается после знака +. Первый символ после знака % интерпретируется как один из модификаторов. А остальные символы выводятся как обычный текст. Этим можно пользоваться:
date +’Какой сегодня день? Сегодня %e число %m месяца %Y года’

Еще один пример – вывод даты в кратком виде и времени в 24-часовом формате:

Ну и не совсем стандартный вариант – вывести, какой это по счету день в году, и сам год:
date +’Сегодня %j день %Y года’

данной статьей. В ней детально описан синтаксис, опции, форматирование вывода и конкретные примеры использования. А мы переходим к следующему способу.
2. С помощью hwclock
Вообще утилита hwclock используется для настройки даты и времени в системе Linux. Но еще она подходит для простого вывода этой информации. Запускать ее следует с правами супер-пользователя:

Обратите внимание на формат вывода времени. Он включает в себя еще и миллисекунды. И через дефис указывается часовой пояс. По умолчанию это UTC. Ну а для вывода локального времени нужно добавить к команде опцию —localtime:
sudo hwclock —localtime
3. С помощью timedatectl
Еще один вариант просмотра текущего времени – использование утилиты timedatectl. Достаточно ввести команду в терминале:

Помимо даты и времени, здесь есть следующие интересующие нас поля:
- Time zone – часовой пояс.
- System clock synchronized – синхронизация часов с сервером.
- NTP service – подключение к серверу точного времени.
Выводы
Каждый из упомянутых в статье способов Как узнать текущее время Linux имеет свои особенности. Для утилиты date можно детально настроить форматирование вывода. hwclock подходит для беглого просмотра информации, ведь в основном используется для настройки. А через timedatectl получится узнать еще и статус синхронизации часов.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How can I get the current date and time in the terminal and set a custom command in the terminal for it? [closed]
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 9 years ago .
I have to check the time in a Linux terminal.
What is the command for getting date and time in a Linux terminal?
Is there a way in which we can set a custom function?
![]()
2 Answers 2
The command is date
To customise the output there are a myriad of options available, see date —help for a list.
For example, date ‘+%A %W %Y %X’ gives Tuesday 34 2013 08:04:22 which is the name of the day of the week, the week number, the year and the time.
![]()
You can use date to get time and date of a day:
Also hwclock would do:
For customized output, you can either redirect the output of date to something like awk , or write your own program to do that.
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 в ваши аппаратные часы, выполните следующие шаги:
date command in Linux with examples
date command is used to display the system date and time. date command is also used to set date and time of the system. By default the date command displays the date in the time zone on which unix/linux operating system is configured.You must be the super-user (root) to change the date and time.
Syntax:
Options with Examples
1: date (no option): With no options, the date command displays the current date and time, including the abbreviated day name, abbreviated month name, day of the month, the time separated by colons, the time zone name, and the year.
Note: Here unix system is configured in pacific daylight time.
2: -u Option: Displays the time in GMT(Greenwich Mean Time)/UTC(Coordinated Universal Time )time zone.
3: –date or -d Option: Displays the given date string in the format of date. But this will not affect the system’s actual date and time value.Rather it uses the date and time given in the form of string.
Syntax:
4: Using –date option for displaying past dates:
- Date and time of 2 years ago.
- Date and time of 5 seconds ago.
- Date and time of previous day.
Date and time of 2 months ago.
Date and time of 10 days ago.
5: Using –date option for displaying future date:
Date and time of upcoming particular week day.
Date and time after two days.
Date and time of next day.
Date and time after 1 year on the current day.
6: -s or –set Option: To set the system date and time -s or –set option is used.
Syntax:
7: –file or -f Option: This is used to display the date string present at each line of file in the date and time format.This option is similar to –date option but the only difference is that in –date we can only give one date string but in a file we can give multiple date strings at each line.
Syntax:
8:-r Option: This is used to display the last modified timestamp of a datefile .