Вероятно, вы знаете время начала команды / процесса и как долго процесс выполняется в Unix-подобных системах.
Но когда вы его закончили и / или какое общее время, затраченное на выполнение команды / процесса?
В Unix-подобных системах есть утилита с именем «GNU time», специально предназначенная для этой цели.
Используя утилиту Time, мы можем легко измерить общее время выполнения команды или программы в операционных системах Linux.
Хорошо, что команда «Time» поставляется в большинстве дистрибутивов Linux, поэтому вам не нужно беспокоиться об установке.
Найти время выполнения команды или процесса в Linux
Чтобы измерить время выполнения команды / программы, просто запустите.
$ /usr/bin/time -p ls
или
$ time ls
Пример вывода
dir1 dir2 file1 file2 mcelog real 0m0.007s user 0m0.001s sys 0m0.004s
$ time ls -a . .bash_logout dir1 file2 mcelog .sudo_as_admin_successful .. .bashrc dir2 .gnupg .profile .wget-hsts .bash_history .cache file1 .local .stack real 0m0.008s user 0m0.001s sys 0m0.005s
Вышеуказанные команды отображают общее время выполнения команды «ls».
Замените «ls» любой командой / процессом по вашему выбору, чтобы найти общее время выполнения.
Здесь:
- real – возвращает общее время, затраченное командой / программой,
- user – указывает время, затраченное программой в пользовательском режиме,
- sys – указывает время, затраченное программой в режиме ядра.
time и /usr/bin/time
Как вы могли заметить, в приведенных выше примерах мы использовали две команды «time» и «/usr/bin/time».
Итак, вы можете задаться вопросом, в чем разница между ними.
Сначала давайте посмотрим, что на самом деле «timeя» использует команду «type».
Для тех, кто не знает, команда Type используется для получения информации о команде Linux.
$ type -a time time is a shell keyword time is /usr/bin/time
Как видите time – две штуки
- Ключевое слово, встроенное в оболочку BASH
- Исполняемый файл – /usr/bin/time
Поскольку ключевые слова оболочки имеют приоритет над исполняемыми файлами, когда вы просто запускаете runmimommand без полного пути, вы запускаете встроенную команду оболочки.
Но, когда вы запускаете /usr/bin/time, вы запускаете реальную программу времени GNU time.
Итак, чтобы получить доступ к реальной команде, вам может потребоваться указать ее явный путь.
Встроенное ключевое слово оболочки «time» доступно в большинстве оболочек, таких как BASH, ZSH, CSH, KSH, TCSH и т. д.
Ключевое слово оболочки «time» имеет меньше опций, чем исполняемые файлы.
Единственный вариант, который вы можете использовать в ключе «time», – это -p.
Теперь вы знаете, как найти общее время выполнения данной команды / процесса, используя команду «time».
Хотите узнать немного больше об утилите «GNU time»? Читайте дальше!
Краткое введение в программу «GNU time»
Программа GNU time запускает команду / программу с заданными аргументами и суммирует использование системных ресурсов в качестве стандартного вывода после завершения команды.
В отличие от ключевого слова time, программа GNU time не просто отображает время, используемое командой / процессом, но и другие ресурсы, такие как память, вызовы ввода-вывода и IPC.
Типичным синтаксисом команды Time является:
/usr/bin/time [options] command [arguments...]
options в приведенном выше синтаксисе ссылаются на набор флагов, которые могут использоваться командой time для выполнения определенной функциональности.
Список доступных опций приведен ниже^
- -f, -format – Используйте этот параметр, чтобы указать формат вывода по вашему желанию.
- -p, -portability – Использовать переносимый формат вывода.
- -o file, -output = FILE – Записывает вывод в FILE вместо отображения в качестве стандартного вывода.
- -a, -append – Добавить файл в файл вместо перезаписывания.
- -v, -verbose – Этот параметр отображает подробное описание вывода утилиты «время».
- -Quiet – этот параметр запрещает утилиту времени «время» сообщать о статусе программы.
- При использовании программы «GNU time» без каких-либо параметров вы увидите вывод, как показано ниже.
$ /usr/bin/time wc /etc/hosts 9 28 273 /etc/hosts 0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2024maxresident)k 0inputs+0outputs (0major+73minor)pagefaults 0swaps
Если вы запустите ту же команду с встроенным ключевым словом «time», результат будет немного другим:
$ time wc /etc/hosts 9 28 273 /etc/hosts real 0m0.006s user 0m0.001s sys 0m0.004s
В некоторых случаях вы можете записать вывод использования системного ресурса в файл, а не отображать его в терминале. Для этого используйте флаг -o, как показано ниже.
$ /usr/bin/time -o file.txt ls dir1 dir2 file1 file2 file.txt mcelog
Как вы можете видеть на выходе, утилита Time не отображает результат. Потому что мы записываем вывод в файл с именем file.txt. Давайте посмотрим на этот файл:
$ cat file.txt 0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 2512maxresident)k 0inputs+0outputs (0major+106minor)pagefaults 0swaps
Когда вы используете флаг -o, если нет файла с именем «file.txt», он будет создавать и записывать вывод в него.
Если файл.txt уже присутствует, он перезапишет его содержимое.
Вы также можете добавить вывод в файл, а не переписывать его, используя флаг -a.
$ /usr/bin/time -a file.txt ls
Флаг -f позволяет пользователям управлять форматом вывода по своему усмотрению.
Скажем, например, следующая команда отображает вывод команды «ls» и показывает только пользователя, систему и общее время.
$ /usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls dir1 dir2 file1 file2 mcelog 0:00.00 real, 0.00 user, 0.00 sys
Помните, что встроенная команда «time» не поддерживает все функции программы GNU time.
Для получения дополнительной информации о утилите времени GNU см. Справочные страницы.
$ man time