리눅스 sysuptime을 올바른 형식의 날짜로 변환


11

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

DD:HH:MM:SS

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

답변:


15

여기없는 방법이 있습니다 perl:

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

1
좋은 답변입니다. \n 개행이 좋을 것입니다!
ankit7540

4

예를 들어 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쉘에서이. 그러나 그것은 다른 문제입니다.


3

이 답변 의 관련 부분을 조정 합니다 .

가동 시간이 1 년 미만인 경우 다음 명령을 사용할 수 있습니다.

TZ=UTC date -d@$(cut -d\  -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'

적어도 Linux에서는 총 유휴 시간을 포함하는 두 번째 필드가 있기 때문에 가동 시간 파일의 첫 번째 필드를 추출합니다. 나는 그 시대를 초 이후의 초 수로 취급하고 그 시간을 시간, 분 및 초 단위의 연중 날짜로 변환합니다. 일년 중 하루가 1부터 시작하기 때문에 마지막 awk호출 에서 1을 뺍니다 .


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

에포크 이후 초를 날짜 및 시간으로 변환 :

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