Nie zapominaj, że istnieje różnica między wbudowanym basha time
(który powinien być wywoływany domyślnie, gdy to zrobisz time command
) a /usr/bin/time
(który powinien wymagać wywołania go pełną ścieżką).
Wbudowane time
zawsze drukuje na stderr, ale /usr/bin/time
pozwoli ci wysłać wynik czasu do określonego pliku, więc nie będziesz ingerować w strumień stderr wykonywanego polecenia. Ponadto /usr/bin/time
format można konfigurować w wierszu poleceń lub za pomocą zmiennej środowiskowej TIME
, podczas gdy time
format wbudowany basha jest konfigurowany tylko przez TIMEFORMAT
zmienną środowiskową.
$ time factor 1234567889234567891
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
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
man bash
: „Zmienna TIMEFORMAT może być ustawiona na łańcuch formatu, który określa sposób wyświetlania informacji o taktowaniu”help time
ponieważ tylko zerknąłem na to i pomyślałem, że to argument wiersza poleceń. Zaktualizuję odpowiedź.time
jest poleceniem wbudowanym w większość powłok, które zapisuje informacje o czasie wykonywania do terminala.Możesz też spróbować czegoś takiego
start_time=`date +%s` <command-to-execute> end_time=`date +%s` echo execution time was `expr $end_time - $start_time` s.
Lub w
bash
:start_time=`date +%s` <command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
źródło
time
używa milisekund. A jeśli chcesz zmierzyć czas dla kilku poleceń bez konieczności używania zmiennych i obliczeń, możesz użyć nawiasów:time ( command1 ; command2 ; command3 )
możesz nawet ustawić je indywidualnie razem z całkowitym czasem, na przykład:time ( time command1 ; time command2 ; time command3 )
Oczywiście, jeśli chcesz około dwudziestu poleceń, możesz lepiej użyć rozwiązania tej odpowiedzi. Ale wtedy powinieneś zacząć myśleć o umieszczeniu wszystkich poleceń w skrypcie ...root@hostname:~# time [command]
Rozróżnia również czas używany w czasie rzeczywistym i czas systemowy.
źródło
time
zapisuje do tty, a nie stderr. Co, jak sądzę, pogarsza sprawę.Aby dokonać pomiaru delta linia po linii, wypróbuj gnonom .
źródło
Dodawanie do odpowiedzi @ mob:
Dołączenie
%N
dodate +%s
daje nam dokładność nanosekundową:start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
źródło
Jeśli zaczynam długotrwały proces, taki jak kopiowanie lub hasz, i chcę wiedzieć później, ile czasu to zajęło, po prostu robię to:
Co spowoduje następujący wynik:
To prawda, jak zaimplementowano tutaj, nie jest zbyt precyzyjny i nie oblicza czasu, który upłynął. Ale to proste i czasami wszystko, czego potrzebujesz.
źródło
W zsh możesz użyć
W bash lub zsh możesz użyć
command time ...
Te (poprzez różne mechanizmy) wymuszają użycie zewnętrznego polecenia.
źródło
Właśnie
ps -o etime= -p "<your_process_pid>"
źródło