Czasami podczas pracy z terminalem Linuksa trzeba znać czas wykonania niektórych poleceń, na przykład w celu śledzenia problemów. Do tego celu służy narzędzie o nazwie time. Powiemy ci, jak działa polecenie Linux time i jaka jest jego składnia. Następnie przejdziemy do opisu dostępnych opcji. Na koniec wspomnimy o kilku popularnych scenariuszach użycia.
Narzędzie uruchamia polecenie zdefiniowane przez użytkownika, a następnie wyświetla informacje o czasie jego wykonania. Jego składnia jest dość wygodna. Najpierw należy określić opcje czasu, następnie polecenie do wykonania, a na końcu argumenty do niego:
$ time [options] command_to_execute [arguments]
Rozważmy listę dostępnych opcji:
-o, --output - zapisywanie danych do wybranego pliku zamiast standardowego wyjścia w terminalu. W tym przypadku stare dane w pliku zostaną nadpisane.-a, --append - dodanie nowych informacji do pliku zamiast nadpisywania starych. Opcja jest użyteczna tylko w połączeniu z -o.-f, --format - wybór określonego formatu wyjściowego. Szczegóły dotyczące formatowania zostały opisane w następnej sekcji tego artykułu.-p, --profitably - używa formatu wyjścia danych zgodnego ze standardem POSIX 1003.2.-v, --verbose - wypisuje szczegółowe informacje o wykonaniu programu.-V, --version - wyświetla wersję programu narzędziowego time.Ta lista zawiera tylko podstawowe opcje. Szczegółowe informacje można uzyskać za pomocą polecenia :
$ man time
Domyślnie time może wyświetlać informacje w formie, która nie jest wygodna do czytania,

Pożądane jest ustawienie opcji formatowania danych wyjściowych, które zostaną teraz omówione. W sumie są trzy z nich. Weźmy jako przykład polecenie apt-get update.
Opcja -v służy do wyświetlania szczegółowych informacji:
$ sudo time -v apt-get update

Opcja -p jest potrzebna do wyprowadzenia danych w formacie zgodnym z POSIX 1003.2:
$ sudo time -p apt-get update

Linia danych formatowania zazwyczaj zawiera specyfikatory zasobów i zwykły tekst. Znak % wskazuje, że następujący po nim znak powinien być traktowany jako specyfikator zasobów.
Znak służy do określenia znaku separatora. Dostępne są trzy opcje: t - tabulator, n - nowa linia, \ - ukośnik odwrotny. Jeśli podasz jakikolwiek inny znak po , terminal wyświetli znak zapytania (?), co oznacza błąd wprowadzania.
Reszta tekstu w ciągu formatu jest w całości kopiowana do pola wyjściowego. W tym przypadku time zawsze rozpoczyna wyprowadzanie danych od nowej linii po informacji o wykonaniu samego polecenia.
Rozważmy dostępne specyfikatory zasobów:
% - dosłowne %. tj. aby wyprowadzić znak procentu, należy podać %% w poleceniu.C - nazwa polecenia i użyte argumenty.D - średni rozmiar niepodzielonego obszaru danych. Jest wyświetlany w kilobajtach.E - rzeczywisty czas wykonania polecenia w zwykłym formacie godzinowym. Jest wyświetlany jako [godziny:]<minuty:sekundy.N - liczba błędów głównych lub błędów we/wy, które wystąpiły podczas wykonywania procesu.I - liczba dostępów do systemu plików.K - średnia wartość pamięci wykorzystanej na kod(tekst), zainicjalizowane dane(dane) istos (stos). Wyświetlana jest w kilobajtach.M - maksymalny rozmiar zestawu rezydentnego podczas wykonywania procesu w kilobajtach.O - liczba wyjść z systemu plików.P - procent obciążenia CPU (centralnej jednostki przetwarzania).R - liczba pomniejszych błędów.S - czas w sekundach, w którym procesor był używany przez system w imieniu procesu w trybie nadzorcy(trybjądra).U - czas w sekundach, w którym procesor był używany przez proces bezpośrednio w trybieużytkownika.W - ile razy proces został wyładowany z pamięci RAM.Z - rozmiar strony systemowej. Wartość ta jest stała, ale różni się w zależności od systemu.c - liczba mimowolnych przełączeń kontekstu podczas wykonywania procesu.e - rzeczywisty czas wykonania polecenia w zwykłym formacie godzinowym. Wyświetlany jest w sekundach.k - liczba sygnałów, które dotarły do procesu.p - średni rozmiar niewspółdzielonego stosu procesu, w kilobajtach.r - liczba odebranych komunikatów gniazda.s - liczba wysłanych komunikatów gniazda.t - średni rozmiar zestawu rezydentnego procesu, w kilobajtach.w - liczba dobrowolnych przełączeń kontekstu podczas wykonywania procesux - kod powrotu dla polecenia.To były wszystkie specyfikatory zasobów używane przy wyborze formatowania dla czasu. Przejdźmy teraz do scenariuszy użycia polecenia.
Przyjrzyjmy się trzem podstawowym przykładom, które są dość powszechnie używane: wyjście do terminala, wyjście do osobnego pliku i wyjście z formatowaniem.
Jako przykład weźmiemy polecenie sleep, które wstrzymuje działanie na określony czas. Będzie to bardzo czytelny przykład, ponieważ czas pauzy pokrywa się z czasem wykonania polecenia:
$ time sleep 3

