Дата и время в Linux

В UNIX время имеет огромное значение: демоны вылязят для свершения тёмных злодеяний по crontab, в логах фиксируется время сообщений, а файловые системы хранят информацию о том, когда файл в последний раз обновлялся. Для поддержания времени есть в Linux есть команда date, и у неё есть множество других замечательных возможностей, о которых владельцы UNIX-систем могут и не догадываться. Итак...


Дата и время
Просто просмотреть время в Linux можно командой:

$ date

Чтв Авг 21 14:07:23 MSD 2008

Чтобы изменить время часов, нужно заделаться рутом и написать:
$ date MMDDhhmm
То есть в виде МесяцДеньЧасМинута, остальное [MMDDhhmm[[CC]YY][.ss]] по вкусу. Об это хорошо (и главное в самом верху) написано в мануале man date, однако остальное писалось, по всей видимости, роботами для роботов.

Среди функций date есть также вычисление дат. Например, вы хотите узнать, какое число было вчера:
$ date --date="yesterday" +%F
или
$ date --date="1 days ago" +%F

2008
-08-13
Или, скажем, какое число будет в воскресенье через две недели:
$ date --date="sunday next 2 week"

Sun Aug 31 01:00:00 EEST 2008

Если специально не оговаривать срок, то названия дней недели командой date будут восприниматься как ближайшие. Например, узнать дату ближайшей пятницы:

$ date --date="friday" +%F

2008-08-15
Тот же результат вы получите, если добавите ко дню недели слово this то есть date --date="this friday" +%F

Прошедшие дни недели указываются при помощи ключевого слова last например, какое число было в прошлую пятницу:
$ date --date="last friday" +%F

2008-08-08

Думаю, что это хороший повод ещё разок за рюмкой чая почитать man date здесь (на русском).


Консольный календарь в Linux
А ещё можно смотреть не просто на даты, а на календарик в консоли - для этого есть замечательная команда cal - без параметров она выдаст календарь на текущий месяц:
Июль 2009
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Если же вам нужен календарь на год:
$ cal 2009
получим календарь на 2009 год. Календарь на месяц можно приготовить так:
$ cal 02 2009
выдаст календарь на февраль 2009 года. Помимо cal существует также ncal — Если же нужен «вертикальный» календарик, вроде

Февраль 2010
Пн 1 8 15 22
Вт 2 9 16 23
Ср 3 10 17 24
Чт 4 11 18 25
Пт 5 12 19 26
Сб 6 13 20 27
Вс 7 14 21 28

это можно сделать с помощью команды ncal. Хотя на самом деле, cal в современных дистрибутивах - просто ссылка на ncal, который смотрит как его вызвали и решает, симулировать ли ему поведение cal.

Ещё у команде cal очень полезен ключ -3, показывает текущий месяц, предыдущий и слудующий:
$ cal -3
и получаем:

Февраль 2012 Март 2012 Апрель 2012
Пн Вт Ср Чт Пт Сб Вс Пн Вт Ср Чт Пт Сб Вс Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 1 2 3 4 1
6 7 8 9 10 11 12 5 6 7 8 9 10 11 2 3 4 5 6 7 8
13 14 15 16 17 18 19 12 13 14 15 16 17 18 9 10 11 12 13 14 15
20 21 22 23 24 25 26 19 20 21 22 23 24 25 16 17 18 19 20 21 22
27 28 29 26 27 28 29 30 31 23 24 25 26 27 28 29
30

Вызвав ncal с полезной опцией -w:
$ ncal -w
получим календарик с номерами недель:

$ ncal -w 02 2009
Февраль 2009
Пн 2 9 16 23
Вт 3 10 17 24
Ср 4 11 18 25
Чт 5 12 19 26
Пт 6 13 20 27
Сб 7 14 21 28
Вс 1 8 15 22
5 6 7 8 9

Кстати, этот вывод очень хорошо вставляется в Inkscape и далее можно быстро набросать простой календарик для ежедневника.


