Чи можна надрукувати час виконання команди оболонки з наступною комбінацією?
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
, тоді як вбудований time
формат bash налаштовується лише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
пише в tty, а не stderr. Що, на мою думку, погіршує ситуацію.
Для поетапного вимірювання дельти спробуйте gnonom .
Це утиліта командного рядка, трохи подібна ts moreutils, щоб додати інформацію про мітки часу до стандартного виводу іншої команди. Корисно для тривалих процесів, де ви хочете отримати історичний запис того, що так довго триває.
Подаючи що-небудь до 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 може бути встановлений форматний рядок, який вказує, як повинна відображатися інформація про час"