Metody płatności Abuse

Polecenie Time w systemie Linux

18.03.2022, 01:39

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.

Składnia i opcje

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

Opcje formatowania wyjścia

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 procesu
  • x - 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.

Czas wykonania polecenia LINUX

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.

Wyprowadzanie czasu wykonywania do terminala

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.

Dane wyjściowe pliku

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

Wyjście z formatowaniem

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:

  • Informacje o samym poleceniu i podanych opcjach - jest to specyfikator%C.
  • Obciążenie procesora - specyfikator%P.
  • Całkowity czas wykonania w sekundach - 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