시스템 시작 타임스탬프를 안정적으로 얻는 방법은 무엇입니까?

시스템 시작 타임스탬프를 안정적으로 얻는 방법은 무엇입니까?

명령 에 대해 알고 있지만 uptime부팅 이후의 초 수를 반환하므로 현재 타임스탬프에서 해당 숫자를 빼면 이론적으로 가동 시간과 현재 타임스탬프를 읽은 후 초 수가 변경되면 다른 결과를 얻을 수 있습니다. uptime -s내가 원하는 것이지만 centos에서는 사용할 수 없습니다(그런데 어떻게 계산되나요?). /proc 디렉토리의 ctime만 얻을 수 있나요? 이것은 정확한 숫자를 제공하는 것 같지만 모든 Linux 시스템이 부팅 시 /proc을 생성하는지 궁금합니다.

답변1

가장 crtime먼저리눅스에서는 까다롭다. 즉, 다음과 같이 실행하십시오.

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

또는

$ stat -c %Z /proc/ 
1414674003

당신에게 꼭 필요한 것일 수도 있습니다. 파일 시스템은 /procLFS 표준에 의해 정의되며 모든 Linux 시스템에서도 작동해야 합니다.대부분의 경우(모두?) UNIXen.

또는 실제로 두 번째 정밀도가 필요하지 않고 올바른 타임스탬프만 필요하다고 가정하면 다음을 사용할 수 있습니다 who.

$ who -b
   system boot  2014-10-30 14:00

From man who: -b, --boot 시스템이 마지막으로 부팅된 시간

GNU를 사용하여 이를 epoch 이후의 초 단위로 변환할 수 있습니다 date.

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000

답변2

또 다른 해결책은 /proc/stat[ btime1]입니다.

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

출력 예:

1583547431

이는 에포크 이후 초 단위의 타임스탬프입니다.

[1]http://man7.org/linux/man-pages/man5/proc.5.html

답변3

macOS에서는 /proc사용할 수 없지만 /dev가능합니다. 다음은 몇 가지 다른 옵션입니다.

$ who -b
reboot   ~        Dec 17 18:45
$ stat -f %m /dev
1608227137

-f %m마지막 수정 시간이 "strftime(3) 형식"으로 표시되도록 지정합니다 .

$ stat -F /dev   
dr-xr-xr-x 3 root wheel 4606 Dec 17 18:45:37 2020 /dev/

GNU 도구가 Homebrew를 통해 설치된 경우 다음 도구도 사용할 수 있습니다.

$ gwho -b
         system boot  2020-12-17 18:45
$ gstat -c %Y /dev
1608227137

-c %Y"마지막 데이터 수정 시간, 에포크 이후 초"를 표시하도록 지정합니다 .

$ gstat -c %y /dev
2020-12-17 18:45:37.000000000 +0100

%y대신 사람이 읽을 수 있습니다.

답변4

위의 해결 방법은 RTC가 있는 컴퓨터에서만 작동합니다. RTC가 없는 Raspberry Pi 및 기타 임베디드 시스템에서 시스템은 시스템 디렉터리 구조를 생성할 때 참조 타임스탬프를 0으로 설정합니다. 여기서는 Linux에 대해 이야기하고 있으므로 /proc/uptime에서 정보를 읽어보세요.

cat /proc/uptime | awk '{ print $1 }'

관련 정보