- Команда date в Linux
- Синтаксис команды date
- Примеры использования date
- Выводы
- Команда date в Linux
- Синтаксис
- Опции
- Параметры формата
- Использование команды date в Linux
- Текущее системное время и дата
- Заданное время и дата
- Установка или изменение даты
- Вывод прошлых дат
- Вывод будущих дат
- Переопределение часового пояса
- Использование date вместе с другими командами
- Выводы
Команда date в Linux
Главное свойство утилит GNU/Linux — делать что-то одно, но эффективно. Яркий пример — команда date Linux, работающая с датой и временем. С её помощью можно извлекать любую дату в разнообразном формате, в том числе и рассчитывать прошлое и будущее время. Привилегированные пользователи могут перезаписывать системное время, используя её.
Утилита предустановлена во всех дистрибутивах GNU/Linux. В этой статье будут рассмотрены возможности date и способы применения этой команды.
Синтаксис команды date
Программа может выполнятся от имени обычного пользователя. Стандартный синтаксис команды (квадратные скобки обозначают необязательное наличие):
date [ ОПЦИИ ] . [ +ФОРМАТ ]
Ниже представлена таблица с часто применяемыми опциями для date.
Опция | Длинный вариант | Значение |
---|---|---|
-d STRING | —date=STRING | Вывод даты по указанной строке (например ‘yesterday’, ‘tomorrow’, ‘last monday’). |
-I | —iso-8601[=FMT] | Вывод даты в формате ISO 8601. FMT по умолчанию содержит ‘date’. Также может содержать ‘hourse’, ‘minutes’, ‘seconds’, ‘ns’ для отображения соответствующих значений и часовой пояс относительно UTC рядом с датой. |
—rfc-3339=FMT | Вывод даты в формате RFC 3339. FMT по умолчанию содержит ‘date’. Также может содержать ‘seconds’ и ‘ns’ для отображения секунд или наносекунд. | |
-r FILE | —reference=FILE | Вывод даты последней модификации указанного файла в формате по умолчанию. |
-u | —utc | Вывод UTC-даты |
Аргумент ФОРМАТ отвечает за форматирование вывода даты. Для его указания необходимо поставить знак «+» и написать нужную маску. Наиболее популярные форматы:
Формат | Значение |
---|---|
%% | Знак процента |
%a | День недели текущей локали в короткой форме («Чтв») |
%A | День недели текущей локали в длинной форме («Четверг») |
%b | Месяц года текущей локали в короткой форме в родительном падеже («янв») |
%B | Месяц года текущей локали в длинной форме в родительном падеже («января») |
%c | Дата и время текущей локали без указания часового пояса |
%С | Первые две цифры текущего года |
%d | Числовой день месяца с ведущим нулём |
%D | Дата в формате %m/%d/%y |
%e | День месяца; аналог %_d |
%F | Дата в формате %Y-%m-%d |
%h | Аналог %b |
%H | Часы (00..23) |
%I | Часы (01..12) |
%j | День года (001..366) |
%m | Месяц (01..12) |
%M | Минуты (00..59) |
%n | Новая строка |
%q | Квартал года |
%S | Секунды (00..59) |
%t | Знак табуляции |
%T | Время в формате %H:%M:%S |
%u | Числовой день недели; 1 — понедельник |
%x | Дата в локальном формате |
%X | Время в локальном формате |
%Z | Аббревиатура временной зоны |
Примеры использования date
Введем команду без параметров.
Будет отображена текущая дата и время в соответствии с настройками локали системы.
Команда date без параметров по умолчанию применяет маску %a %b %d %X %Z. Поскольку все форматы должны быть переданы как один параметр (из-за принципа обработки данных командным интерпретатором Bash), пробелы между ними необходимо экранировать обратным слэшем (\) или взять в кавычки.
Особое внимание следует уделить параметру -d (—date). Его функциональность не слишком очевидна, но при этом наиболее обширна.
Пример 1. Вычисление даты по числу секунд, прошедших с 1 января 1970 года.
Пример 2. Вычисление даты и времени следующего понедельника при указании часового пояса Нью-Йорка в 03:00.
date —date=’TZ=»America/New_York» 03:00 next mon’
Обратите внимание: указывать название дня недели или месяца можно в любом регистре, в короткой или длинной форме. Параметры next и last обозначают следующий и прошедший, соответственно, ближайшие дни недели.
Пример 3. Если текущий день месяца — последний, сформировать отчет о занятости дискового пространства корневого и домашнего каталога в файл report.
#!/bin/bash
if [[ $(date —date=’next day’ +%d) = ’01’ ]]; then
df -h / /home > report
Такой скрипт можно использовать для автоматизации работы с помощью демона crontab или anacron.
Выводы
Команда date Linux является эффективным инструментом работы с датой и временем, с широкой возможностью их расчёта для прошедших или будущих показателей. Также она применяется в написании сценариев в командном интерпретаторе Bash.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Команда date в Linux
В Linux команда date отображает и устанавливает системную дату и время, позволяет выводить время в различных форматах и вычислять будущие и прошлые даты.
Синтаксис
Опции
-d, —date=СТРОКА Показать не текущее время, а время, описанное заданной СТРОКОЙ —debug Описывать разбираемую дату и предупреждать о сомнительном использовании в stderr -f, —file=ФАЙЛ Как —date для каждой строки из ФАЙЛА -I[ФОРМ_ВРЕМЕНИ], —iso-8601[=ФОРМ_ВРЕМЕНИ] Вывод даты/времени в формате ISO 8601. Только дату, если ФОРМ_ВРЕМЕНИ=»date»» (по умолчанию), «hours», «minutes», «seconds» или «ns» для получения даты и времени с нужной точностью. Пример: 2006-08-14T02:34:56-06:00 —resolution Вывести доступное разрешение временных меток Пример: 0.000000001 -R, —rfc-email Выводить дату и время в соответствии с RFC-2822. Пример: Mon, 14 Aug 2006 02:34:56 -0600 —rfc-3339=СПЕЦ Вывести дату/время в формате RFC 3339 СПЕЦ=»date», «seconds» или «ns» для получения даты и времени с указанной точностью. Пример: 2006-08-14 02:34:56-06:00 -r, —reference=ФАЙЛ Показать время последнего изменения ФАЙЛА -s, —set=СТРОКА Установить время, описанное СТРОКОЙ -u, —utc, —universal Показать или установить универсальное координированное время (UTC)
Параметры формата
Воспринимаются следующие последовательности:
%% Знак % %a Сокращённое название дня недели (напр., вск) согласно локали %A Полное название дня недели (напр., понедельник) согласно локали %b Сокращённое название месяца (напр., янв) согласно локали %B Полное название месяца (напр., январь) согласно локали %c Время и дата (напр., Чтв 3 Мар 23:05:25 2005) согласно локали %C Век; как %Y, но не указываются две последние цифры (напр., 20) %d День месяца (напр., 01) %D Дата; аналогично %m/%d/%y %e День месяца, дополненный пробелами; аналогично %_d %F Полная дата; эквивалентно %+4Y-%m-%d %g Последние две цифры года для номера недели ISO (см. %G) %G Год для номера недели ISO (см. %V); обычно бывает полезно только с %V %h То же, что и %b %H Час (00..23) %I Час (01..12) %j Номер дня в году (001..366) %k Час, дополняется пробелом ( 0..23); то же, что и %_H %l Час, дополняется пробелом ( 1..12); то же, что и %_I %m Месяц (01..12) %M Минуты (00..59) %n Новая строка %N Наносекунды (000000000..999999999) %p Эквивалент AM или PM согласно локали; пусто, если неизвестно %P Как %p, но строчными буквами %q Квартал года (1..4) %r Время согласно локали, 12-часовой формат (напр., 11:11:04 PM) %R Часы и минуты согласно локали, 24-часовой формат; аналог %H:%M %s Число секунд с начала эпохи (1970-01-01 00:00:00 UTC) %S Секунда (00..60) %t Табуляция %T Время, аналог %H:%M:%S %u День недели (1..7); 1 обозначает понедельник %U Номер недели в году, если первый день недели — воскресенье (00..53) %V Номер недели по ISO, если первый день недели — понедельник (01..52) %w День недели (0..6), 0 означает воскресенье %W Номер недели в году, если первый день недели — понедельник (00..53) %x Представление даты (напр., дд/мм/гг) согласно локали %X Представление времени (напр., 23:13:48) согласно локали %y Последние две цифры года (00..99) %Y Год %z +ччмм часового пояса (напр., -0400) %:z +чч:мм часового пояса (напр., -04:00) %::z +чч:мм:сс часового пояса (напр., -04:00:00) %. z Часовой пояс с достаточным количеством двоеточий (напр., -04, +05:30) %Z Буквенная аббревиатура часового пояса (напр., EDT)
По умолчанию команда date дополняет числовые поля нулями. После % могут идти следующие необязательные флаги:
— (дефис) не дополнять это поле _ (подчёркивание) дополнять пробелами 0 (нуль) дополнять нулями + дополнять нулями и помещать «+» перед будущими годами >4 цифр ^ использовать верхний регистр, если возможно # использовать противоположный регистр, если возможно
После любого из флагов идет необязательная ширина поля в виде десятичного числа, затем необязательный модификатор, один из следующих:
E Если возможно, использовать альтернативное представление для текущей локали O Если возможно, использовать альтернативные числовые символы локали
Использование команды date в Linux
Текущее системное время и дата
Для того чтобы показать текущее системное время и дату, введите команду date без опций:
oleg@mobile:~:$ date Вс 06 ноя 2022 13:38:12 EET oleg@mobile:~:$
В выходных данных отображены день недели, день месяца, месяц, год, текущее время и часовой пояс. По умолчанию команда date настроена на часовой пояс операционной системы.
Заданное время и дата
В данном случае используется опция -d :
oleg@mobile:~:$ date -d "2001-12-31 23:59:59"09:10:15" Пн 31 дек 2001 23:59:59 EET oleg@mobile:~:$
Эта команда конечно же не влияет на фактические значения даты и времени в системе и выводит лишь запрошенную дату и время.
Установка или изменение даты
Вы можете изменить системные часы вручную. Например, чтобы установить дату и время на 07:30 11 мая 1999 г., введите:
oleg@mobile:~:$ date --set="19991011 07:30"
При выполнении этой команды будьте осторожны, так как на многих дистрибутивах Linux системные часы синхронизируются с помощью служб ntp или systemd-timesyncd.
Вывод прошлых дат
Для отображения прошлых дат в Linux используйте опцию —date со следующими значениями: «tomorrow», «Friday», «last Friday», «next Friday», «next week» и подобными.
oleg@mobile:~:$ date --date="2 weeks ago" Вс 23 окт 2022 15:20:05 EEST oleg@mobile:~:$
oleg@mobile:~:$ date --date="yesterday" Сб 05 ноя 2022 14:21:45 EET oleg@mobile:~:$
oleg@mobile:~:$ date --date="3 hours ago" Вс 06 ноя 2022 11:22:33 EET oleg@mobile:~:$
Вывод будущих дат
oleg@mobile:~:$ date --date="3 day" Ср 09 ноя 2022 14:27:08 EET oleg@mobile:~:$
oleg@mobile:~:$ date --date="tomorrow" Пн 07 ноя 2022 14:25:57 EET oleg@mobile:~:$
Переопределение часового пояса
По умолчанию команда date использует часовой пояс, определенный в /etc/localtime . Для использования другого часового пояса установите переменную TZ в желаемый часовой пояс.
Можно, например, установить в системе нью-йоркское время:
oleg@mobile:~:$ TZ='America/New_York' date
Увидеть все доступные часовые пояса позволит следующая команда:
oleg@mobile:~:$ timedatectl list-timezones list-timezones Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare Africa/Johannesburg Africa/Juba Africa/Kampala Africa/Khartoum Africa/Kigali Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda Africa/Lubumbashi Africa/Lusaka Africa/Malabo lines 1-38
Использование date вместе с другими командами
Вы можете использовать команду date для создания имен файлов, содержащих текущее время и дату.
В Linux команда date с успехом используется в скриптах. Я, например, использую её для автоматического создания резервных копий баз данных.
Содержимое моего файла linuxcookbookru_dump.sh :
oleg@mobile:~/www/backuplinode:$ cat linuxcookbookru_dump.sh #!/bin/bash date=%% cd /home/mensh/www/backup && \ mysqldump --opt -umensh -pPASSWORD \ linuxcookbookru > linuxcookbookru_linode_`date '+%Y%m%d'`.sql && \ tar cjvf linuxcookbookru_linode_`date '+%Y%m%d'`.sql.bz2 linuxcookbookru_linode_`date '+%Y%m%d'`.sql && \ rm linuxcookbookru_linode_`date '+%Y%m%d'`.sql
Выводы
В этой статье я изложил основные приёмы использования в Linux команды date . Теперь вы наверняка понимаете насколько полезна эта команда.