Как изменить системную дату в Linux?
Я хочу измениться:
- Только год
- Только месяц
- Только дата
- Любая комбинация выше трех
sudo ntpd -gq
чтобы система автоматически обновлялась с помощью службы ntp.
Как изменить системную дату в Linux?
Я хочу измениться:
sudo ntpd -gq
чтобы система автоматически обновлялась с помощью службы ntp.
Ответы:
Используйте date -s
:
date -s '2014-12-25 12:34:56'
Запустите это как root или под sudo
. Изменение только одного из года / месяца / дня является более сложной задачей и будет включать повторяющиеся биты текущей даты. Существуют также инструменты даты с графическим интерфейсом, встроенные в основные среды рабочего стола, доступ к которым обычно осуществляется через часы.
Чтобы изменить только часть времени, вы можете использовать подстановку команд в строке даты:
date -s "2014-12-25 $(date +%H:%M:%S)"
изменит дату, но сохраню время. См man date
форматирования детали для построения других комбинаций: отдельные компоненты %Y
, %m
, %d
, %H
, %M
, и %S
.
date -s "2014-12-25 $(date +%H:%M:%S)"
чтобы изменить дату и повторно использовать текущее время, хотя.
date: cannot set date: Invalid argument
date -s 2018-01-01
. Кто-то также поделился этим в ответе: superuser.com/questions/870068/…
Системное время
Вы можете использовать date
для установки системной даты. Реализация GNU date
(как встречается в большинстве не встроенных систем на основе Linux) принимает множество различных форматов для установки времени, вот несколько примеров:
установить только год:
date -s 'next year'
date -s 'last year'
установить только месяц:
date -s 'last month'
date -s 'next month'
установить только день:
date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
установить все вместе:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Аппаратное время
Теперь системное время установлено, но вы можете синхронизировать его с аппаратными часами:
Используйте --show
для печати аппаратного времени:
hwclock --show
Вы можете установить аппаратные часы на текущее системное время:
hwclock --systohc
Или системное время на аппаратные часы
hwclock --hctosys
Вы меняете дату с помощью date
команды. Тем не менее, команда ожидает полную дату в качестве аргумента:
# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
Чтобы изменить часть даты, выведите текущую дату с частью даты, которую вы хотите изменить, в виде строки, а все остальные - в качестве переменных форматирования даты. Затем передайте это date -s
команде, чтобы установить это:
# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
меняет месяц на 12-й месяц - декабрь.
Форматы даты:
%Y
- год%m
- месяц%d
- день%H
- час%M
- минутаДля таких как я, использующих ESXI 5.1, вот что мне ответила система
~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'
Вместо этого мне пришлось использовать конкретную команду ESX:
esxcli system time set -y 2016 -M 03 -d 23 -H 10 -m 05 -s 00
Команда для изменения системной даты есть date
.
Существует два способа вызова команды date (в Linux):
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Самый простой способ - использовать, date -s
поскольку он позволяет использовать простые относительные даты.
$ date -s yesterday; date
date: cannot set date: Operation not permitted
Sat Jan 5 07:21:07 EST 2019
Sun Jan 6 07:21:07 EST 2019
Дата не изменилась, потому что она была выполнена с ограниченным пользователем $
. Если вы действительно хотите изменить дату, используйте root ( #
) или sudo:
$ sudo date -s yesterday; date
Sat Jan 5 07:21:07 EST 2019
Sat Jan 5 07:21:07 EST 2019
Таким образом, изменить любую часть относительной даты так же просто, как назвать ее:
$ date -s "5 years ago"
Mon Jan 6 08:26:26 EST 2014
$ date -s "+6 months"
Sat Jul 6 08:28:39 EDT 2019
$ date -s "+3 hours -13 minutes"
Sun Jan 6 11:16:59 AST 2019
Абсолютные даты немного сложнее, так как им нужно больше деталей:
$ date -s "2001-07-23 10:11:12"
Или вы можете использовать команду date дважды:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
замените любое из %
допустимым значением, и дата будет установлена (только как корень).
$ date -s "$(date +'%Y-11-%d %H:%M:%S')"
Wed Nov 6 08:37:15 EST 2019
Вторая форма вызова даты используется для непосредственного изменения системной даты.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Так :
date 11230812 # MMDDhhmm
Дата будет установлена 23 ноября в 08 ч. И 12 мин.
BSD имеет аналогичную команду, но в другом формате ([[[[[cc] гг] мм] дд] чч] мм [.ss]).
Попробуйте date
как пользователь с ограниченными правами увидеть, что он будет делать (ничего не меняя):
$ date 11230812
date: cannot set date: Operation not permitted
Sat Nov 23 08:12:00 EST 2019
Или, если вы действительно хотите изменить дату как root:
# date 11230812
# date
Sat Nov 23 08:12:00 EST 2019
Обратите внимание, что такие службы, как NTP или chrony, будут затронуты. И, если перезапустить, сбросит дату обратно на реальную.
Добавьте YY, чтобы установить год:
$ date 1123081222
date: cannot set date: Operation not permitted
Wed Nov 23 08:12:00 EST 2022
Или CCYY, чтобы установить год и век:
$ date 112308121982
date: cannot set date: Operation not permitted
Tue Nov 23 08:12:00 EST 1982
Я использовал команду даты и формат времени, перечисленные ниже, чтобы успешно установить дату из команды оболочки терминала, выполняемой на Android Things, которая использует Linux Kernal.
дата 092615002017.00
MMDDHHMMYYYY.SS
ММ - Месяц - 09
ДД - День - 26
ЧЧ - час - 15
ММ - Мин - 00
ГГГГ - Год - 2017
.SS - второй - 00
date
, не могли бы вы добавить дополнительную информацию о том, к какой системе это относится и как это относится к данному конкретному вопросу.
date --set='-2 years'
установить часы на два года назад, оставив все остальные элементы идентичными. Вы можете изменить месяц и день месяца таким же образом. Я не проверял, что произойдет, если в результате этих вычислений дата и время фактически не будут существовать, например, во время перехода на летнее время, но поведение должно быть идентичным обычному поведению «установить и дату, и время для конкретных значений».