- Команда time в Linux
- Версии команды time
- Использование команды Time в Linux
- Заключение
- Как найти время выполнения команды или процесса в Linux
- Найти время выполнения команды или процесса в Linux
- time и /usr/bin/time
- Краткое введение в программу «GNU time»
- Время выполнения сценария оболочки в Linux
- Время выполнения сценария оболочки
- Вывести время выполнения команд в Linux
- Команда time
- Вызов консольной команды time
- Другой time
- Параметры вызова внешней команды time
- Внешний time по умолчанию
- Измерение времени выполнения команд в скриптах
- How to get execution time of a script effectively?
- 19 Answers 19
- Related:
Команда time в Linux
Например, если у вас есть два разных скрипта, выполняющих одну и ту же работу, и вы хотите знать, какой из них работает лучше, вы можете использовать команду time в Linux для определения продолжительности выполнения каждого скрипта.
Версии команды time
И Bash, и Zsh, наиболее широко используемые оболочки Linux, имеют свои собственные встроенные версии команды time, которые имеют приоритет над командой Gnu time.
Вы можете использовать команду type, чтобы определить, является ли время двоичным или встроенным ключевым словом.
Чтобы использовать команду time в Gnu, вам нужно указать полный путь к двоичному файлу time, обычно /usr/bin/time используйте команду env или начальную обратную косую черту \time которая предотвращает использование обеих и встроенных функций.
Время Gnu позволяет вам форматировать выходные данные и предоставляет другую полезную информацию, такую как память ввода-вывода и IPC-вызовов.
Использование команды Time в Linux
В следующем примере мы собираемся измерить время, необходимое для загрузки ядра Linux, с помощью инструмента wget:
То, что будет напечатано как вывод, зависит от версии команды time, которую вы используете:
- реальное или общее или прошедшее (время настенных часов) – это время от начала до конца вызова. Это время от момента нажатия клавиши Enter до момента завершения команды wget.
- user – количество процессорного time, проведенного в пользовательском режиме.
- system или sys – количество процессорного time, проведенного в режиме ядра.
Заключение
К настоящему time вы должны хорошо понимать, как использовать команду time.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как найти время выполнения команды или процесса в Linux
Вероятно, вы знаете время начала команды / процесса и как долго процесс выполняется в Unix-подобных системах.
Но когда вы его закончили и / или какое общее время, затраченное на выполнение команды / процесса?
В Unix-подобных системах есть утилита с именем «GNU time», специально предназначенная для этой цели.
Используя утилиту Time, мы можем легко измерить общее время выполнения команды или программы в операционных системах Linux.
Хорошо, что команда «Time» поставляется в большинстве дистрибутивов Linux, поэтому вам не нужно беспокоиться об установке.
Найти время выполнения команды или процесса в Linux
Чтобы измерить время выполнения команды / программы, просто запустите.
Вышеуказанные команды отображают общее время выполнения команды «ls».
Замените «ls» любой командой / процессом по вашему выбору, чтобы найти общее время выполнения.
- real – возвращает общее время, затраченное командой / программой,
- user – указывает время, затраченное программой в пользовательском режиме,
- sys – указывает время, затраченное программой в режиме ядра.
time и /usr/bin/time
Как вы могли заметить, в приведенных выше примерах мы использовали две команды «time» и «/usr/bin/time».
Итак, вы можете задаться вопросом, в чем разница между ними.
Сначала давайте посмотрим, что на самом деле «timeя» использует команду «type».
Для тех, кто не знает, команда Type используется для получения информации о команде Linux.
Как видите time – две штуки
- Ключевое слово, встроенное в оболочку BASH
- Исполняемый файл – /usr/bin/time
Поскольку ключевые слова оболочки имеют приоритет над исполняемыми файлами, когда вы просто запускаете runmimommand без полного пути, вы запускаете встроенную команду оболочки.
Но, когда вы запускаете /usr/bin/time, вы запускаете реальную программу времени GNU time.
Итак, чтобы получить доступ к реальной команде, вам может потребоваться указать ее явный путь.
Встроенное ключевое слово оболочки «time» доступно в большинстве оболочек, таких как BASH, ZSH, CSH, KSH, TCSH и т. д.
Ключевое слово оболочки «time» имеет меньше опций, чем исполняемые файлы.
Единственный вариант, который вы можете использовать в ключе «time», – это -p.
Теперь вы знаете, как найти общее время выполнения данной команды / процесса, используя команду «time».
Хотите узнать немного больше об утилите «GNU time»? Читайте дальше!
Краткое введение в программу «GNU time»
Программа GNU time запускает команду / программу с заданными аргументами и суммирует использование системных ресурсов в качестве стандартного вывода после завершения команды.
В отличие от ключевого слова time, программа GNU time не просто отображает время, используемое командой / процессом, но и другие ресурсы, такие как память, вызовы ввода-вывода и IPC.
Типичным синтаксисом команды Time является:
options в приведенном выше синтаксисе ссылаются на набор флагов, которые могут использоваться командой time для выполнения определенной функциональности.
Список доступных опций приведен ниже^
- -f, -format – Используйте этот параметр, чтобы указать формат вывода по вашему желанию.
- -p, -portability – Использовать переносимый формат вывода.
- -o file, -output = FILE – Записывает вывод в FILE вместо отображения в качестве стандартного вывода.
- -a, -append – Добавить файл в файл вместо перезаписывания.
- -v, -verbose – Этот параметр отображает подробное описание вывода утилиты «время».
- -Quiet – этот параметр запрещает утилиту времени «время» сообщать о статусе программы.
- При использовании программы «GNU time» без каких-либо параметров вы увидите вывод, как показано ниже.
Если вы запустите ту же команду с встроенным ключевым словом «time», результат будет немного другим:
В некоторых случаях вы можете записать вывод использования системного ресурса в файл, а не отображать его в терминале. Для этого используйте флаг -o, как показано ниже.
Как вы можете видеть на выходе, утилита Time не отображает результат. Потому что мы записываем вывод в файл с именем file.txt. Давайте посмотрим на этот файл:
Когда вы используете флаг -o, если нет файла с именем «file.txt», он будет создавать и записывать вывод в него.
Если файл.txt уже присутствует, он перезапишет его содержимое.
Вы также можете добавить вывод в файл, а не переписывать его, используя флаг -a.
Флаг -f позволяет пользователям управлять форматом вывода по своему усмотрению.
Скажем, например, следующая команда отображает вывод команды «ls» и показывает только пользователя, систему и общее время.
Помните, что встроенная команда «time» не поддерживает все функции программы GNU time.
Для получения дополнительной информации о утилите времени GNU см. Справочные страницы.
Источник
Время выполнения сценария оболочки в Linux
Главное меню » Операционная система Linux » Время выполнения сценария оболочки в Linux
Задумывались ли вы, сколько времени потребовалось для запуска определенного сценария оболочки? Вы, вероятно, уже сталкивались с определенными сценариями оболочки, которые выводят время, затраченное на выполнение сценария.
Эта информация полезна для анализа, особенно если выполнение сценариев занимает некоторое время.
Как администратор, если вы создадите сценарий, вы можете отобразить время выполнения в конце как дополнительную информацию для конечного пользователя. Это один из нескольких способов сделать ваши сценарии оболочки более интерактивными и более подробными.
Время выполнения сценария оболочки
Для этой цели оболочка Bash и несколько других оболочек предоставляют встроенную переменную SECONDS. Эта переменная хранит количество секунд с момента открытия оболочки, и в случае сценария это будет количество секунд с момента запуска сценария.
Вы можете использовать команду echo в Linux, чтобы отобразить значение этой переменной SECONDS.
Позвольте нам показать вам очень простой пример сценария:
Vs использую команду bash sleep в приведенном выше скрипте, которая ничего не делает, но ждет указанное время.
Какой, по вашему мнению, должен быть вывод вышеприведенного скрипта?
Этот скрипт занял 12 секунд для выполнения
Посмотрите, как легко было отобразить время выполнения скрипта.
Вы также можете использовать команду time, чтобы получить время выполнения скрипта.
Вывод для вышеупомянутого будет немного отличаться от того, что вы видели раньше. Здесь будет подробно показано время выполнения. Вы можете видеть, что время выполнения составляет 12,010 секунд, а не 12 секунд.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Вывести время выполнения команд в Linux
Измерить время выполнения команды в Linux не просто, а очень просто. Но это только на первый взгляд. Давайте посмотрим на команду time более внимательно.
Команда time
Вызов консольной команды time
Если стоит задача измерить только время выполнения команды в Linux, то все что вам необходимо — команда time.
Синтаксис данной команды очень простой:
Пример вызова — замеряем время выполнения команды sleep 1:
С помощью ключа -p можно заставить команду выводить время выполнения в сжатом Posix формате:
Другой time
Теперь разберемся, что же за команду мы выполняем:
Вот оно что! Оказывается, time, который мы вызывали — это внутренняя команда Shell.
А теперь попробуем сделать так:
А это уже внешняя команда, расположенная по пути: /usr/bin.
Попробуем вызвать ее:
Параметры вызова внешней команды time
Перенаправление вывода статистики в файл, вместо вывода в стандартный поток ошибок. По умолчанию, существующий файл будет полностью перезаписан.
Применяется для сбора статистики из программ с пользовательским интерфейсом или выводящих информацию в поток ошибок.
-a, —append Дополняет существующий файл новой информацией. Применяется совместно с опциями ‘-o’ или ‘—output’ . -f FORMAT, —format FORMAT
Используется шаблон FORMAT для вывода статистики.
Формат вывода по умолчанию:
%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
%Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps
Описание используемых шаблонов приведено в конце статьи.
—help Вывод краткой помощи и завершение команды. -p, —portability
Выводит информацию по стандарту POSIX 1003.2:
real %e
user %U
sys %S
-v, —verbose Выводит расширенную статистику использования ресурсов с описанием каждого параметра. —quiet «Тихий режим» — подавление вывода команды, в том числе и ошибок. -V, —version Вывести версию команды time и завершить выполнение.
Внешний time по умолчанию
Чтобы явно указать, какую из команд мы хотим вызвать, можно воспользоваться следующим способом:
Для того, чтобы по умолчанию запускалась внешняя команда time достаточно выполнить:
Это установит внешнюю команду time по умолчанию для текущей сессии.
Чтобы применить эти изменения для всех последующих сессий, добавьте команду alias в файл
/.bashrc (изменения для текущего пользователя) или /etc/bash.bashrc (изменения затронут всех пользователей системы).
Измерение времени выполнения команд в скриптах
Довольно часто необходимо замерить время выполнения какого-либо участка кода в скрипте bash.
Для этого в исследуемый скрипт добавим немного кода:
Источник
How to get execution time of a script effectively?
I would like to display the completion time of a script.
What I currently do is —
This just show’s the time of start and end of the script. Would it be possible to display a fine grained output like processor time/ io time , etc?
19 Answers 19
Just use time when you call the script:
If time isn’t an option,
or, if you need sub-second precision and have bc installed,
Just call times without arguments upon exiting your script.
With ksh or zsh , you can also use time instead. With zsh , time will also give you the wall clock time in addition to the user and system CPU time.
To preserve the exit status of your script, you can make it:
Or you can also add a trap on EXIT :
That way, times will be called whenever the shell exits and the exit status will be preserved.
Also note that all of bash , ksh and zsh have a $SECONDS special variable that automatically gets incremented every second. In both zsh and ksh93 , that variable can also be made floating point (with typeset -F SECONDS ) to get more precision. This is only wall clock time, not CPU time.
I’m a bit late to the bandwagon, but wanted to post my solution (for sub-second precision) in case others happen to stumble upon this thread through searching. The output is in format of days, hours, minutes, and finally seconds:
Hope someone out there finds this useful!
My method for bash :
Personally, I like to wrap all my script code in some «main» function like so:
Notice how easy is to use the time command in this scenario. Obviously you’re not measuring the precise time including script parse time, but I find it accurate enough in most situations.
Yes, this calls Python, but if you can live with that then this is quite a nice, terse solution.
This question is quite old but in trying to find my favorite way of doing it this thread came up high. and I’m surprised no one mentioned it:
‘perf’ is a performance analyzing tool included in the kernel under ‘tools/perf’ and often available to install as a separate package (‘perf’ in CentOS and ‘linux-tools’ on Debian/Ubuntu). The Linux Kernal perf Wiki has much more information about it.
Running ‘perf stat’ gives quite a bit of details including average execution time right at the end:
A small shell function that can be added before commands to measure their time:
Then use it in your script, or on your command line like so:
Just use time [any command] . Ex: time sleep 1 will sleep for a real time (ie: as timed by a stop watch) of
1.020 sec, as shown here:
What a beautiful thing. You can put any command after it, and it outputs the result in a nice, human-readable form. I really like to use it for timing builds. Ex:
. or for git operations which can potentially be really long, so I can develop realistic mental expectations:
For more-customized timing needs where you may need to manipulate the output or convert it to other forms, in bash, use the internal $SECONDS variable. Here’s a demo, including converting these seconds to other units, such as floating point minutes:
Note that dt_min gets rounded from 0.01666666666. (1 second = that many minutes) to 0.017 in this case since I’m using the printf function to round. The sleep 1; part below is where you’d call your script to run and time, but I’m just sleeping for 1 second instead for the sake of this demo.
Related:
- Read more about bc and printf in my answer here: https://stackoverflow.com/questions/12722095/how-do-i-use-floating-point-division-in-bash/58479867#58479867
- I don’t remember where I first learned about the time command anymore, but it may have been from @Trudbert’s answer right here.
Using only bash it is also possible to measure and calculate the time duration for a portion of the shell script (or the elapsed time for the entire script):
you can now either just print the difference:
if you only need incremental duration do:
You can also store the duration in a variable:
Timing function based on SECONDS , limited to second-level granularity only, doesn’t use any external commands:
Use bash time builtin?
The accepted solution using time writes to stderr .
The solution using times writes to stdout .
The solutions using $SECONDS are missing sub-second precision.
The other solutions involve calling external programs like date or perf which is not efficient.
If you are fine with any of these, use it.
But if you need an efficient solution to get the times with millisecond precision and need them into variables such that the original output remains undisturbed you may combine process substitution with some redirections around time which is much faster than calling external programs and allows redirections around the timing wrapper script as on the original command/script.
Select one of the following variants parsing the output of time appropriate to you needs:
Shortest variant where stdout of $Cmd is written to stderr and nothing to stdout :
Longer variant that keeps original stdout and stderr separate of each other:
Most complicated variant includes closing the extra file descriptors such that $Cmd is called as if without this timing wrapper around it and lvm commands like vgs do not complain about leaked file descriptors:
You can even fake a floating point addition in bash without calling bc which would be much slower:
Possible outputs with the two examples of $Cmd on a slow CPU:
Источник