Linux: встановлення дати за допомогою командного рядка


76

Як змінити системну дату в Linux?

Я хочу змінити:

  • Тільки рік
  • Лише місяць
  • Тільки Дата
  • Будь-яка комбінація вище трьох

2
Наприклад, ви можете використовувати date --set='-2 years'для повернення годинника на два роки, залишаючи всі інші елементи однаковими. Ви можете змінювати місяць і день місяця однаково. Я не перевіряв, що станеться, якщо такий обчислення призводить до часу, який насправді не існує, наприклад, під час перемикання DST, але поведінка повинна бути ідентичною звичайній поведінці "встановити і дату, і час конкретних значень".
Крістіан Северин

Якщо припустити, що ви намагаєтеся встановити дату на поточний час, ви можете зробити sudo ntpd -gqоновлення системи автоматично за допомогою сервісу ntp.
Стівен Сорока

Відповіді:


95

Використання date -s:

date -s '2014-12-25 12:34:56'

Запустити це як root або under sudo. Зміна лише одного року / місяця / дня є більш складним завданням і буде включати повторення бітів поточної дати. Також є інструменти для дати графічного інтерфейсу, вбудовані в основні середовища робочого столу, до яких зазвичай можна дістатися через годинник.

Щоб змінити лише частину часу, ви можете використовувати підстановку команд у рядку дати:

date -s "2014-12-25 $(date +%H:%M:%S)"

змінить дату, але зберігайте час. Див man dateформатування деталі для побудови інших комбінацій: окремі компоненти %Y, %m, %d, %H, %M, і %S.


Я не хочу змінювати час
SHW

5
Немає цього робити. Ви можете використовувати date -s "2014-12-25 $(date +%H:%M:%S)"для зміни дати та повторного використання поточного часу.
Майкл Гомер

Прийшов сюди, і години, і хвилини відповідали поточному часу. - приємно
Alex2php

2
date: cannot set date: Invalid argument
Кріс Стричинський

@MichaelHomer @SHW можна змінити лише дату з такою командою, як date -s 2018-01-01. Хтось поділився цим у відповіді також: superuser.com/questions/870068/…
baptx

42

Системний час

Ви можете використовувати 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

2
Бонусні бали за ілюстрацію неочевидних способів можна встановити дату на прикладах та вказати на різницю між "системним часом" та "апаратним годинником". Дуже корисна відповідь!
Марк Едінгтон

3

Ви можете змінити дату за допомогою 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 - Хвилинка

Я намагаюся змінити, але це не змінюється: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Ср 30 вересня 10:05:59 +0530 2015 $ дата Чт 23 травня 15:10:37 +0530 2019
Винод

2

Для таких, як я, що працює під керуванням 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

3
Дякую за -1, але ви б не хотіли пояснити, чому ? Якщо ви отримали кращу / більш повну / точнішу відповідь, сміливо коментуйте.
Бальміпур

1

Команда змінити системну дату є 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 -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] yy] mm] dd] HH] MM [.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

Або CYYY, щоб встановити рік і століття:

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982

-1

Я використовував перелік наведених нижче команд дати та формат часу, щоб успішно встановити дату з команди оболонки термінала, виконаної в Android Things, яка використовує Linux Kernal.

дата 092615002017.00

MMDDHHMMYYY.SS

ММ - місяць - 09

ДД - День - 26

HH - Година - 15

ММ - Хв - 00

РРРР - рік - 2017

.SS - другий - 00


Оскільки це не працює ні з GNU, ні з BSD date, ви можете, будь ласка, додати більше інформації про те, для якої системи це актуально та наскільки це стосується цього конкретного питання.
Kusalananda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.