Linux에서 시스템 시작 날짜 및 시간 가져 오기


44

uptime기계가 작동하고 실행 된 시간 을 인쇄하지만이 출력에서 ​​카운트 다운하는 것보다 시작 날짜를 얻는 더 쉬운 (신뢰할 수있는) 방법이 있습니까?

주위를 둘러 보았지만 /proc관련성이 없습니다. 내에도 이와 같은 줄이 있습니다 dmesg.

[    0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)

그러나이 방법이 배포 및 커널 버전과 무관한지 궁금합니다.


무엇 unreliable or hard에 대해 uptime?
Bobby

2
@Bobby : 명령이나 기능 자체에 대해서는 아무 것도 없지만, 마지막으로 부팅 한 날짜와 시간을 알고 싶습니다. uptime"up 13 days, 21:01"과 같은 문자열을 반환하며, 그로부터 계산해야합니다.
jho

4
가동 시간 값에서 다시 계산하는 것은 쉽지 않습니다. 당신이 신뢰 를 원한다면 , 당신은 원합니다 /proc/uptime.
sam hocevar

답변:


40

여기에 몇 가지 명령이 있습니다 . who -b또는을 시도하십시오 last reboot | head -1.
who숫자 날짜를 제공하고 last reboot약어로 일 / 월 이름 을 반환합니다.


우리가 날짜 만 원하고 다른 것을 원한다면 어떨까요?
T0xicCode

4
who -b | cut -d' ' -f13날짜 만 반환 (-f14는 시간 반환)
찰스 브리지

2
경고 : last reboot정확한 날짜를 알려주지 않았습니다! who -b했다.
qwertzguy

last reboot나에게 먼저 달의 일 회전 된 것 같았다 wtmp는 너무 잘못된 날짜, 준
golimar을

23

커널에서 가동 시간을 쿼리하여 로컬 시간대로 표시합니다.

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

다른 옵션에주의하십시오. last명령은 빨리으로 작동이 중지됩니다 wtmp회전하고있다. who명령의 가용성과 무결성에 따라 달라집니다 utmp. 그리고 /proc/1대신에 부팅 할 때 날짜의 현재 날짜가있을 수 있습니다, 심지어 강화 된 시스템에서 사용할 수 있습니다. 편집 : dmesg고정 길이의 백 버퍼 만 있으므로 신뢰할 수 없습니다. 커널 로그는있을 수 /var/log있지만 대부분의 배포는 8 주만 보관합니다.


1
흥미롭게도 이것은 who -b210 일 가동 시스템에서 1-2 분 정도 동의하지 않습니다 . who -b타임 스탬프를보고하는 것처럼 보이지만 이 계산은 실행으로 주기적으로 수정 되더라도 클럭 드리프트의 영향을받습니다 ntpd.
Ruslan

3
모든 대체 답변을 검토 한 후 다음과 같이 정했습니다. date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u(UTC에 시간 / 날짜가 있음)
david6

경이적인 대답. 커널이 모른다면 아무도 모릅니다. 그것은 시스템의 진실의 근원입니다. 초는 시간 계산을 쉽게 수행 할 수있게 해줍니다 ( "마지막 날 [86,400 초] 내에 ​​호스트가 재부팅되지 않은 이유는 무엇입니까?"를 알고 싶습니다.)
Mike S

17

모든 통화에서 변경되는 부팅 이후의 시간 과 달리 일관성 있고 구문 분석 가능한 부팅 시간 을 얻는 방법을 찾고있는 동안이 질문을 우연히 발견했습니다 .

uptime -s대부분의 Linux 시스템에서 트릭을 수행하는 것으로 보입니다 .


uptime -s출력 예 2017-08-09 01:23:45. 이것이 가장 간단하여 가장 좋습니다. 이 명령은 "procps"패키지에 포함되어 있습니다.
teika kazura

uptime에 CentOS 6 (의는 procps version 3.2.8) 슬프게도,이 기능을 지원하지 않는 것 같습니다.
mwfearnley

uptime -s항상 일정한 결과를 반환하지는 않습니다 : superuser.com/q/1247713/71144
cweiske

1
이것은 항상 localtime 이지만 실제로 시간대 / 오프셋을 인쇄하지는 않습니다. 따라서 프로그래밍 방식으로 기계 에서이 작업을 수행하려는 경우 사용 사례에 따라 시간대를 별도로 결정해야 할 수 있으므로 이상적이지 않습니다. 따라서 다른 답변 중 일부를 제안합니다.
JJC

