Печать времени выполнения команды оболочки
можно ли распечатать время выполнения команды оболочки со следующей комбинацией?
root@hostname:~# "command to execute" && echo "execution time"
8 ответов:
не забывайте, что есть разница между Баша строение
time
(который должен быть вызван по умолчанию, когда вы делаетеtime command
) и/usr/bin/time
(который должен потребовать, чтобы вы назвали ее полный путь).строение
time
всегда печатает в stderr, но/usr/bin/time
позволит вам отправлять выходные данные time в определенный файл, поэтому вы не вмешиваетесь в поток stderr выполняемой команды. Кроме того,/usr/bin/time
формат настраивается в командной строке или by переменная окружения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
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
root@hostname:~# time [command]
Он также различает между используемым реальным временем и используемым системным временем.
для построчного измерения дельты, попробовать gnonom.
это утилита командной строки, немного похожая на ts moreutils, чтобы добавить информацию о метке времени в стандартный вывод другой команды. Полезно для длительных процессов, где вы хотели бы историческую запись того, что так долго.
Piping anything to gnomon будет добавлять метку времени к каждой строке, указывая, как долго эта строка была последней строкой в буфере-то есть, как долго понадобилась следующая строка, чтобы появиться. По умолчанию gnomon будет отображать секунды, прошедшие между каждой строкой,но это настраивается.
добавление к ответу @ mob:
добавление
%N
todate +%s
дает нам точность наносекунды:start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
Если я начинаю длительный процесс, как копия или хэш, и я хочу знать позже, сколько времени это заняло, я просто делаю это:
$ date; sha1sum reallybigfile.txt; date
что приведет к следующему результату:
Tue Jun 2 21:16:03 PDT 2015 5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt Tue Jun 2 21:33:54 PDT 2015
конечно, как реализовано здесь, это не очень точно и не вычисляет затраченное время. Но это грязь просто и иногда все, что вам нужно.