Command for linux time

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 

Источник

Читайте также:  Directory or iso image alt linux

How can I get the current date and time in the terminal and set a custom command in the terminal for it? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

I have to check the time in a Linux terminal. What is the command for getting date and time in a Linux terminal? Is there a way in which we can set a custom function?

This question seems on topic as it relates to a specific computing task on a specific operating system (which is just a software layer itself). As, @drstevens said, this is the first result in Google and it was informative for me needs. If it were off-topic, it would read something like «Do operating systems tell time?» or «What do you guys think about operating systems that tell time.» Stack Overflow is a great resource for beginners and it seems like this was closed as for being too beginner of a question. It should instead just be listed as a beginner question.

StackExchange is the place for answers. This is a good question. Perhaps the question should be migrated, but it should not be closed, in my opinion. This question appeared first in my Google results when I searched for «linux check time».

Источник

Команда 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 – код возврата для команды.
Читайте также:  Проверка сетевого доступа 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