- Команда date в Linux
- Синтаксис команды date
- Примеры использования date
- Выводы
- Linux дата время файла
- Формат ввода даты и времени
- Формат вывода даты и времени
- Примеры использования
- Получение текущих даты и времени
- Добавление текущей даты в имена создаваемых файлов
- Установка текущих даты и времени
- Использование утилиты на удаленных системах
- Write current date/time to a file using shell script
- 1 Answer 1
Команда 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.
Linux дата время файла
Команда date позволяет задействовать одноименную утилиту, которая используется для двух целей. Обычно она используется для получения текущих даты и времени при необходимости в заданном формате, но при этом она также позволяет устанавливать их.
Стандартный синтаксис команды выглядит следующим образом:
$ date [описание времени или формата вывода]
Формат ввода даты и времени
Для начала рассмотрим вопрос установки текущих даты и времени, так как данное действие выполняется достаточно просто (единственная сложность связана с запоминанием формата даты и времени). Вы можете самостоятельно выполнить команду man date для того, чтобы уточнить формат даты и времени, используемый в вашей системе. В большинстве случаев он является следующим:
Но все не так сложно, как кажется на первый взгляд. Параметры в квадратных скобках являются необязательными — вы можете как использовать их, так и отказаться от их использования. Каждая пара букв соответствует элементу записи даты или времени:
Элемент записи | Назначение |
MM | Месяц (от 01 до 12) |
DD | День (от 01 до 28, 29, 30 или 31 в зависимости от месяца) |
hh | Часы (от 00 до 24) |
mm | Минуты (от 00 до 59) |
YY | Две последние цифры года (от 00 до 99, не обязательно) |
CC | Век (от 00 до 99, используется вместе с предыдущим элементом, не обязательно) |
.ss | Секунды (от 00 до 59 с символом точки, не обязательно) |
Как утилита вычисляет век? В UNIX-подобных операционных системах время хранится в формате числа секунд, прошедших с 1 января 1970 года в часовом поясе GMT (также известном, как UTC). Из-за того, что с этой даты прошло достаточно много времени, а для хранения количества секунд в 32-битных системах используется 4-байтовое целочисленное значение, в 2038 году на этих системах должен произойти переход счетчика секунд через нулевое значение. Ввиду того, что подсчитывается лишь количество секунд, век попросту не принимается во внимание. Таким образом, на 32-битных системах значения года от 00 до 38 соответствуют 2000-м годам, а значения года от 70 до 99 — 1900 годам. Фактически, на 32-битных системах команда date не позволяет установить год, не входящий в приведенные выше диапазоны. В 64-битных системах все проще: для подсчета времени используется 8-байтовое целочисленное значение, поэтому имеется огромный запас по времени (292 миллиарда лет), доступен полный диапазон годов от 00 до 99, а век вычисляется обычным образом по количеству прошедших секунд.
Для установки текущих даты и времени необходимы права пользователя root, иначе вы получите аналогичное сообщение об ошибке:
date: невозможно установить дату: Операция не позволена
Формат вывода даты и времени
Команда date без параметров хороша в том случае, если вам нужно узнать текущие дату в время. Но функция вывода даты и времени в произвольном формате полезна при разработке сценариев командной оболочки. Иногда нужно использовать максимально краткую запись даты; иногда в сценарии нужно обрабатывать лишь время без даты; иногда дату и время приходится сравнивать с датой и временем из внешнего источника и это сравнение будет гораздо более простым в случае получения текущих даты и времени в том же формате, в котором передаются данные из внешнего источника.
Для форматирования текущих даты и времени в соответствии со своими предпочтениями пользователь должен передать утилите строку форматирования после символа +:
Строка форматирования состоит из параметров форматирования, приведенных в таблице ниже.
Параметр форматирования | Назначение | Пример вывода |
%a | Сокращенное название дня недели | Чт |
%A | Полное название дня недели | Четверг |
%b | Сокращенное название месяца | июн |
%B | Полное название месяца | Июнь |
%d | Номер дня недели | 08 |
%D | Текущая дата в формате ММ/ДД/ГГ | 06/08/17 |
%F | Текущая дата в формате ГГГГ/ММ/ДД | 2017-06-08 |
%H | Часы в 24-часовом формате в диапазоне от 00 до 23 | 18 |
%l | Часы в 12-часовом формате в диапазоне от 01 до 12 | 6 |
%j | Номер дня года в диапазоне от 001 до 366 | 159 |
%m | Номер месяца в диапазоне от 01 до 12 | 06 |
%M | Минуты в диапазоне от 00 до 59 | 24 |
%S | Секунды в диапазоне от 00 до 60 | 22 |
%N | Наносекунды в диапазоне от 000000000 до 999999999 | 335288238 |
%T | Время в формате ЧЧ:ММ:СС в 24-часовом формате | 18:24:22 |
%u | Номер дня недели в диапазоне от 1 до 7 | 4 |
%U | Номер недели в году в диапазоне от 00 до 53 | 23 |
%Y | Полный номер года | 2017 |
%Z | Обозначение часового пояса | MSK |
Примеры использования
Получение текущих даты и времени
Для получения текущих даты и времени в стандартном формате достаточно выполнить следующую команду:
Утилита выведет аналогичную информацию:
Для вывода даты и/или времени в пользовательском формате достаточно добавить символ + и строку форматирования. Например, для вывода даты и времени может использоваться команда:
В результате будет выведена следующая информация:
Добавление текущей даты в имена создаваемых файлов
Отличным примером использования команды date в сценариях является создание суффикса имени файла для автоматизированного создания нескольких файлов с аналогичными именами. Например, процесс создания создании резервных копий данных. Файл резервной копии данных создается с помощью утилиты tar и сохраняется на жестком диске большого, но не бесконечного объема. Локальная машина носит имя bugler, поэтому данное слово присутствует и в имени файла резервной копии. Файловая система с жесткого диска большого объема скопирована в директорию /bkup. Команда для создания резервных копий будет выглядеть следующим образом:
$ tar -zcf /bkup/bugler.backup.$(date +%a).tgz /
Она создает сжатый (благодаря параметру -z) файл архива всей файловой системы (благодаря символу / в конце команды) и сохраняет этот файл под именем /bkup/bugler.backup.Sat.tgz. В результате использования команды date при формировании имени файла, файл архива будет перезаписываться ровно через неделю, что позволит сэкономить дисковое пространство — оно будет просто повторно использоваться.
Примечание: конструкция $() позволяет использовать вывод дополнительной команды в качестве части основной команды. Альтернативным решением является использование обратных кавычек: . backup `date +%a`.tgz. При этом формат $() гораздо проще в использовании.
Установка текущих даты и времени
В том случае, если вы не будете вводить необязательные элементы записи даты и времени, утилита будет считать, что вы выбрали текущий год. Таким образом, в случае исполнения следующей команды:
системные часы будут переведены на 5 июня 2017 года (да, эта статья писалась именно в этот день). Теперь предположим, что нам нужно установить 2018 год. В этом случае команда примет следующий вид:
Использование утилиты на удаленных системах
Для сравнения дат на локальном и удаленном компьютере достаточно настроить вход в удаленную систему без пароля и выполнить команду:
Для установки локального времени на удаленном компьютере может использоваться следующая команда:
Write current date/time to a file using shell script
I am trying to use a shell script to write the current date and time to a file. Here is what I have so far echo «$(date)» >> //home/user/Desktop/Scripts/Date Logs/datelog.txt It will say it completed but nothing is printed to the file after it is run.
1 Answer 1
Use date >> //home/user/Desktop/Scripts/Date Logs/datelog.txt .
Like i tried in my system :-
date > /tmp/date.txt . And file contains Wed Apr 5 09:27:37 IST 2017 .
[Edit] There are difference between >>(appending to the file) and >(Create the new file)
Edit:- As suggested by chepner, you can directly redirect the o/p of date command to file using date >> /tmp/date.txt .
I got it to work for 2 tries but it was appending to new file created in the Scripts directory under the file name Date.txt, figured it was caused by the space in the Date Logs directory name, changed it still no go. Date.txt output Tue Apr 4 22:35:29 CDT 2017 Logs/datelog.txt Tue Apr 4 22:41:16 CDT 2017 Logs/datelog.txt date Logs/datelog.txt date Logs/datelog.txt datelog.txt output (AfterChangingDirectoryName) date date date date My exact code at the moment getting me the output in datelog.txt file. ‘echo ‘date’ >> //home/coblere/Desktop/Scripts/DateLogs/datelog.txt’
i see in some of the file date is coming, note you need to use the « symbol to enclose the date command. not the ». first one is called back-tick and its on the same key in mac where ~ symbol is present.
Ahhhh! I mistook that simple for the simple single quote Like so ‘date’ not date now it works like a charm! Thanks for you help!