Linux замерить время выполнения команды

Get program execution time in the shell

I want to execute something in a linux shell under a few different conditions, and be able to output the execution time of each execution. I know I could write a perl or python script that would do this, but is there a way I can do it in the shell? (which happens to be bash)

11 Answers 11

Use the built-in time keyword:

$ help time time: time [-p] PIPELINE Execute PIPELINE and print a summary of the real time, user CPU time, and system CPU time spent executing PIPELINE when it terminates. The return status is the return status of PIPELINE. The `-p' option prints the timing summary in a slightly different format. This uses the value of the TIMEFORMAT variable as the output format.
real 0m2.009s user 0m0.000s sys 0m0.004s

How is this used on a command like time -p i=x; while read line; do x=x; done < /path/to/file.txt ? It immediatly returns 0.00 unless I don't put anything before the while loop.. what gives?

@natli: While time can time an entire pipeline as-is (by virtue of being a Bash keyword), you need to use a group command ( < . ; . ; >) to time multiple commands: time -p < i=x; while read line; do x=x; done < /path/to/file.txt; >

You can get much more detailed information than the bash built-in time (i.e time(1), which Robert Gamble mentions). Normally this is /usr/bin/time .

Editor’s note: To ensure that you’re invoking the external utility time rather than your shell’s time keyword, invoke it as /usr/bin/time . time is a POSIX-mandated utility, but the only option it is required to support is -p . Specific platforms implement specific, nonstandard extensions: -v works with GNU‘s time utility, as demonstrated below (the question is tagged linux); the BSD/macOS implementation uses -l to produce similar output — see man 1 time .

Example of verbose output:

$ /usr/bin/time -v sleep 1 Command being timed: "sleep 1" User time (seconds): 0.00 System time (seconds): 0.00 Percent of CPU this job got: 1% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.05 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 0 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 210 Voluntary context switches: 2 Involuntary context switches: 1 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0 

Источник

How can I measure the execution time of a terminal process?

I’m trying to measure the execution time of a process that I call via the command line (i.e., I want to find out how long it takes to for the process to finish). Is there any command that I can add to the command calling the process that will achieve this?

Читайте также:  Qemu guest agent astra linux

8 Answers 8

Add time before the command you want to measure. For example: time ls .

The output will look like:

real 0m0.606s user 0m0.000s sys 0m0.002s 

Explanation on real , user and sys (from man time ):

  • real : Elapsed real (wall clock) time used by the process, in seconds.
  • user : Total number of CPU-seconds that the process used directly (in user mode), in seconds.
  • sys : Total number of CPU-seconds used by the system on behalf of the process (in kernel mode), in seconds.

@ninjalj, can you provide more information on what the real , user , and sys times are that this command returns?

Note that you may need sudo apt-get install time if you are using a shell where time is not a builtin.

Note that this is the output from Bash’s time builtin, but man time would be about an executable (like /usr/bin/time , from the time package), and its output would look different. Also in Bash, you can run help time for help with the builtin.

Note that the process end does not mean all the work is finished. A copy may take additional minutes after the «time» returns for flushing system bufffers (therefor with unallocated sys time also).

For a line-by-line delta measurement, try gnomon.

It is a command line utility, a bit like moreutils’s ts, to prepend timestamp information to the standard output of another command. Useful for long-running processes where you’d like a historical record of what’s taking so long.

Piping anything to gnomon will prepend a timestamp to each line, indicating how long that line was the last line in the buffer—that is, how long it took the next line to appear. By default, gnomon will display the seconds elapsed between each line, but that is configurable.

Источник

Команда time в Linux

В некоторых случаях при работе с терминалом Linux нужно знать время выполнения тех или иных команд, например, для отслеживания проблем. Для этой задачи существует утилита time. Конкретно про нее и пойдет речь в нашей статье.

Мы расскажем, как работает команда time Linux и какой у неё синтаксис. Затем перейдем к описанию доступных опций. А в конце упомянем несколько популярных сценариев использования.

Синтаксис и опции time

Утилита запускает заданную пользователем команду и после этого выводит информацию о времени ее выполнения. У нее достаточно удобный синтаксис. Сначала нужно указать опции для time, затем – выполняемую команду, а в конце – аргументы к ней:

$ time опции команда_для_выполнения аргументы

Рассмотрим список доступных опций:

  • -o, —output – сохранять данные в выбранный файл вместо стандартного вывода в терминале. При этом старые данные в файле будут перезаписаны.
  • -a, —append – добавлять в файл новую информацию, а не перезаписывает старую. Опция полезна только в сочетании с -o.
  • -f, —format – выбрать определенный формат вывода. Подробности о форматировании описаны в следующем разделе статьи.
  • -p, —profitably – использовать формат вывода данных для соответствия со стандартом POSIX 1003.2.
  • -v, —verbose – выводить подробную информацию о выполнении программы.
  • -V, —version – вывести версию утилиты time.
Читайте также:  Linux владелец группа остальные

В этом списке представлены только основные опции. Получить подробную информацию можно командой:

Опции форматирования вывода

По умолчанию time может выводить информацию в не комфортном для чтения виде.

wOkvH25Ll+XQwAAAABJRU5ErkJggg==

По этой причине для нее желательно задавать опции форматирования вывода, о которых и пойдет сейчас речь. Всего их три штуки. В качестве примера для их рассмотрения возьмем команду apt-get update.

Опция -v используется для вывода подробной информации:

sudo time -v apt-get update

wF9RgGh8lwdFwAAAABJRU5ErkJggg==

Опция -p нужна для вывода данных в формате, соответствующем стандарту POSIX 1003.2:

sudo time -p apt-get update

F6XReMMI8NXTAAAAAElFTkSuQmCC

А с помощью опции -f или —format детально задается форматирование вывода. Этот момент стоит рассмотреть более детально.

Строка с данными о форматировании, как правило, включает в себя спецификаторы ресурсов и обычный текст. Знак % обозначает, что следующий после него символ следует воспринимать как спецификатор ресурсов.

С помощью знака \ задается разделительный символ. Есть три доступных варианта: \t – табуляция, \n – новая строка, \\ – обратная косая черта. Если после \ указать любой другой символ, то в терминале появится вопросительный знак (?), который говорит об ошибке ввода.

Остальной текст в строке формата полностью копируется в поле вывода. При этом time всегда начинает вывод данных с новой строки после информации о выполнении самой команды.

Рассмотрим доступные спецификаторы ресурсов:

  • % – литерал %. То есть для вывода знака процента нужно в команде указать %%.
  • С – имя команды и использованные аргументы.
  • D – средний размер неразделенной области данных. Отображается в килобайтах.
  • E – реальное время выполнения команды в привычном часовом формате. Выводится в виде [часы:]минуты:секунды.
  • N – количество мажорных ошибок или ошибок, связанных с вводом-выводом, возникших при выполнении процесса.
  • I – количество входов в файловую систему.
  • K – среднее значение задействованной памяти для кода (text), инициализированных данных (data) и стека (stack). Отображается в килобайтах.
  • M – максимальный размер резидентного множества во время выполнения процесса в килобайтах.
  • O – количество выходов из файловой системы.
  • P – процент загруженности CPU (центрального процессора).
  • R – количество минорных ошибок.
  • S – время в секундах, в течении которого CPU использовался системой от имени процесса в режиме супервизора (kernel mode).
  • U – время в секундах, в течении которого CPU использовался процессом напрямую в пользовательском режиме (user mode).
  • W – сколько раз процесс был выгружен из оперативной памяти.
  • Xтут не понял.
  • Z – размер системной страницы. Это значение – константа, но она различается между системами.
  • c – количество невольных переключений контекста при выполнении процесса.
  • e – реальное время выполнения команды в привычном часовом формате. Выводится в секундах.
  • k – количество сигналов, дошедших до процесса.
  • p – средний размер неразделенного стека процесса, в килобайтах.
  • r – количество полученных сокетных сообщений.
  • s – количество отправленных сокетных сообщений.
  • t – средний размер резидентного множества процесса, в килобайтах.
  • w – количество добровольных переключений контекста при выполнении процесса.
  • x – код возврата для команды.
Читайте также:  Using parted in linux

Это были все спецификаторы ресурсов, использующиеся при выборе форматирования для time. Теперь перейдем к сценариям использования команды.

Как узнать время выполнения команды Linux

Мы рассмотрим три основных примера, которые довольно часто используются: вывод данных в терминал, вывод в отдельный файл и вывод с форматированием.

1. Вывод времени выполнения в терминал

В качестве примера мы возьмем команду sleep, которая делает паузу на указанное время. Это будет очень наглядный пример, ведь время паузы будет совпадать с временем выполнения команды в time:

A75zxCHQlT8cAAAAAElFTkSuQmCC

Еще хотелось бы упомянуть ситуацию, когда выполнение команды переводит окно терминала в другой режим, например, при запуске редактора nano для изменения файла /home/root-user/script.txt:

time nano /home/root-user/scripts/main_script.txt

После завершения работы редактора вы увидите общее время, в течение которого вы работали с файлом.

Информацию о результатах работы команды time можно сохранить в отдельный файл с помощью опции -o. В таком случае в окне терминала они выводиться не будут. Возьмем для примера извлечение содержимого архива ~/data/data.tar.gz с помощью утилиты tar. Информацию о времени выполнения сохраним в новом файле ~/data/data_time.txt. Еще добавим к команде опцию -v, чтобы получить подробные сведения:

sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

AQzh6DI6rLe2AAAAAElFTkSuQmCC

3. Вывод с форматированием

Исходный вариант форматирования данных подходит далеко не во всех случаях. В качестве примера мы возьмем ранее использованную команду для извлечения архива, но не станем сохранять данные в файл. При ее выполнении нам интересно:

  • Информация о самой команде и заданных опциях – это спецификатор %C.
  • Загруженность CPU – спецификатор %P.
  • Общее время выполнения в секундах – спецификатор %e.

Для комфортного восприятия каждый пункт будет выводиться в отдельной строке с помощью разделителя \n. При этом они все будут подписаны понятным образом.

Вот как выглядит итоговый вариант команды:

sudo time -f «Информация о команде:\n%C\nЗагруженность CPU: %P\nВремя выполнения: %e сек» tar -xvf ~/data/data.tar.gz -C ~/data

8f7FfBnBvsvoYAAAAASUVORK5CYII=

Обратите внимание, что весь текст, кроме символов после % и \, полностью отображается в терминале. Это удобный способ разметки

Выводы

В рамках данной статьи вы узнали как работает команда time Linux, которая следит за выполнением заданной команды и выдает подробную информацию о времени выполнения и т. д. Основная сложность при ее использовании – понимание опций для форматирования вывода. Но если в них разобраться, то больше никаких проблем не возникнет. Для вашего удобства мы упомянули конкретные примеры использования.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector