time mierzy, jak długo trwa wykonanie dowolnego polecenia. Poprzedzasz nim komendę, a po jej zakończeniu dostajesz trzy liczby: czas rzeczywisty (ile minęło na zegarze), czas użytkownika (ile procesor spędził na kodzie programu) i czas systemowy (ile na wywołaniach jądra). To najprostsze narzędzie, gdy chcesz sprawdzić, czy skrypt zwalnia, porównać dwie wersje kodu albo zobaczyć, gdzie ucieka czas. Uwaga na start: time to najczęściej słowo kluczowe wbudowane w powłokę (bash, zsh), a nie osobny program — dlatego jego zachowanie zależy od tego, czego uruchamiasz.
Składnia i najważniejsze opcje
Podstawowo: time polecenie [argumenty]
Wersja wbudowana w bash ma tylko jedną istotną opcję (-p). Reszta flag należy do zewnętrznego programu /usr/bin/time z pakietu GNU time, który uruchomisz podając pełną ścieżkę albo pisząc \time.
-p— bashowe: wymusza przenośny format POSIX (linie real, user, sys w sekundach).-v— GNU: tryb gadatliwy, pokazuje wszystko — pamięć, przełączenia kontekstu, page faults, operacje I/O.-f FORMAT— GNU: własny format wyjścia, np.%e(czas rzeczywisty),%M(szczyt pamięci w KB),%P(procent CPU).-o PLIK— GNU: zapisuje wynik do pliku zamiast na stderr.-a— GNU: dopisuje do pliku z-ozamiast go nadpisywać.--version— GNU: wersja programu (bashowy builtin jej nie ma).
Przykłady użycia
time sleep 2— zmierzysz najprostszy przypadek; real będzie bliskie 2 s, a user i sys prawie zerowe (bo program tylko czeka).time ./skrypt.sh— sprawdzisz, ile realnie trwa Twój skrypt bez dokładania stopera do kodu./usr/bin/time -v python3 trenuj.py— pełny raport zasobów: zobaczysz też szczytowe zużycie pamięci, przydatne przy podejrzeniu wycieków./usr/bin/time -f "%e s, pamięć %M KB" make— własny, zwięzły format z czasem i pamięcią w jednej linii.time (curl -s example.com | wc -l)— nawiasy pakują cały potok w subpowłokę, więc zmierzysz go w całości.
Częste błędy i pułapki
Największa pomyłka to mylenie dwóch time. Flagi -v i -f należą do GNU /usr/bin/time, a nie do builtina — wywołane po prostu jako time -v w bashu dostaniesz błąd lub złe zachowanie. Gdy chcesz mieć pewność, że używasz zewnętrznego programu, pisz \time albo pełną ścieżkę.
Druga pułapka: potoki. Bashowy builtin ogarnia time cmd1 | cmd2 i mierzy cały ciąg, ale zewnętrzny /usr/bin/time zmierzy tylko pierwsze polecenie — dlatego potok zamykaj w nawiasach jak w przykładzie wyżej. Trzecia sprawa: na wielu minimalnych obrazach Docker pakiet time w ogóle nie jest zainstalowany, więc /usr/bin/time nie istnieje, choć builtin działa. I pamiętaj, że wynik ląduje na stderr, nie na stdout — jeśli chcesz go przechwycić, przekieruj 2>.
Powiązane komendy: times (statystyki czasu powłoki), timeout (ubicie polecenia po limicie), date (znaczniki czasu), strace i perf (głębszy profiling), htop (podgląd zasobów na żywo).