쉘 명령의 실행 시간 인쇄


88

다음 조합으로 쉘 명령의 실행 시간을 인쇄 할 수 있습니까?

root@hostname:~# "command to execute" && echo "execution time"

답변:


72

bash의 내장 time(기본적으로 호출해야 함 time command)과 /usr/bin/time(전체 경로로 호출해야 함 ) 간에 차이가 있다는 것을 잊지 마십시오 .

내장은 time항상 stderr로 인쇄하지만 /usr/bin/time시간의 출력을 특정 파일로 보낼 수 있으므로 실행 된 명령의 stderr 스트림을 방해하지 않습니다. 또한 /usr/bin/time의 형식은 명령 줄 또는 환경 변수 로 구성 할 수있는 TIME반면 bash의 내장 time형식은 환경 변수 로만 구성 할 수 TIMEFORMAT있습니다.

$ time factor 1234567889234567891 # builtin
1234567889234567891: 142662263 8653780357

real    0m3.194s
user    0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps

From man bash: "TIMEFORMAT 변수는 타이밍 정보를 표시하는 방법을 지정하는 형식 문자열로 설정 될 수 있습니다."
추후 공지가있을 때까지 일시 중지

죄송합니다. 형식을 지정할 수있는 방법이 있다고 생각 했지만 한 눈에보기 help time만했고 명령 줄 인수라고 생각했기 때문에 놓쳤습니다 . 답변을 업데이트하겠습니다.
Mark Rushakoff 2009

2
여기서 우리는 9 년 후 명령이 0m0.018s 밖에 걸리지 않았습니다. 나는 그것을 지적 할 것이라고 생각했다.
Ghassen Louhaichi

112

time tty에 실행 시간 정보를 기록하는 대부분의 쉘에 내장 된 명령입니다.

다음과 같은 것을 시도해 볼 수도 있습니다.

start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.

또는 bash:

start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s

Maaza와 동의 한이 유연성 덕분에 전체 명령 집합의 시간을 측정 할 수있었습니다.
Nath

계산 실행에 어떤 리눅스 명령 주위에 리눅스 측면을 적용하는 것이 가능하다
에드 Mazreena

1
이 접근 방식의 한 가지 단점 time은 밀리 초를 사용 하는 반면 초 단위로 측정한다는 것 입니다. 그리고 변수와 계산을 사용하지 않고 몇 가지 명령의 시간을 함께 측정하려면 괄호를 사용할 수 있습니다. time ( command1 ; command2 ; command3 )총 시간과 함께 개별적으로 시간을 측정 할 time ( time command1 ; time command2 ; time command3 ) 수도 있습니다. 이 답변의 솔루션을 사용하는 것이 좋습니다. 하지만 그 다음에는 모든 명령을 스크립트에 넣는 것을 생각해야합니다 ...
msb

25
root@hostname:~# time [command]

또한 실시간 사용과 시스템 사용 시간을 구분합니다.


이것은 확실히 기본적인 대답입니다. 그러나 명령의 오류 출력을보고 질문과 같이 타이밍 정보를 표준 출력으로 보내려는 경우 몇 가지 복잡한 문제가 있습니다. time 명령은 stderr에 기록합니다. 당신이 제안하는 것은 아마도 충분히 정확할 것입니다.
Jonathan Leffler

2
timestderr이 아닌 tty에 기록합니다. 상황을 더 악화시키는 것 같아요.
mob

12

라인 별 델타 측정의 경우 gnonom을 사용해보십시오 .

다른 명령의 표준 출력에 타임 스탬프 정보를 추가하는 것은 moreutils의 ts와 약간 유사한 명령 줄 유틸리티입니다. 너무 오래 걸리는 기록을 기록하려는 장기 실행 프로세스에 유용합니다.

gnomon에 무엇이든 파이핑하면 각 줄 앞에 타임 스탬프가 추가되어 해당 줄이 버퍼의 마지막 줄이었던 시간, 즉 다음 줄이 나타나는 데 걸린 시간을 나타냅니다. 기본적으로 gnomon은 각 줄 사이에 경과 된 시간 (초)을 표시하지만 구성 할 수 있습니다.

노몬 데모


8

@mob의 답변에 추가 :

에 추가 하면 나노초 정확도 %Ndate +%s제공됩니다.

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`

5

복사 또는 해시와 같은 장기 실행 프로세스를 시작하고 나중에 얼마나 오래 걸 렸는지 알고 싶다면 다음과 같이합니다.

$ date; sha1sum reallybigfile.txt; date

결과는 다음과 같습니다.

Tue Jun  2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0  reallybigfile.txt
Tue Jun  2 21:33:54 PDT 2015

물론 여기에 구현 된대로 정확하지 않고 경과 시간을 계산하지도 않습니다. 그러나 그것은 간단하고 때로는 필요한 모든 것입니다.


4

zsh에서는 다음을 사용할 수 있습니다.

=time ...

bash 또는 zsh에서는 다음을 사용할 수 있습니다.

command time ...

이들은 (다른 메커니즘에 의해) 외부 명령이 사용되도록 강제합니다.


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