- Команда time в Linux
- Синтаксис и опции time
- Опции форматирования вывода
- Как узнать время выполнения команды Linux
- 1. Вывод времени выполнения в терминал
- 3. Вывод с форматированием
- Выводы
- Check How Long A Bash Script Takes to Run With Time Command
- Using time command
- Time with a text-based application
- Time with a GUI application
- Traditional GNU Version
- GNU Time -p = (bash) time
- Conclusion
Команда 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.
В этом списке представлены только основные опции. Получить подробную информацию можно командой:
Опции форматирования вывода
По умолчанию time может выводить информацию в не комфортном для чтения виде.
По этой причине для нее желательно задавать опции форматирования вывода, о которых и пойдет сейчас речь. Всего их три штуки. В качестве примера для их рассмотрения возьмем команду apt-get update.
Опция -v используется для вывода подробной информации:
sudo time -v apt-get update
Опция -p нужна для вывода данных в формате, соответствующем стандарту POSIX 1003.2:
sudo time -p apt-get update
А с помощью опции -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 – код возврата для команды.
Это были все спецификаторы ресурсов, использующиеся при выборе форматирования для time. Теперь перейдем к сценариям использования команды.
Как узнать время выполнения команды Linux
Мы рассмотрим три основных примера, которые довольно часто используются: вывод данных в терминал, вывод в отдельный файл и вывод с форматированием.
1. Вывод времени выполнения в терминал
В качестве примера мы возьмем команду sleep, которая делает паузу на указанное время. Это будет очень наглядный пример, ведь время паузы будет совпадать с временем выполнения команды в time:
Еще хотелось бы упомянуть ситуацию, когда выполнение команды переводит окно терминала в другой режим, например, при запуске редактора 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
3. Вывод с форматированием
Исходный вариант форматирования данных подходит далеко не во всех случаях. В качестве примера мы возьмем ранее использованную команду для извлечения архива, но не станем сохранять данные в файл. При ее выполнении нам интересно:
- Информация о самой команде и заданных опциях – это спецификатор %C.
- Загруженность CPU – спецификатор %P.
- Общее время выполнения в секундах – спецификатор %e.
Для комфортного восприятия каждый пункт будет выводиться в отдельной строке с помощью разделителя \n. При этом они все будут подписаны понятным образом.
Вот как выглядит итоговый вариант команды:
sudo time -f «Информация о команде:\n%C\nЗагруженность CPU: %P\nВремя выполнения: %e сек» tar -xvf ~/data/data.tar.gz -C ~/data
Обратите внимание, что весь текст, кроме символов после % и \, полностью отображается в терминале. Это удобный способ разметки
Выводы
В рамках данной статьи вы узнали как работает команда time Linux, которая следит за выполнением заданной команды и выдает подробную информацию о времени выполнения и т. д. Основная сложность при ее использовании – понимание опций для форматирования вывода. Но если в них разобраться, то больше никаких проблем не возникнет. Для вашего удобства мы упомянули конкретные примеры использования.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Check How Long A Bash Script Takes to Run With Time Command
The time command in Linux measures how long a particular command or script runs. Learn how to use this command.
This is a simple command that measures… you guessed it, time. It is not a clock application, though. It measures the time taken in running a program or script.
[email protected]:~$ time ./script.sh real 0m12.010s user 0m0.004s sys 0m0.006s
I’ll explain the time command and its output in a minute.
There are a few different versions of the time utility. Here we will be looking at the Bash version, since this is the one you’re most likely to encounter on your system. There is also a Zsh version and a GNU version.
Let’s avoid confusion and verify your version now.
[email protected]:~$ type time time is a shell keyword
If your output looks like this, that’s perfect. That means that you are using bash. The command performs the same task in all its iterations, so if you’re not using bash, fear not, you will still be able to understand what is happening. However, it may look quite different.
Using time command
Time command measures the following:
- real time: total time elapsed
- user: OS processing in user Mode
- sys: OS processing in kernel mode
It can be used with any command or piped commands.
Time with a text-based application
Let’s look at an example with nano. Nano is a terminal based text editor. If I start nano and then promptly exit through the application (Ctrl+X), the output will look like this:
time nano real 0m1.465s user 0m0.031s sys 0m0.006s
Time with a GUI application
This also works with a GUI application. The output will be returned once the application is exited normally or if an interrupt (CTRL+C) is input at the terminal.
time firefox real 0m6.784s user 0m4.962s sys 0m0.459s
Traditional GNU Version
As I touched on before, most Linux users run Bash, which essentially uses a shortcut to create human readable content. You can run the full GNU version by using the escape character \ . This will bypass the built-in shortcut.
This time I will just use sleep command to create a dummy job. The number is the duration in seconds. You will also see this reflected in the output’s real time.
Note that because it is a dummy task, there is no actual resource time devoted to it.
[email protected]:~$ \time sleep 3 0.00user 0.00system 0:03.00elapsed 0%CPU (0avgtext+0avgdata 1944maxresident)k 0inputs+0outputs (0major+75minor)pagefaults 0swaps
This output is a little more difficult to read but it also shares some information about RAM usage that you might find helpful.
GNU Time -p = (bash) time
The output that you normally see with the bash version is kind of like an alias to GNU time run with the -p option.
[email protected]:~$ \time -p sleep 3 real 3.00 user 0.00 sys 0.00
As you can see this gives us the same output as if we had run it with the bash shortcut.
Conclusion
Did you enjoy our guide to the time command? I hope all of these tips taught you something new.
If you like this guide, please share it on social media. If you have any comments or questions, leave them below. If you have any suggestions for topics you’d like to see covered, feel free to leave those as well. Thanks for reading.