В UNIX время имеет огромное значение: демоны вылязят для свершения тёмных злодеяний по crontab, в логах фиксируется время сообщений, а файловые системы хранят информацию о том, когда файл в последний раз обновлялся. Для поддержания времени есть в Linux есть команда date, и у неё есть множество других замечательных возможностей, о которых владельцы UNIX-систем могут и не догадываться. Итак...
Дата и время
Просто просмотреть время в Linux можно командой:
$ date
Чтв Авг 21 14:07:23 MSD 2008
Чтобы изменить время часов, нужно заделаться рутом и написать:
То есть в виде МесяцДеньЧасМинута, остальное [MMDDhhmm[[CC]YY][.ss]] по вкусу. Об это хорошо (и главное в самом верху) написано в мануале man date, однако остальное писалось, по всей видимости, роботами для роботов.$ date MMDDhhmm
Среди функций 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 будут восприниматься как ближайшие. Например, узнать дату ближайшей пятницы:
Тот же результат вы получите, если добавите ко дню недели слово this то есть date --date="this friday" +%F$ date --date="friday" +%F
2008-08-15
Прошедшие дни недели указываются при помощи ключевого слова 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 часы будут работать одинаково.
Ссылки
Пост основан на материалах ЛинСовета и конкретно на этом посте ув.тов. bliznezz.
Спасибо ув.тов. Minoru за напоминание про ncal.
19 комментариев: |высказаться!| RSS-лента дискуссии.|
дни недели укАЗЫваются
"название дней недели" - мне показалось странным. Может быть "название дня недели" или "названия дней недели"?
Среди функций date есть ТАКЖЕ
Спасибо за команду cal, очень удобная штука.
2008-й год в датах выглядит странно — это что, пост из прошлого? :) Обновил бы вывод, чтобы народ не пугать.
Помимо cal существует также ncal — он выводит «вертикальный» календарик.
Ну а теперь традиционный список моих придирок:
Среди функций date есть так же вычисление дат
Ну, это ты сам знаешь :)
укзаываются
Очепяточка…
ключевого слова last например
Так как ключевое слово this выше по тексту выделено курсивом, то и с last можно поступить так же.
За сим откланяюсь ;)
начиная с версии 0.47 в Inkscape входит специальное расширение для печати календаря, находится в разделе "Render".
Спасибо - никогда про --date не знал, а так просто и удобно ;)
Можно было бы ещё про часовые пояса написать...
Заходил по ссылке с мыслью:"Что же можно такого про date сказать?" А оказалось, что весьма полезно время провел за чтением)
Спасибо.
Установка даты руками? Это должен быть какой-то очень крайний случай... Для всего остального есть ntpdate и pool.ntp.org
2 diaword
А если есть proxy, то pool.ntp.org нет, по крайней мере у меня.
Если объясните как можно синхронизировать время из под прокси, буду очень благодарен.
@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
Такой футбол нам не надобен. Шёл бы ты, добрый молодец, со своею виагрою...
Ещё в команде cal очень полезен ключ -3, показывает текущий месяц, предыдущий и слудующий, часто им пользуюсь. Можно даже сказать, что им только и пользуюсь.
Все 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 выведет номера недель.
В Inkscape можно, конечно, вставить, но это не Юникс-вей :)
ncal 2009 | a2ps -r -M A4 -o /tmp/cal.ps --columns=1 -B --borders no
создаст /tmp/cal.ps, который можно сразу на печать
Спасибо за статтю, скопипастил (с линком и переводом на украинский язык)
@al31f комментирует...
Ещё в команде cal очень полезен ключ -3, показывает текущий месяц, предыдущий и слудующий
Да, это я упустил в посте, и совершенно зря. Добавил. И вообще расширил пост.
@Анонимный комментирует...
Если локаль русская, то конструкция
В общем, должно работать в обеих случаях.
@Анонимный комментирует...
На самом делом, cal в современных дистрибутивах -- это просто ссылка на ncal.
Занятно, не знал. Добавил в пост.
И еще: полезная опция -w выведет номера недель.
Это только для ncal, но согласен - добавить в пост стоит.
@amorua комментирует...
В Inkscape можно, конечно, вставить, но это не Юникс-вей :)
Да, но в Инькскейп можно изменить шрифты и прочие висюльки. Вариант с консолью зачётный :-)
@unix комментирует...
Спасибо за статтю, скопипастил (с линком и переводом на украинский язык)
На здоровье. Я смотрю, что мне и бекапы блога делать не надо - всё уже растащено по интернетам :-)
Да, пост дополнен, исправлен и существенно расширен. У меня появились две заметки про часовые пояса и UTC, и вместо того, чтобы городить ещё один баян, добавил в этот. Копипастеры могут обновить свистнутые версии постов :-)
И все равно не понятно, как и можно ли, через date поменять месяц, день и год? Все мои попытки приводят только к смене времени.
А что с датами ХIX века и того раньше?
Возможен ли вывод названий месяцев в не русском виде.
вместо 09 Июн 2014 14:21:02
надо 09 Jun 2014 14:20:53 ???
LC_TIME=en_US.UTF-8 date
Отправить комментарий