다음 조합으로 쉘 명령의 실행 시간을 인쇄 할 수 있습니까?
root@hostname:~# "command to execute" && echo "execution time"
답변:
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
help time
만했고 명령 줄 인수라고 생각했기 때문에 놓쳤습니다 . 답변을 업데이트하겠습니다.
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
time
은 밀리 초를 사용 하는 반면 초 단위로 측정한다는 것 입니다. 그리고 변수와 계산을 사용하지 않고 몇 가지 명령의 시간을 함께 측정하려면 괄호를 사용할 수 있습니다. time ( command1 ; command2 ; command3 )
총 시간과 함께 개별적으로 시간을 측정 할 time ( time command1 ; time command2 ; time command3 )
수도 있습니다. 이 답변의 솔루션을 사용하는 것이 좋습니다. 하지만 그 다음에는 모든 명령을 스크립트에 넣는 것을 생각해야합니다 ...
root@hostname:~# time [command]
또한 실시간 사용과 시스템 사용 시간을 구분합니다.
time
stderr이 아닌 tty에 기록합니다. 상황을 더 악화시키는 것 같아요.
라인 별 델타 측정의 경우 gnonom을 사용해보십시오 .
다른 명령의 표준 출력에 타임 스탬프 정보를 추가하는 것은 moreutils의 ts와 약간 유사한 명령 줄 유틸리티입니다. 너무 오래 걸리는 기록을 기록하려는 장기 실행 프로세스에 유용합니다.
gnomon에 무엇이든 파이핑하면 각 줄 앞에 타임 스탬프가 추가되어 해당 줄이 버퍼의 마지막 줄이었던 시간, 즉 다음 줄이 나타나는 데 걸린 시간을 나타냅니다. 기본적으로 gnomon은 각 줄 사이에 경과 된 시간 (초)을 표시하지만 구성 할 수 있습니다.
복사 또는 해시와 같은 장기 실행 프로세스를 시작하고 나중에 얼마나 오래 걸 렸는지 알고 싶다면 다음과 같이합니다.
$ date; sha1sum reallybigfile.txt; date
결과는 다음과 같습니다.
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
물론 여기에 구현 된대로 정확하지 않고 경과 시간을 계산하지도 않습니다. 그러나 그것은 간단하고 때로는 필요한 모든 것입니다.
zsh에서는 다음을 사용할 수 있습니다.
=time ...
bash 또는 zsh에서는 다음을 사용할 수 있습니다.
command time ...
이들은 (다른 메커니즘에 의해) 외부 명령이 사용되도록 강제합니다.
다만 ps -o etime= -p "<your_process_pid>"
man bash
: "TIMEFORMAT 변수는 타이밍 정보를 표시하는 방법을 지정하는 형식 문자열로 설정 될 수 있습니다."