Linux: Obtendo data e hora da inicialização do sistema

41

Eu sei que uptime imprime o tempo que uma máquina esteve em funcionamento, mas existe uma maneira mais fácil (confiável) de obter a data da inicialização do que a contagem regressiva dessa saída?

Tentei pesquisar /proc , mas não encontrei nada de relevante. Há também uma linha como esta no meu dmesg : [ 0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812) , mas eu estou querendo saber se esse método é distribuição e versão do kernel agnóstico.

    
por jho 28.03.2011 / 13:15

11 respostas

37

Encontrei alguns comandos aqui . Experimente who -b ou last reboot | head -1 .
who fornece datas numéricas, enquanto last reboot retorna nomes abreviados de dia / mês.

    
por 28.03.2011 / 13:24
21

Isso consulta o tempo de atividade do kernel e o exibe no fuso horário local:

date -d "'cut -f1 -d. /proc/uptime' seconds ago"

Tenha cuidado com outras opções. O comando last parará de funcionar assim que wtmp for rotacionado. O comando who depende da disponibilidade e integridade de utmp . E /proc/1 pode ter a data atual em vez da data do tempo de inicialização e pode até estar indisponível em um sistema reforçado. Editar : dmesg tem apenas um buffer de fundo de comprimento fixo, por isso é irrealizável também. Os logs do kernel podem estar em /var/log , mas a maioria das distribuições só mantém 8 semanas deles.

    
por 28.03.2011 / 14:37
12

Eu tropecei nessa questão enquanto procurava uma maneira de obter um tempo de inicialização consistente, em vez de tempo desde a inicialização , que muda em cada chamada.

Parece que uptime -s fará o truque na maioria dos sistemas Linux.

    
por 01.11.2014 / 21:52
10

Eu encontrei a linha btime em /proc/stat quando cutucando um pouco

cat /proc/stat | grep btime | awk '{ print $2 }'

e depois de uma pesquisa rápida, encontrei esta página: / proc / stat , que descreve o " Várias informações sobre a atividade do kernel que estão disponíveis no /proc/stat file. "

The "btime" line gives the time at which the system booted, in seconds since the Unix epoch.

    
por 30.08.2011 / 22:30
7
  • bom : uptime -s , who -b ou parsing /proc/uptime
  • bad : ls -ld /proc/1 e variantes.

Não use ls -ld / proc / 1 para esse propósito. Às vezes é atualizado após s2disk ou s2ram.

No meu caso, who -b disse:

inicialização do sistema 2 de maio 09:51

Enquanto ls -ld /proc/1 :

dr-xr-xr-x 7 raiz raiz 0 3 de maio 13:09 / proc / 1

ls -ld para /proc ou /sys parece persistir após a continuação, mas depende da implementação e pode mudar no futuro, portanto, não use esses métodos. E se o seu relógio do sistema estiver no horário local, não no UTC , eles têm um deslocamento negativo.

(Eu não tenho o privilégio de comentar as respostas ainda, então abri uma nova resposta. Desculpe.)

EDIT: uptime -s foi respondido pela primeira vez nesta resposta por mikegreiling

    
por 10.05.2012 / 09:41
2

A maneira mais simples é observar quando o / sbin / init é iniciado (esse é sempre o primeiro processo a ser iniciado após o carregamento do kernel):

# ls -ld /proc/1
dr-xr-xr-x 7 root root 0 2011-03-27 23:54 /proc/1

Assim, posso ver que minha máquina inicializou às 6 minutos da meia-noite de 27 de março de 2011.

Se você quiser usá-lo no script, poderá usar o comando stat :

# stat --printf='%Y' /proc/1
1301266491

O %Y especifica o tempo desde que o diretório foi alterado pela última vez (tempo de criação do processo) em segundos desde a época (1/1/70) e é um registro de data e hora unix padrão.

    
por 28.03.2011 / 13:27
1

No Linux,

ls -ld /proc

parece me dar o que eu preciso. O post acima é estranho. /proc/uptime não contém um valor de data - ele teria que ser subtraído do horário atual. Talvez ele quis dizer:

date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))
    
por 16.05.2011 / 19:29
1

Em Bash, sem pipes nem outros processos; apenas texto:

