Jak zmienić datę systemową w systemie Linux?
Chcę się zmienić:
- Tylko rok
- Tylko miesiąc
- Tylko data
- Dowolna kombinacja powyżej trzech
sudo ntpd -gq
aby system aktualizował się automatycznie przy użyciu usługi NTTP.
Jak zmienić datę systemową w systemie Linux?
Chcę się zmienić:
sudo ntpd -gq
aby system aktualizował się automatycznie przy użyciu usługi NTTP.
Odpowiedzi:
Użyj date -s
:
date -s '2014-12-25 12:34:56'
Uruchom jako root lub under sudo
. Zmiana tylko jednego roku / miesiąca / dnia stanowi większe wyzwanie i będzie wymagała powtarzania bitów z bieżącej daty. Istnieją również narzędzia graficzne GUI wbudowane w główne środowiska pulpitu, zwykle dostępne przez całą dobę.
Aby zmienić tylko część czasu, możesz użyć podstawienia polecenia w ciągu daty:
date -s "2014-12-25 $(date +%H:%M:%S)"
zmieni datę, ale zachowaj czas. Zobacz man date
formatowania szczegółów skonstruować inne kombinacje: poszczególne elementy są %Y
, %m
, %d
, %H
, %M
, i %S
.
date -s "2014-12-25 $(date +%H:%M:%S)"
do zmiany daty i ponownego wykorzystania bieżącej godziny.
date: cannot set date: Invalid argument
date -s 2018-01-01
. Ktoś udostępnił to w odpowiedzi również: superuser.com/questions/870068/…
czas systemu
Możesz użyć, date
aby ustawić datę systemową. Implementacja GNU date
(jak w większości niewbudowanych systemów opartych na Linuksie) akceptuje wiele różnych formatów, aby ustawić czas, oto kilka przykładów:
ustaw tylko rok:
date -s 'next year'
date -s 'last year'
ustaw tylko miesiąc:
date -s 'last month'
date -s 'next month'
ustaw tylko dzień:
date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
zestaw wszystko razem:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Czas sprzętu
Teraz ustawiony jest czas systemowy, ale możesz zsynchronizować go z zegarem sprzętowym:
Służy --show
do drukowania czasu sprzętowego:
hwclock --show
Możesz ustawić zegar sprzętowy na bieżący czas systemowy:
hwclock --systohc
Lub czas systemowy do zegara sprzętowego
hwclock --hctosys
Zmień datę za pomocą date
polecenia. Jednak polecenie oczekuje pełnej daty jako argumentu:
# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
Aby zmienić część daty, wyślij bieżącą datę z częścią daty, którą chcesz zmienić jako ciąg, a wszystkie inne jako zmienne formatujące datę. Następnie przekaż to date -s
polecenie, aby ustawić:
# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
zmienia miesiąc na 12. miesiąc - grudzień.
Formaty dat to:
%Y
- Rok%m
- miesiąc%d
- dzień%H
- Godzina%M
- MinutaDla takich jak ja z ESXI 5.1, system odpowiedział mi
~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'
Zamiast tego musiałem użyć określonej komendy ESX:
esxcli system time set -y 2016 -M 03 -d 23 -H 10 -m 05 -s 00
Polecenie zmiany daty systemowej to date
.
Istnieją dwa sposoby wywołania polecenia date (w systemie Linux):
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Najprostszym sposobem jest użycie, date -s
ponieważ pozwala na użycie prostych dat względnych
$ 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
Data nie uległa zmianie, ponieważ została wykonana z ograniczonym użytkownikiem $
. Jeśli naprawdę chcesz zmienić datę, użyj root ( #
) lub sudo:
$ sudo date -s yesterday; date
Sat Jan 5 07:21:07 EST 2019
Sat Jan 5 07:21:07 EST 2019
Tak więc zmiana dowolnej części względnej daty jest tak łatwa, jak jej nadanie:
$ 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
Bezwzględne daty są nieco bardziej złożone, ponieważ wymagają więcej szczegółów:
$ date -s "2001-07-23 10:11:12"
Możesz też użyć polecenia date dwa razy:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
zastąp dowolną z %
poprawną wartością, a data zostanie ustawiona (tylko jako root).
$ date -s "$(date +'%Y-11-%d %H:%M:%S')"
Wed Nov 6 08:37:15 EST 2019
Formularz połączenia z drugą datą służy do bezpośredniej zmiany daty systemowej.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Więc :
date 11230812 # MMDDhhmm
Ustawi datę na 23 listopada na 08h i 12min.
BSD ma podobne polecenie, ale inny format ([[[[[[cc] yy] mm] dd] HH] MM [.ss]).
Spróbuj date
jako ograniczony użytkownik, aby zobaczyć, co by zrobił (bez zmiany czegokolwiek):
$ date 11230812
date: cannot set date: Operation not permitted
Sat Nov 23 08:12:00 EST 2019
Lub, jeśli naprawdę chcesz zmienić datę, jako root:
# date 11230812
# date
Sat Nov 23 08:12:00 EST 2019
Pamiętaj, że wpłynie to na usługi takie jak NTP lub chrony. A jeśli zrestartowany zresetuje datę z powrotem do prawdziwej.
Dodaj rok, aby ustawić rok:
$ date 1123081222
date: cannot set date: Operation not permitted
Wed Nov 23 08:12:00 EST 2022
Lub CCYY, aby ustawić rok i wiek:
$ date 112308121982
date: cannot set date: Operation not permitted
Tue Nov 23 08:12:00 EST 1982
Użyłem polecenia daty i formatu czasu wymienionych poniżej, aby pomyślnie ustawić datę z polecenia powłoki terminalu wykonanego na Android Things, który używa jądra Linux.
data 092615002017.00
MMDDHHMMRRRR.SS
MM - miesiąc - 09
DD - Dzień - 26
GG - godzina - 15
MM - Min. 00
RRRR - rok - 2017
.SS - drugi - 00
date
, czy mógłbyś dodać więcej informacji o tym, dla którego systemu jest to istotne i jak to ma związek z tym konkretnym pytaniem.
date --set='-2 years'
Do cofnięcia zegara o dwa lata, pozostawiając wszystkie pozostałe elementy identyczne. Możesz zmienić miesiąc i dzień miesiąca w ten sam sposób. Nie sprawdziłem, co się stanie, jeśli to obliczenie spowoduje, że data nie istnieje, np. Podczas przełączania DST, ale zachowanie powinno być identyczne z typowym zachowaniem „ustaw datę i godzinę na konkretne wartości”.