Часовые пояса в Linux
Если вы куда-то далеко переезжаете, то потребуется на ноутбуках менять часовые пояса. Тут нас выручит утилита tzselect. Для этого можно использовать утилиты tzselect (выбрать часовой пояс временно) и tzconfig (поставить часовой пояс постоянно). Например, быстренько посмотреть, сколько времени сейчас на другом конце света можно так:
dot:/home/dot# tzconfig
WARNING: the tzconfig command is deprecated, please use:
dpkg-reconfigure tzdata
dot:/home/dot
Чтобы не пришлось делать это каждый раз, конфигурируем наши часовые пояса с помощью:
# dpkg-reconfigure tzdata

Current default timezone: 'Australia/Sydney'
Local time is now: Wed Feb 24 09:08:35 EST 2010.
Universal Time is now: Tue Feb 23 22:08:35 UTC 2010

Всё, теперь будет установлено Австралийское время.


Часы в Windows и Linux при двойной загрузке
Если у вас на одном компьютере Windows и Linux, то после загрузки Windows часы в Linux будут идти неправильно. Дело в том, что Linux устанавливает часы по GMT, и не важно, в каком часовом поясе (time zone) вы живёте. Далее, в зависимости от часового пояса, время добавляется или отнимается, чтобы получилось правильное время. Это стандарт, и Linux его соблюдает. Продукция Майкрософт никогда не славилась соблюдением стандартов, и это большая проблема Майкрософт: Windows при загрузке устанавливает часы иначе.

Логичным шагом было бы исправть это в Windows, однако это проще сделать в Linux. Для этого редактируем файл:
sudo vim /etc/default/rcS
и исправляем параметр с
UTC=yes
на
UTC=no
Сохраняем изменения и выходим. Теперь в Linux и Windows часы будут работать одинаково.



Ссылки
Пост основан на материалах ЛинСовета и конкретно на этом посте ув.тов.

19 комментариев: |высказаться!| RSS-лента дискуссии.|
triklozoid комментирует...

дни недели укАЗЫваются
"название дней недели" - мне показалось странным. Может быть "название дня недели" или "названия дней недели"?
Среди функций date есть ТАКЖЕ

Спасибо за команду cal, очень удобная штука.

Minoru комментирует...

2008-й год в датах выглядит странно — это что, пост из прошлого? :) Обновил бы вывод, чтобы народ не пугать.

Помимо cal существует также ncal — он выводит «вертикальный» календарик.

Ну а теперь традиционный список моих придирок:

Среди функций date есть так же вычисление дат
Ну, это ты сам знаешь :)

укзаываются
Очепяточка…

ключевого слова last например
Так как ключевое слово this выше по тексту выделено курсивом, то и с last можно поступить так же.

За сим откланяюсь ;)

bappoy комментирует...

начиная с версии 0.47 в Inkscape входит специальное расширение для печати календаря, находится в разделе "Render".

lizardie комментирует...

Спасибо - никогда про --date не знал, а так просто и удобно ;)
Можно было бы ещё про часовые пояса написать...

su6s комментирует...

Заходил по ссылке с мыслью:"Что же можно такого про date сказать?" А оказалось, что весьма полезно время провел за чтением)
Спасибо.

diaword комментирует...

Установка даты руками? Это должен быть какой-то очень крайний случай... Для всего остального есть ntpdate и pool.ntp.org

Maxim G. Ivanov комментирует...

2 diaword
А если есть proxy, то pool.ntp.org нет, по крайней мере у меня.
Если объясните как можно синхронизировать время из под прокси, буду очень благодарен.

virens комментирует...

@triklozoid, 01.02.2010 2:06:00
Прибил тараканов. Спасибо!

Среди функций date есть ТАКЖЕ
Вы таки меня доконаете с этим так же и я, паче чаяния, всётаки сяду его учить :-)

Ну прогулял я это правило.

Спасибо за команду cal, очень удобная штука.
Одна из моих любимых команд.

@Minoru, 01.02.2010 12:28:00
Ну всё, щас начнётся орфографический армагедон :-)

2008-й год в датах выглядит странно — это что, пост из прошлого?
Нет, просто бородатый пост очень. Дольше держать это гармонь не могу, пущай поиграет :-)

Помимо cal существует также ncal — он выводит «вертикальный» календарик.
Забыл вставить в текст - спасибо!

Ну а теперь традиционный список моих придирок
Не придирок, а ряд ценных указаний и конструктивных замечаний, улучшающих качество и читабельность текста.

Поправил. Спасибо, Саша!

@bappoy, 01.02.2010 13:25:00
начиная с версии 0.47 в Inkscape входит специальное расширение
Так ведь cal есть.