Czas jest zapisany od razu w trzech kolumnach. Przejdźmy przez każdą z nich:
real - całkowity czas od rozpoczęcia wykonywania procesu do jego zakończenia.
user - czas, w którym proces działał w trybieużytkownika.
sys - czas, w którym proces był zaangażowany w tryb nadzorcy(trybjądra).
Kolejnym przydatnym scenariuszem jest wyświetlenie czasu potrzebnego do załadowania nagłówka strony internetowej za pomocą narzędzia curl. Jako przykład weźmy naszą stronę internetową:
$ time curl -I https://losst.ru

Powinniśmy wspomnieć o sytuacji, w której wykonanie polecenia powoduje przełączenie okna terminala w inny tryb, na przykład po uruchomieniu edytora nano w celu zmodyfikowania pliku /home/root-user/script.txt:
$ time nano /home/root-user/scripts/main_script.txt
Po zakończeniu pracy edytora zobaczysz całkowity czas pracy nad plikiem.

Teraz już wiesz, jak sprawdzić czas wykonania polecenia systemu Linux.
Informacje o wynikach polecenia time można zapisać do osobnego pliku za pomocą opcji-o. W takim przypadku nie będą one wyświetlane w oknie terminala. Weźmy przykład rozpakowania zawartości archiwum ~/data/data.tar.gz za pomocą narzędzia tar. Zapiszmy informacje o czasie wykonania w nowym pliku ~/data/data_time.txt. Dodamy również opcję-v do polecenia, aby uzyskać szczegółowe informacje:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Plik będzie miał następującą zawartość.

Jeśli używasz opcji -o, pamiętaj, że nadpisuje ona stare informacje w pliku wyjściowym nowymi. Ma to zastosowanie podczas tworzenia nowych plików, ale nie nadaje się do rejestrowania. Z opcjonalną opcją -a, nadpisanie zawartości jest zastępowane przez dodanie nowych informacji:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Oryginalna opcja formatowania danych nie jest odpowiednia we wszystkich przypadkach. Jako przykład weźmiemy poprzednio używane polecenie wyodrębniania archiwum, ale nie zapiszemy danych do pliku. Podczas jej wykonywania jesteśmy zainteresowani:
specyfikator%C. specyfikator%P. specyfikator%e.Dla wygody percepcji, każdy element będzie wyświetlany w osobnej linii przy użyciu separatora n. Jednocześnie wszystkie zostaną podpisane w zrozumiały sposób.
Oto jak wygląda ostateczna wersja polecenia:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data

Cały tekst z wyjątkiem znaków po % jest w pełni wyświetlany w terminalu. Jest to wygodny sposób oznaczania