$ REPLY="$(</proc/uptime)"
$ REPLY="${REPLY%%.*}"
$ echo "$REPLY"
31207

(Apenas reutilizou a variável padrão REPLY , mas você pode escolher o que precisar)

    
por 12.09.2017 / 20:41
0
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(ainda outra maneira de fazer isso, o que é útil em certas circunstâncias)

    
por 04.12.2014 / 15:06
0

Comando:

(echo ' Currently:' | tr "\n" ' ' ; date +"%Y-%m-%d %k:%M:%S" ; echo '  Up Since:' | tr '\n' ' ' ; uptime -s ; echo '  Duration:' | tr '\n' ' ' ; uptime -p)

Saída:

 Currently: 2016-05-09  9:06:29
  Up Since: 2016-05-04 12:56:04
  Duration: up 4 days, 20 hours, 10 minutes
    
por 09.05.2016 / 15:46
0

Limpo e conciso com o comando tuptime :

# tuptime -t
No.             Startup Date                                          Uptime            Shutdown Date   End                    Downtime

1     09:43:39 AM 08/08/2017      41 days, 0 hours, 51 minutes and 2 seconds   10:34:41 AM 09/18/2017    OK                  10 seconds
2     10:34:51 AM 09/18/2017                         1 minute and 16 seconds   10:36:07 AM 09/18/2017    OK                    1 second
3     10:36:08 AM 09/18/2017                       13 minutes and 20 seconds   10:49:28 AM 09/18/2017    OK                   3 seconds
4     10:49:31 AM 09/18/2017       45 days, 0 hours, 1 minute and 20 seconds   09:50:51 AM 11/02/2017    OK                   4 seconds
5     09:50:55 AM 11/02/2017                       27 minutes and 25 seconds   10:18:20 AM 11/02/2017    OK                   4 seconds
6     10:18:24 AM 11/02/2017                                       9 seconds   10:18:33 AM 11/02/2017    OK                   9 seconds
7     10:18:42 AM 11/02/2017      4 days, 5 hours, 41 minutes and 47 seconds   04:00:29 PM 11/06/2017    OK                  44 seconds
8     04:01:13 PM 11/06/2017    15 days, 17 hours, 33 minutes and 48 seconds   09:35:01 AM 11/22/2017   BAD   10 minutes and 40 seconds
9     09:45:41 AM 11/22/2017               8 hours, 9 minutes and 20 seconds   05:55:01 PM 11/22/2017   BAD     7 minutes and 8 seconds
10    06:02:09 PM 11/22/2017                1 hour, 7 minutes and 54 seconds   07:10:03 PM 11/22/2017   BAD   11 minutes and 30 seconds
11    07:21:33 PM 11/22/2017               1 hour, 58 minutes and 32 seconds   09:20:05 PM 11/22/2017    OK                   5 seconds
12    09:20:10 PM 11/22/2017                       14 minutes and 52 seconds   09:35:02 PM 11/22/2017   BAD    5 minutes and 52 seconds
13    09:40:54 PM 11/22/2017                         4 minutes and 6 seconds   09:45:00 PM 11/22/2017   BAD    4 minutes and 51 seconds
14    09:49:51 PM 11/22/2017             11 hours, 15 minutes and 10 seconds   09:05:01 AM 11/23/2017   BAD    7 minutes and 20 seconds
15    09:12:21 AM 11/23/2017      3 days, 2 hours, 17 minutes and 40 seconds   11:30:01 AM 11/26/2017   BAD   27 minutes and 44 seconds
16    11:57:45 AM 11/26/2017   109 days, 19 hours, 12 minutes and 37 seconds   07:10:22 AM 03/16/2018    OK                  17 seconds
17    07:10:39 AM 03/16/2018     25 days, 3 hours, 55 minutes and 59 seconds   12:06:38 PM 04/10/2018    OK                   3 seconds
18    12:06:41 PM 04/10/2018      8 days, 19 hours, 3 minutes and 20 seconds   07:10:01 AM 04/19/2018   BAD    3 minutes and 52 seconds
19    07:13:53 AM 04/19/2018     77 days, 9 hours, 44 minutes and 39 seconds
    
por 05.07.2018 / 17:00

Tags