Команда 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

Будет отображена текущая дата и время в соответствии с настройками локали системы.

Команда date без параметров по умолчанию применяет маску %a %b %d %X %Z. Поскольку все форматы должны быть переданы как один параметр (из-за принципа обработки данных командным интерпретатором Bash), пробелы между ними необходимо экранировать обратным слэшем () или взять в кавычки.

Особое внимание следует уделить параметру -d (—date). Его функциональность не слишком очевидна, но при этом наиболее обширна.

Пример 1. Вычисление даты по числу секунд, прошедших с 1 января 1970 года.

date --date='@1234567890'

Пример 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.

Источник

Понравилась статья? Поделиться с друзьями: