Понекад, када радите са Линукс терминалом, потребно је да знате време извршавања одређених команди, на пример, да бисте пратили проблеме. За овај задатак постоји услужни програм под називом time
. Рећи ћемо вам како функционише time Linux
и каква је њена синтакса. Затим ћемо прећи на опис доступних опција. И на крају ћемо поменути неколико популарних сценарија употребе.
Услужни програм покреће команду коју је одредио корисник, а затим приказује информације о времену њеног извршавања. Има прилично практичну синтаксу. Прво, потребно је да наведете опције за time
, затим команду која треба да се изврши и на крају аргументе за њу:
$ time [options] command_to_execute [arguments]
Хајде да погледамо листу доступних опција:
-o
, --output
– сачувајте податке у изабрану датотеку уместо на стандардни излаз у терминалу. Ово ће преписати старе податке у датотеци.-a
, --append
– додаје нове информације у датотеку, уместо да преписује старе. Ова опција је корисна само у комбинацији са -o
.-f
, --format
– бира одређени излазни формат. Детаљи о форматирању су описани у следећем одељку чланка.-p
, --profitably
– користи излазни формат који је у складу са POSIX 1003.2 стандардом.-v
, --verbose
– исписује детаљне информације о извршавању програма.-V
, --version
– приказује верзију услужног програма time
.Ова листа приказује само главне опције. Детаљне информације можете добити помоћу команде:
$ man time
Подразумевано, time
може приказивати информације у формату који није удобан за читање,
Пожељно је подесити опције форматирања излаза за њега, о чему ћемо сада разговарати. Постоје три. Као пример за њихово разматрање, узећемо команду apt-get update
.
Опција -v
се користи за приказ детаљних информација:
$ sudo time -v apt-get update
Опција -p
је потребна за приказивање података у формату који је у складу са POSIX 1003.2 стандардом:
$ sudo time -p apt-get update
Стринг формата обично садржи спецификаторе ресурса и обичан текст. Знак %
означава да знак који следи треба третирати као спецификатор ресурса.
Знак одређује знак раздвајања. Постоје три доступне опције:
t
– табулатор, n
– нови ред, \
– обрнута коса црта. Ако наведете било који други знак после , терминал ће приказати знак питања (
?
), што указује на грешку при уносу.
Остатак текста у линији за форматирање се у потпуности копира у излазно поље. У овом случају, time
увек почиње са исписивањем података у новој линији након информација о извршењу саме команде.
Погледајмо доступне спецификаторе ресурса:
%
– буквални %. То јест, да бисте приказали знак процента, потребно је да наведете %% у команди.С
– назив команде и коришћени аргументи.D
– просечна величина непартиционисаног подручја података. Приказана је у килобајтима.E
– стварно време извршавања команде у уобичајеном формату сати. Приказано као [Hours:]<imutes:seconds
.N
је број већих грешака или грешака повезаних са I/O операцијама које су се догодиле током извршавања процеса.I
– број уноса у датотечном систему.K
– просечна вредност коришћене меморије за код ( text
), иницијализоване податке ( data
) и стек ( stack
). Приказано у килобајтима.M
– максимална величина резидентног скупа током извршавања процеса у килобајтима.O
– број излаза из фајл система.P
– проценат оптерећења процесора (CPU).R
– број мањих грешака.S
– време у секундама током којег је систем користио процесор у име процеса у режиму надзора ( kernel mode
).U
– време у секундама током којег је процесор коришћен од стране процеса директно у user mode
режиму.W
– колико пута је процес истоварен из RAM меморије.Z
– величина системске странице. Ова вредност је константна, али варира између система.c
– број нехотичних промена контекста током извршавања процеса.e
– стварно време извршавања команде у уобичајеном формату сати. Приказано у секундама.k
– број сигнала који су стигли до процеса.p
– просечна величина недељеног стека процеса, у килобајтима.r
– број примљених сокет порука.s
– број послатих сокет порука.t
– просечна величина скупа резидентних процеса, у килобајтима.w
– број добровољних промена контекста током извршавања процесаx
– повратни код за команду.Ово су сви спецификатори ресурса који се користе при избору форматирања за time
. Сада пређимо на сценарије коришћења команде.
Погледајмо три основна примера која се прилично често користе: излаз података на терминал, излаз у посебну датотеку и излаз са форматирањем.
Као пример, узећемо команду sleep, која паузира на одређено време. Ово ће бити веома јасан пример, јер ће се време паузе поклопити са временом извршавања команде у time
:
$ time sleep 3
Време се бележи у три колоне одједном. Хајде да прођемо кроз сваку од њих:
real
– укупно време од почетка извршавања процеса до његовог завршетка.
user
– време током којег је процес радио у user mode
режиму.
sys
– време током којег је процес радио у режиму надзора ( kernel mode
).
Следећи користан скрипт је приказ времена потребног за учитавање наслова веб странице помоћу услужног програма curl
. Узмимо наш сајт као пример:
$ time curl -I https://losst.ru
Потребно је поменути ситуацију када извршавање команде пребацује прозор терминала у други режим, на пример, приликом покретања nano едитора ради промене датотеке /home/root-user/script.txt
:
$ time nano /home/root-user/scripts/main_script.txt
Након што завршите са уређивањем, видећете укупно време које сте провели радећи на датотеци.
Сада знате како да видите време извршавања Линук команде.
Информације о резултатима команде time могу се сачувати у посебној датотеци помоћу опције -o
. У овом случају, неће бити приказане у прозору терминала. Узмимо као пример издвајање садржаја архиве ~/data/data.tar.gz
помоћу услужног програма tar
. Информације о времену извршавања сачуваћемо у новој датотеци ~/data/data_time.txt
. Такође ћемо додати опцију -v
команди да бисмо добили детаљне информације:
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Датотека ће имати следећи садржај.
Када користите опцију -o
, имајте на уму да она преписује старе информације у излазној датотеци новим. Ово се може применити при креирању нових датотека, али није погодно за евидентирање. Са додатном опцијом -a, преписивање садржаја се замењује додавањем нових информација:
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Оригинална опција форматирања података није погодна у свим случајевима. Као пример, узећемо претходно коришћену команду за распакивање архиве, али нећемо сачувати податке у датотеку. Приликом њеног извршавања, занима нас:
%C
.%P
спецификатор.%e
. Ради лакшег разумевања, свака ставка ће бити приказана у посебном реду користећи сепаратор n
. Истовремено, све ће бити јасно означене.
Ево како изгледа последња команда:
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
Сав текст осим знакова после %
се у потпуности приказује у терминалу. Ово је згодан начин за означавање