Como mudar a data do sistema no Linux?
Eu quero mudar:
- Apenas ano
- Apenas Mês
- Data única
- Qualquer combinação acima de três
sudo ntpd -gq
com que o sistema seja atualizado automaticamente usando o serviço ntp.
Como mudar a data do sistema no Linux?
Eu quero mudar:
sudo ntpd -gq
com que o sistema seja atualizado automaticamente usando o serviço ntp.
Respostas:
Use date -s
:
date -s '2014-12-25 12:34:56'
Execute isso como root ou under sudo
. Alterar apenas um do ano / mês / dia é mais um desafio e envolverá a repetição de bits da data atual. Também existem ferramentas de data da GUI incorporadas aos principais ambientes de desktop, geralmente acessados através do relógio.
Para alterar apenas parte do tempo, você pode usar a substituição de comando na cadeia de datas:
date -s "2014-12-25 $(date +%H:%M:%S)"
mudará a data, mas manterá a hora. Veja man date
para formatar detalhes para a construção de outras combinações: os componentes individuais são %Y
, %m
, %d
, %H
, %M
, e %S
.
date -s "2014-12-25 $(date +%H:%M:%S)"
para alterar a data e reutilizar a hora atual.
date: cannot set date: Invalid argument
date -s 2018-01-01
. Alguém compartilhou isso em uma resposta também: superuser.com/questions/870068/…
Hora do sistema
Você pode usar date
para definir a data do sistema. A implementação GNU de date
(como encontrada na maioria dos sistemas baseados em Linux não incorporados) aceita muitos formatos diferentes para definir o tempo, aqui estão alguns exemplos:
definir apenas o ano:
date -s 'next year'
date -s 'last year'
defina apenas o mês:
date -s 'last month'
date -s 'next month'
defina apenas o dia:
date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
conjunto todos juntos:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Tempo de hardware
Agora, a hora do sistema está definida, mas você pode sincronizá-lo com o relógio do hardware:
Use --show
para imprimir o tempo do hardware:
hwclock --show
Você pode definir o relógio do hardware para a hora atual do sistema:
hwclock --systohc
Ou a hora do sistema para o relógio do hardware
hwclock --hctosys
Você altera a data com o date
comando No entanto, o comando espera uma data completa como o argumento:
# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
Para alterar parte da data, imprima a data atual com a parte da data que você deseja alterar como uma sequência e todas as outras como variáveis de formatação de data. Em seguida, passe isso para o date -s
comando para configurá-lo:
# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
altera o mês para o 12º mês - dezembro.
Os formatos de data são:
%Y
- Ano%m
- Mês%d
- Dia%H
- Hora%M
- MinutoPara pessoas como eu executando o ESXI 5.1, eis o que o sistema me respondeu
~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'
Eu tive que usar um comando ESX específico:
esxcli system time set -y 2016 -M 03 -d 23 -H 10 -m 05 -s 00
O comando para alterar a data do sistema é date
.
Existem duas maneiras de chamar o comando date (no Linux):
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
A maneira mais fácil é usar date -s
, pois permite o uso de datas relativas simples
$ 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
A data não foi alterada porque foi executada com um usuário limitado $
. Se você realmente deseja que a data seja alterada, use root ( #
) ou sudo:
$ sudo date -s yesterday; date
Sat Jan 5 07:21:07 EST 2019
Sat Jan 5 07:21:07 EST 2019
Portanto, alterar qualquer parte de uma data relativa é tão fácil quanto nomeá-la:
$ 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
Datas absolutas são um pouco mais complexas, pois precisam de mais detalhes:
$ date -s "2001-07-23 10:11:12"
Ou, você pode usar o comando date duas vezes:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
substitua qualquer %
um por um valor válido e a data será definida (apenas como raiz).
$ date -s "$(date +'%Y-11-%d %H:%M:%S')"
Wed Nov 6 08:37:15 EST 2019
O segundo formulário de chamada de data é usado para alterar diretamente a data do sistema.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Assim :
date 11230812 # MMDDhhmm
Definirá a data para 23 de novembro às 08h e 12min.
O BSD tem um comando semelhante, mas com um formato diferente ([[[[cc] aa] mm] dd] HH] MM [.ss]).
Tente date
como um usuário limitado para ver o que faria (sem alterar nada):
$ date 11230812
date: cannot set date: Operation not permitted
Sat Nov 23 08:12:00 EST 2019
Ou, se você realmente deseja alterar a data, como root:
# date 11230812
# date
Sat Nov 23 08:12:00 EST 2019
Observe que serviços como NTP ou chrony serão afetados. E, se reiniciado, redefinirá a data para a data real.
Adicione um AA para definir o ano:
$ date 1123081222
date: cannot set date: Operation not permitted
Wed Nov 23 08:12:00 EST 2022
Ou um CCYY para definir ano e século:
$ date 112308121982
date: cannot set date: Operation not permitted
Tue Nov 23 08:12:00 EST 1982
Usei o comando date e o formato da hora listados abaixo para definir com êxito a data no comando shell do terminal executado no Android Things que usa o Linux Kernal.
data 092615002017.00
MMDDHHMMYYYY.SS
MM - Mês - 09
DD - Dia - 26
HH - Hora - 15
MM - Mín. - 00
AAAA - Ano - 2017
.SS - segundo - 00
date
, você poderia adicionar mais informações sobre para qual sistema isso é relevante e como é relevante para essa pergunta em particular.
date --set='-2 years'
para atrasar o relógio em dois anos, deixando todos os outros elementos idênticos. Você pode alterar mês e dia do mês da mesma maneira. Não verifiquei o que acontece se esse cálculo resultar em uma data e hora realmente inexistentes, por exemplo, durante uma alternância do horário de verão, mas o comportamento deve ser idêntico ao comportamento usual "definir data e hora para valores concretos".