@lizardie, 01.02.2010 13:52:00
Спасибо - никогда про --date не знал, а так просто и удобно ;)
Вот через такие ключи программ и постигаешь мощью юниксвея.

Можно было бы ещё про часовые пояса написать...
Их на территории отдельно взятой страны чудес, говорят, собираются по решению Партии сократить или вообще отменить. Так что пост может сильно устареть.

@su6s, 01.02.2010 22:58:00
Заходил по ссылке с мыслью:"Что же можно такого про date сказать?"
А старый, унылый и занудный шарманщик Stradivirens подберёт, бывает, рваный баян и таки выдаст на нём деревенский брейкданс. Выходит свежо, смачно и все доярки довольны :-)

А оказалось, что весьма полезно время провел за чтением
Ваш день очень важен для нас. Заходите за гармошками в нашу околицу - будем рады видеть вас снова! :-)

@diaword, 02.02.2010 14:44:00
Установка даты руками? Это должен быть какой-то очень крайний случай
Это дзен. Или сервер.

Для всего остального есть ntpdate
Что-то ЛОРом повеяло с его легендарным кличем "оно не надобно" от маститых анонимных старцев, познавших жизть горькую.

@Boerner0222
Такой футбол нам не надобен. Шёл бы ты, добрый молодец, со своею виагрою...

al31f комментирует...

Ещё в команде cal очень полезен ключ -3, показывает текущий месяц, предыдущий и слудующий, часто им пользуюсь. Можно даже сказать, что им только и пользуюсь.

alex комментирует...

Все super !!!!!

Анонимный комментирует...

Если локаль русская, то конструкция:
$ date --date="sunday next 2 week"
Sun Aug 31 01:00:00 EEST 2008
принимает вид:
$ date --date="Вск next 7 week"
Вск Фев 14 00:00:00 MSK 201

Анонимный комментирует...

На самом делом, cal в современных дистрибутивах -- это просто ссылка на ncal. ncal смотрит как его вызвали и решает, симулировать ли ему поведение cal.

И еще: полезная опция -w выведет номера недель.

amorua комментирует...

В Inkscape можно, конечно, вставить, но это не Юникс-вей :)

ncal 2009 | a2ps -r -M A4 -o /tmp/cal.ps --columns=1 -B --borders no

создаст /tmp/cal.ps, который можно сразу на печать

unix комментирует...

Спасибо за статтю, скопипастил (с линком и переводом на украинский язык)

virens комментирует...

@al31f комментирует...
Ещё в команде cal очень полезен ключ -3, показывает текущий месяц, предыдущий и слудующий
Да, это я упустил в посте, и совершенно зря. Добавил. И вообще расширил пост.

@Анонимный комментирует...
Если локаль русская, то конструкция
В общем, должно работать в обеих случаях.

@Анонимный комментирует...
На самом делом, cal в современных дистрибутивах -- это просто ссылка на ncal.
Занятно, не знал. Добавил в пост.

И еще: полезная опция -w выведет номера недель.
Это только для ncal, но согласен - добавить в пост стоит.


@amorua комментирует...
В Inkscape можно, конечно, вставить, но это не Юникс-вей :)
Да, но в Инькскейп можно изменить шрифты и прочие висюльки. Вариант с консолью зачётный :-)

@unix комментирует...
Спасибо за статтю, скопипастил (с линком и переводом на украинский язык)
На здоровье. Я смотрю, что мне и бекапы блога делать не надо - всё уже растащено по интернетам :-)

Да, пост дополнен, исправлен и существенно расширен. У меня появились две заметки про часовые пояса и UTC, и вместо того, чтобы городить ещё один баян, добавил в этот. Копипастеры могут обновить свистнутые версии постов :-)

Анонимный комментирует...

И все равно не понятно, как и можно ли, через date поменять месяц, день и год? Все мои попытки приводят только к смене времени.

alural комментирует...

А что с датами ХIX века и того раньше?

Сергей Кузнецов комментирует...

Возможен ли вывод названий месяцев в не русском виде.
вместо 09 Июн 2014 14:21:02
надо 09 Jun 2014 14:20:53 ???

Сергей Кузнецов комментирует...

LC_TIME=en_US.UTF-8 date

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.