Odpowiedzi:
Dodaj time
przed poleceniem, które chcesz zmierzyć. Na przykład: time ls
.
Dane wyjściowe będą wyglądać następująco:
real 0m0.606s
user 0m0.000s
sys 0m0.002s
Wyjaśnienie real
, user
i sys
(od man time
):
real
: Upływający rzeczywisty (zegar ścienny) czas wykorzystywany przez proces, w sekundach.user
: Łączna liczba sekund procesora wykorzystywanych bezpośrednio przez proces (w trybie użytkownika), w sekundach.sys
: Łączna liczba sekund CPU wykorzystywanych przez system w imieniu procesu (w trybie jądra), w sekundach.sudo apt-get install time
jeśli używasz powłoki, która time
nie jest wbudowana.
time
wbudowany w Bash , ale man time
dotyczyłby pliku wykonywalnego (np. /usr/bin/time
Z time
pakietu), a jego wynik wyglądałby inaczej. Również w Bash możesz ubiegać się help time
o pomoc z wbudowanym.
Do pomiaru delta linia po linii spróbuj gnomon .
Jest to narzędzie wiersza poleceń, trochę jak ts moreutils, do dodawania informacji o znaczniku czasu do standardowego wyjścia innego polecenia. Przydatny w długotrwałych procesach, w których potrzebujesz historycznego zapisu tego, co trwa tak długo.
Przesłanie czegokolwiek do gnomona spowoduje wstawienie znacznika czasu do każdej linii, wskazując, jak długo ta linia była ostatnią linią w buforze - to znaczy, ile czasu zajęło wyświetlenie następnej linii. Domyślnie gnomon wyświetla sekundy, które upłynęły między każdą linią, ale można to skonfigurować.
sudo npm i gnomon -g
jeśli masz npm
. Nie jestem pewien, jak dobrze radzi sobie z liniami „postępu” za pomocą „\ r” (pozostawanie na tej samej linii): w takim przypadku chciałbym, aby liczyło to wszystko jako jedną długą linię, a nie osobne.
Możesz użyć time
:
time ls -R
date +"%T" && cp -r ./file /destination/folder/here && date +"%T"
Uruchomienie tego polecenia w terminalu da ci całkowity czas na skopiowanie pliku
find
polecenie - bez 2>/dev/null
przekierowania - wyświetla obfite Permission denied
wiadomości. Jednak dodanie 2>/dev/null
do tego polecenia powoduje przerwanie time
części tego polecenia. Następujące zapewnia dobry kompromis: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"
podając (np.) /usr/lib/libname-server-2.a find command took 3 sec
Jako jedyny wynik.
time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print
(tj. As sudo
) - unikając licznych Permission denied
ostrzeżeń.
Czasami potrzebuję stopera, aby policzyć, ile czasu zajmuje wykonanie takiego działania, jak uruchomienie aplikacji, w którym to przypadku wiele rozwiązań tutaj nie jest przydatnych.
Do tego lubię używać sw .
wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw
sw
- start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
- start a stopwatch from the last saved start time (or current time if no last saved start time exists)
- "-r" stands for --resume
time -v command
-v
daje więcej informacji
real
, couser
isys
kiedy zwraca to polecenie?