Linux: defina a data através da linha de comando

77

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
SHW
fonte
2
Você pode usar, por exemplo, 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".
Christian Severin
Supondo que você esteja tentando definir a data para a hora atual, você pode fazer sudo ntpd -gqcom que o sistema seja atualizado automaticamente usando o serviço ntp.
Steven Soroka 23/03

Respostas:

96

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 datepara formatar detalhes para a construção de outras combinações: os componentes individuais são %Y, %m, %d, %H, %M, e %S.

Michael Homer
fonte
Eu não quero mudar o tempo #
SHW
5
Não há opção para fazer isso. Você pode usar date -s "2014-12-25 $(date +%H:%M:%S)"para alterar a data e reutilizar a hora atual.
Michael Homer
chegou aqui e as horas e os minutos correspondiam à hora atual. - bom
Alex2php
2
date: cannot set date: Invalid argument
Chris Stryczynski
@MichaelHomer @SHW é possível alterar apenas a data com um comando como date -s 2018-01-01. Alguém compartilhou isso em uma resposta também: superuser.com/questions/870068/…
baptx 4/18/18
42

Hora do sistema

Você pode usar datepara 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 --showpara 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
caos
fonte
2
Pontos de bônus por ilustrar as maneiras não óbvias em que você pode definir a data com exemplos e por apontar a diferença entre a "hora do sistema" e o "relógio do hardware". Resposta muito útil!
precisa
3

Você altera a data com o datecomando 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 -scomando 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 - Minuto
garethTheRed
fonte
Eu tento mudar, mas não está mudando: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Qua 30 de setembro 10:05:59 +0530 2015 $ date qui 23 de maio 15:10:37 +0530 2019
Vinod
2

Para 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
Balmipour
fonte
3
Obrigado pelo -1, mas você se importaria de explicar o porquê ? Se você obteve uma resposta melhor / mais completa / mais exata, fique à vontade para comentar.
Balmipour
1

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]]

Fácil

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

direto

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 datecomo 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
Isaac
fonte
-1

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

Brook Oldre
fonte
Como isso não funciona com o GNU ou o BSD date, você poderia adicionar mais informações sobre para qual sistema isso é relevante e como é relevante para essa pergunta em particular.
Kusalananda