11

조금 찌를 때 btime줄을 찾았습니다./proc/stat

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

빠른 검색 후, " / proc / stat Explain " 페이지를 찾았습니다 /proc/stat. "파일 에서 사용 가능한 커널 활동에 대한 다양한 정보"가 요약되어 있습니다 .

"btime"줄은 시스템이 부팅 된 시간을 유닉스 시대 이후 초 단위로 제공합니다.


1
작성하기 훨씬 쉬운 것 같습니다awk '/btime/{print $2}' /proc/stat
William Pursell

@WilliamPursell 가장 쉬운 방법은 항상 당신이 이미 알고있는 것입니다. 나는 어색한 마법사가 아니다. : P
Oddstr13

좋은 지적. 그러나, 당신은 고양이를 정중하게 사용했습니다. 파일에서 grep하면됩니다.
Mike S

@MikeS는 정확합니다. 그러나 여전히 답을 찾은 지 7 년이 지난 후에도 정보가 발견 된 위치를 명확하게 나타내는 원래의 명령 체인을 유지합니다.
Oddstr13

8
  • 좋은 : uptime -s, who -b또는 구문 분석/proc/uptime
  • 나쁜 : ls -ld /proc/1및 변형.

이 목적으로 ls -ld / proc / 1을 사용하지 마십시오. 때때로 s2disk 또는 s2ram 이후에 업데이트됩니다 .

내 경우에는 who -b말했다.

시스템 부팅 5 월 2 일 09:51

동안 ls -ld /proc/1:

dr-xr-xr-x 7 루트 루트 0 5 월 3 일 13:09 / proc / 1

ls -ld를 위해 /proc또는 것은 /sys복귀 한 후 지속 보이지만, 그것의 구현에 의존, 따라서 이러한 방법을 사용하지 않는, 미래에 변경 될 수 있습니다. 그리고 귀하의 경우 시스템 시계의 현지에하지 UTC , 그들은 부정적인 오프셋 있습니다.

(아직 답변에 댓글을 달 수있는 권한이 없으므로 새 답변을 열었습니다. 죄송합니다.)

편집 : 이 답변 에서 mikegreiling에 의해 uptime -s처음 답변 되었습니다


2

가장 간단한 방법은 / sbin / init가 언제 시작되었는지 확인하는 것입니다 (커널이로드 된 후 항상 가장 먼저 시작되는 프로세스 임).

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

2011 년 3 월 27 일 자정부터 6 분까지 컴퓨터가 부팅 된 것을 확인할 수 있습니다.

스크립팅에 사용하려면 stat대신 명령을 사용할 수 있습니다 .

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

%Y신기원 (1970 년 1 월 1 일) 이후의 초에 지정 디렉토리가 마지막 (프로세스 생성 시간) 변경 이후 시간과 표준 유닉스 타임 스탬프입니다.


1
불행히도 이것은 작동하지 않습니다 : 그 폴더의 mtime은 다른 이유로 변경 될 수 있습니다 (5 일 가동 시간이 있고 / proc / 1의 mtime이 25 분 전에 여기에 시스템이 있습니다)
kdt

1
그것은이다 신뢰할 수 없습니다 에 설명 된대로, 내 대답
테이 카 kazura

1

리눅스에서는

ls -ld /proc

내가 필요한 것을주는 것 같습니다. 위의 게시물은 이상합니다. /proc/uptime날짜 값을 포함하지 않습니다 – 현재 시간에서 빼야합니다. 아마 그는 의미했다 :

date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))

uptime -s날짜 값 제공
mikegreiling

1

Bash에서 파이프 또는 다른 프로세스가 없습니다. 그냥 텍스트 :

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

( REPLY기본 변수를 재사용 했지만 필요한 것을 선택할 수 있습니다)


물론이지? 다양한 부분 문자열을 영리하게 사용합니다. 시원한. +1. 아이디어 주셔서 감사합니다!
Mike S

1

이것은 강력 해 보이고 UTC 및 ISO8601 형식으로 제공됩니다. 마지막 두 옵션을 제거하여 각각 비활성화하십시오.

date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u -Iseconds

0
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(그러나이를 수행하는 다른 방법으로 특정 상황에서 유용합니다)


0

명령:

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

산출:

 Currently: 2016-05-09  9:06:29
  Up Since: 2016-05-04 12:56:04
  Duration: up 4 days, 20 hours, 10 minutes

0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.