Linux sysuptime을 올바른 형식의 날짜로 변환

Linux sysuptime을 올바른 형식의 날짜로 변환

/proc/uptime다음과 같은 멋진 형식으로 표시하고 싶습니다 .

DD:HH:MM:SS

/proc/uptime시스템 시간을 초 단위로 알려주십시오. 초를 이 형식으로 변환하는 표준 솔루션이 있습니까?

답변1

없이 수행하는 방법은 다음과 같습니다 perl.

awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime

답변2

예를 들어, Perl과 몇 가지 간단한 수학을 사용하여 이 작업을 수행할 수 있습니다.

cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60' 

몇 초가 필요하지 않으면 uptime명령을 실행하면 됩니다. 그런 다음 해당 출력을 DD:HH:MM으로 간단히 변환할 수 있습니다.

예를 들어 다음을 사용합니다(가동 시간이 1시간을 초과하는 경우에만 이 방식으로 작동함).

 uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'

답변3

아니요, 별로 어려운 질문이 아니기 때문입니다. 정수 나누기를 사용하여 초 수를 86400으로 나누어 일 수를 구합니다. 나머지를 3600으로 나누어 시간 수를 구합니다. 나머지를 60으로 나누어 분 수를 구하고 나머지는 초 수입니다. expr쉘이 충분히 오래되었고 기본적으로 산술을 지원하지 않는 경우 이 모든 작업은 다음 명령을 사용하여 쉘에서 수행할 수 있습니다.

에포크 이후 초를 가져와 사람이 읽을 수 있는 날짜로 변환합니다.date -r SECONDS이것은 어려운 문제이므로 셸에서 수행하는 것과 같은 표준적인 방법이 있습니다 . 그러나 그것은 또 다른 질문입니다.

답변4

$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18

epoch 이후의 초를 날짜 및 시간으로 변환합니다.

$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30

관련 정보