Linux время исполнения команды

Команда Time в Linux

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

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

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

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

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

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

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

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

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

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

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

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

С помощью знака \ задается разделительный символ. Есть три доступных варианта: \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 – код возврата для команды.
Читайте также:  Zabbix мониторинг сервисов linux

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

Время выполнения команды LINUX

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

ВЫВОД ВРЕМЕНИ ВЫПОЛНЕНИЯ В ТЕРМИНАЛ

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

В ремя записано сразу же в трех графах. Пройдемся по каждой из них:

real – общее время от начала выполнения процесса и до его завершения.

user – время, в течение которого процесс был задействован в режиме пользователя (user mode).

sys – время, в течение которого процесс был задействован в режиме супервизора (kernel mode).

Следующий полезный сценарий – вывод времени, в течение которого загрузится заголовок веб-страницы через утилиту curl. В качестве примера возьмем наш сайт:

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

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

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

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

Информацию о результатах работы команды 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

Файл получится следующего содержания.

Читайте также:  Astra linux логотип png

В случае использования опции -o следует помнить, что она перезаписывает старую информацию в выходном файле на новую. Это применимо при создании новых файлов, но для ведения логов не подходит. С помощью дополнительной опции -a перезапись содержимого заменяется на добавление новой информации:

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

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

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

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

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

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

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

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

Источник

Отслеживание времени выполнения команд с помощью утилиты time

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

Командная строка предлагает множество одноцелевых утилит, благодаря которым нет необходимости писать дополнительный код. Команда time – одна из таких команд. Важно помнить, что команда time никак не связана с командой date, которая выводит дату и время системы. Утилита time измеряет время выполнения программы или сценария и сообщает вам полученное значение.

В этом мануале вы узнаете, как использовать команду time и как читать ее выходные данные.

Примечание: Если не указано иное, примеры в этом руководстве выполняются в оболочке Bash в Linux.

1: Время выполнения команды

Чтобы рассчитать продолжительность выполнения команды, укажите в ней time в качестве префикса.

Метод выполнения time зависит от вашей операционной системы. В некоторых оболочках (bash и zsh, например) утилита time является встроенной командой; но также есть и отдельная команда GNU time – и ее аргументы отличаются от тех, что использует встроенная time.

Используйте следующую команду, чтобы посмотреть, как работает time в вашей системе:

Вы получите такой результат:

time is a shell keyword
time is /usr/bin/time

В этом случае есть и встроенная команда оболочки time, и версия time , установленная в каталог /usr/bin/time.

Если вы хотите использовать GNU-версию time, вы можете поставить перед ней обратный слеш:

Если вы этого не сделаете, оболочка будет использовать встроенную версию.

Примечание: Оболочка fish не имеет собственной реализации time. Если вы используете fish, вам нужно убедиться, что у вас установлена GNU команда time.

Читайте также:  Network manager kali linux установка

Оба метода служат одной и той же цели, хотя версия GNU имеет более продвинутые параметры форматирования.

Давайте исследуем время выполнения команды tree в корне вашей файловой системы. Эта команда отобразит визуальное дерево всех ваших файлов и каталогов.

Команда tree не всегда установлена по умолчанию, но в системах Ubuntu и Debian вы можете установить ее с помощью apt:

В macOS ее можно установить с помощью Homebrew:

Теперь, когда команда tree установлена, используйте ее, чтобы просмотреть все файлы в системе, и добавьте к ней префикс time, чтобы узнать, сколько времени это займет:

Вы увидите, как прокручивается информация о файлах. В конце концов команда покажет вам потраченное время:

# Здесь будет вывод команды tree.
166590 directories, 1568127 files
tree / 12.24s user 10.37s system 66% cpu 33.827 total

Обратите внимание, что выполненная вами команда tree / повторяется командой time. Вывод отображает несколько фрагментов информации, но пока мы сосредоточимся на значении total:

tree / 12.24s user 10.37s system 66% cpu 33.827 total

Именно столько времени потребовалось для выполнения команды в секундах.

Команда time также работает, если вы отменили выполнение команды с помощью Ctrl+C. Если вы снова запустите time tree / и быстро нажмете Ctrl+C, вывод команды tree остановится, а на экране будут представлены результаты time за то время, что успела поработать команда до того, как вы ее остановили.

2: Использование ресурсов

Вывод time включает три значения в дополнение к общей продолжительности выполнения команды, total.

tree / 12.24s user 10.37s system 66% cpu 33.827 total

Первое значение – user. Это общее количество времени (в CPU-секундах), которое команда провела в пользовательском режиме.

Следующее значение, system – это количество времени (тоже в CPU-секундах), которое команда провела в режиме системы или ядра.

Наконец, cpu – это процент использования ЦП, выделенного команде.

Разница между пользовательским и системным временем заключается в использовании ЦП, которое разбивается по уровням доступа. Когда код выполняется в пользовательском режиме, он не имеет прямого доступа к оборудованию или памяти и должен полагаться на API системы. Так работает большая часть кода в вашей системе, благодаря такой его изоляции всегда можно исправить сбои.

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

Заключение

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

Источник

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