शेल कमांड का निष्पादन समय प्रिंट करें


88

निम्नलिखित संयोजन के साथ शेल कमांड के निष्पादन समय को प्रिंट करना संभव है?

root@hostname:~# "command to execute" && echo "execution time"

जवाबों:


72

यह मत भूलो कि बैश के बिलिन के बीच एक अंतर है time(जो कि जब आप करते हैं तो डिफ़ॉल्ट रूप से कॉल किया जाना चाहिए time command) और /usr/bin/time(जिसे आपको इसके पूर्ण पथ द्वारा कॉल करने की आवश्यकता होनी चाहिए)।

बिल्टइन timeहमेशा स्टडर पर प्रिंट करता है, लेकिन /usr/bin/timeआपको समय के आउटपुट को एक विशिष्ट फ़ाइल पर भेजने की अनुमति देगा, इसलिए आप निष्पादित कमांड के स्टडर स्ट्रीम के साथ हस्तक्षेप नहीं करते हैं। साथ ही, /usr/bin/timeकमांड लाइन पर या पर्यावरण चर द्वारा संरूपण को कॉन्फ़िगर किया जा सकता है TIME, जबकि बैश का अंतर्निहित timeप्रारूप केवलTIMEFORMAT पर्यावरण चर द्वारा कॉन्फ़िगर किया गया है।

$ time factor 1234567889234567891 # builtin
1234567889234567891: 142662263 8653780357

real    0m3.194s
user    0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps

इससे man bash: "TIMEFORMAT चर को एक प्रारूप स्ट्रिंग में सेट किया जा सकता है जो निर्दिष्ट करता है कि समय की जानकारी कैसे प्रदर्शित की जानी चाहिए"
अगली सूचना तक रोका गया।

उफ़ - मुझे लगा कि इसे प्रारूपित करने का कोई तरीका है, लेकिन मैं इसमें चूक गया help timeक्योंकि मैंने केवल इस पर ध्यान दिया था और मुझे लगा कि यह एक कमांड लाइन तर्क है। मैं जवाब अपडेट कर दूंगा।
मार्क रुशखॉफ़

2
यहां हम 9 साल बाद हैं और कमांड ने केवल 0m0.018s लिया है। मैंने सोचा था कि मैं इसे इंगित करूंगा।
घासेन लौहाची

112

time अधिकांश शेल में एक अंतर्निहित कमांड है जो ट्टी को निष्पादन समय की जानकारी लिखता है।

आप भी कुछ इस तरह की कोशिश कर सकते हैं

start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.

या में bash:

start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s

माज़ा से सहमत, इस लचीलेपन ने मुझे आदेशों के एक पूरे सेट के समय को मापने की अनुमति दी।
नाथ

क्या निष्पादन की गणना करने के लिए जो भी लिनक्स कमांड है उसके आस-पास लिनक्स पहलुओं को लागू करना संभव है
सैयद माजरीन

1
इस दृष्टिकोण का एक नुकसान यह है कि यह सेकंड में मापता है, जबकि timeमिलिसकॉन्ड का उपयोग करता है। और यदि आप चर और गणनाओं का उपयोग किए बिना एक साथ कुछ समय के लिए आदेश देना चाहते हैं, तो आप कोष्ठकों का उपयोग कर सकते हैं: time ( command1 ; command2 ; command3 )आप उन्हें कुल मिलाकर एक साथ समय भी दे सकते हैं, जैसे: time ( time command1 ; time command2 ; time command3 ) यदि आप कुछ बीस आज्ञाएँ चाहते हैं, तो हो सकता है इस उत्तर के समाधान का उपयोग करना बेहतर होगा। लेकिन फिर, आपको अपने आदेशों को एक स्क्रिप्ट में डालने के बारे में सोचना शुरू कर देना चाहिए ...
एमएसबी

25
root@hostname:~# time [command]

यह उपयोग किए गए वास्तविक समय और सिस्टम समय के बीच भी अंतर करता है।


यह निश्चित रूप से मूल उत्तर है - लेकिन कुछ जटिलताएं हैं यदि आप कमांड से त्रुटि आउटपुट देखना चाहते हैं और फिर भी समय पर जानकारी मानक आउटपुट पर भेजते हैं जैसा कि सवाल करता है। समय कमांड stderr को लिखता है। आप जो सुझाव देते हैं, वह संभवतः पर्याप्त सटीक है - इसलिए मेरा +1।
जोनाथन लेफ़लर

2
timetty को लिखता है, stderr को नहीं। जो मुझे लगता है कि चीजों को बदतर बना देता है।
भीड़

12

लाइन-बाय-लाइन डेल्टा माप के लिए, gnonom प्रयास करें

यह एक कमांड लाइन उपयोगिता है, थोडा और अधिक टीटीएस की तरह, टाइमस्टैम्प की जानकारी को दूसरे कमांड के मानक आउटपुट में प्रस्तुत करने के लिए। लंबे समय तक चलने वाली प्रक्रियाओं के लिए उपयोगी जहाँ आप एक ऐतिहासिक रिकॉर्ड चाहते हैं जो इतनी देर तक चल रहा है।

सूक्ति के लिए किसी भी चीज को डालना प्रत्येक रेखा पर टाइमस्टैम्प को दर्शाएगा, यह दर्शाता है कि बफर में अंतिम पंक्ति कितनी लंबी थी - यानी अगली पंक्ति को प्रदर्शित होने में कितना समय लगा। डिफ़ॉल्ट रूप से, सूक्ति प्रत्येक रेखा के बीच बीता हुआ सेकंड प्रदर्शित करेगा, लेकिन यह विन्यास योग्य है।

सूक्ति प्रदर्शन


8

@ भीड़ के जवाब में जोड़ना:

हमें नैनोसेकंड सटीकता %Nदेने के लिए आवेदन करना date +%s:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`

5

अगर मैं कॉपी या हैश की तरह लंबी-लंबी प्रक्रिया शुरू कर रहा हूं और बाद में जानना चाहता हूं कि इसमें कितना समय लगा, तो मैं बस यही करता हूं:

$ date; sha1sum reallybigfile.txt; date

जिसके परिणामस्वरूप निम्न आउटपुट होंगे:

Tue Jun  2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0  reallybigfile.txt
Tue Jun  2 21:33:54 PDT 2015

दी गई, जैसा कि यहां लागू किया गया है, यह बहुत सटीक नहीं है और बीते हुए समय की गणना नहीं करता है। लेकिन यह गंदगी सरल है और कभी-कभी आपको सभी की आवश्यकता होती है।


4

Zsh में आप उपयोग कर सकते हैं

=time ...

बाश या zsh में आप उपयोग कर सकते हैं

command time ...

ये (विभिन्न तंत्रों द्वारा) एक बाहरी कमांड का उपयोग करने के लिए मजबूर करते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.