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