Вики / Базовые команды
date (дата и время в shell)
Форматирование дат, метки времени для файлов и логов, арифметика дат.
date выводит и форматирует дату/время. В скриптах (bash-scripting) — для меток
в именах файлов бэкапов и логов. (Системное время и таймзону настраивает
timedatectl.)
date # текущая дата/время (в локальной зоне)
date -u # в UTC
date +%Y-%m-%d # 2026-06-30 (по формату)
TZ='America/New_York' date # показать в другой таймзоне разово
date +%F # 2026-06-30 (=%Y-%m-%d)
date +%T # 14:30:05 (=%H:%M:%S)
date +%Y%m%d-%H%M%S # 20260630-143005 (для имён файлов)
date +%s # Unix timestamp (секунды с 1970)
date -d @1700000000 # timestamp → человекочитаемо
date -Iseconds # ISO 8601: 2026-06-30T14:30:05+03:00
date -R # RFC 5322 (для почты/HTTP)
date '+%A, %d %B %Y' # день недели и месяц словами (по локали, см. locale)
Спецификаторы: %Y/%m/%d год/месяц/день, %H:%M:%S время, %s epoch,
%F/%T дата/время, %j день года, %A/%B день недели/месяц словами, %z смещение.
# имя бэкапа с датой
tar czf "backup-$(date +%F).tar.gz" /etc # %F = %Y-%m-%d
# относительные даты (-d)
date -d "yesterday" +%F
date -d "now + 2 hours" +%T
date -d "2026-01-01 + 30 days" +%F
date -d "last monday" +%F
# разница: через timestamp'ы
echo $(( ($(date -d "2026-07-01" +%s) - $(date +%s)) / 86400 )) # дней до даты
# выставить системное время вручную (обычно не нужно — есть NTP):
sudo date -s "2026-06-30 14:00:00" # лучше через timedatectl
В имени файла оказались пробелы/двоеточия
date по умолчанию печатает с пробелами/: (плохо для имён). Используй формат:
date +%Y%m%d-%H%M%S или %F.
Время не то / не та зона
date берёт системную зону. Проверь/смени через timedatectl; для UTC — date -u;
разово в другой зоне — TZ='Europe/London' date. Сбитые часы — NTP в timedatectl.
Месяц/день словами на английском, а нужен русский
Зависит от локали (LC_TIME). Установи нужную локаль (см. locale):
LC_TIME=ru_RU.UTF-8 date '+%A %d %B'.
Нужна дата в логах скрипта
printf '%s %s\n' "$(date -Iseconds)" "сообщение" или используй журнал systemd
(journalctl сам ставит таймстампы).
date +%F # 2026-06-30 (=%Y-%m-%d)
date +%Y%m%d-%H%M%S # метка для имён файлов
date +%s ; date -d @TS # epoch ↔ человекочитаемо
date -d "yesterday" +%F ; date -d "now + 1 hour" +%T
TZ='UTC' date ; date -Iseconds # другая зона / ISO 8601
tar czf "bk-$(date +%F).tgz" /etc # дата в имени бэкапа
См. также
- Базовые команды с файлами — Базовые команды
- Bash-скрипты (основы) — Базовые команды
- Время, часовой пояс и NTP — Службы и systemd