Site icon 8HOST.COM

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

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

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

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

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

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

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

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

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

type -a time

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

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

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

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

\time

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

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

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

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

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

sudo apt install tree

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

brew install tree

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

time tree /

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

# Здесь будет вывод команды 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, встроенная в вашу оболочку, дает вам быстрый доступ к расчету продолжительности выполнения запущенных команд без каких-либо дополнительных средств.