Як змінити системну дату в Linux?
Я хочу змінити:
- Тільки рік
- Лише місяць
- Тільки Дата
- Будь-яка комбінація вище трьох
sudo ntpd -gq
оновлення системи автоматично за допомогою сервісу ntp.
Як змінити системну дату в Linux?
Я хочу змінити:
sudo ntpd -gq
оновлення системи автоматично за допомогою сервісу ntp.
Відповіді:
Використання 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
.
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
.
Існує два способи викликати команду дати (в 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
Я використовував перелік наведених нижче команд дати та формат часу, щоб успішно встановити дату з команди оболонки термінала, виконаної в Android Things, яка використовує Linux Kernal.
дата 092615002017.00
MMDDHHMMYYY.SS
ММ - місяць - 09
ДД - День - 26
HH - Година - 15
ММ - Хв - 00
РРРР - рік - 2017
.SS - другий - 00
date
, ви можете, будь ласка, додати більше інформації про те, для якої системи це актуально та наскільки це стосується цього конкретного питання.
date --set='-2 years'
для повернення годинника на два роки, залишаючи всі інші елементи однаковими. Ви можете змінювати місяць і день місяця однаково. Я не перевіряв, що станеться, якщо такий обчислення призводить до часу, який насправді не існує, наприклад, під час перемикання DST, але поведінка повинна бути ідентичною звичайній поведінці "встановити і дату, і час конкретних значень".