Aşağıdaki kombinasyonla bir kabuk komutunun yürütme zamanını yazdırmak mümkün müdür?
root@hostname:~# "command to execute" && echo "execution time"
Yanıtlar:
Bash'in yerleşik yapısı time
(bunu yaptığınızda varsayılan olarak çağrılmalıdır time command
) ile /usr/bin/time
(tam yolu ile çağırmanızı gerektiren ) arasında bir fark olduğunu unutmayın .
Yerleşik time
her zaman stderr'e yazdırır, ancak /usr/bin/time
zamanın çıktısını belirli bir dosyaya göndermenize izin verir, böylece yürütülen komutun stderr akışına müdahale etmezsiniz. Ayrıca, /usr/bin/time
'ın biçimi komut satırında veya ortam değişkeniyle yapılandırılabilirken , TIME
bash'ın yerleşik time
biçimi yalnızcaTIMEFORMAT
ortam değişkeni tarafından yapılandırılır .
$ 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
help time
çünkü sadece baktım ve bunun bir komut satırı argümanı olduğunu düşündüm. Cevabı güncelleyeceğim.
time
çoğu kabukta çalıştırma zamanı bilgisini tty'ye yazan yerleşik bir komuttur.
Şunun gibi bir şey de deneyebilirsin
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.
Veya içinde bash
:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
time
milisaniyeleri kullanmasıdır. Ve değişkenleri ve hesaplamaları kullanmak zorunda kalmadan bir avuç komutu bir arada zamanlamak istiyorsanız, parantezleri kullanabilirsiniz: time ( command1 ; command2 ; command3 )
onları ayrı ayrı ve toplam süre ile birlikte time ( time command1 ; time command2 ; time command3 )
zamanlayabilirsiniz, şöyle ki: Elbette, yirmi kadar komut istiyorsanız, bu cevabın çözümünü kullanmak daha iyi olur. Ama sonra, tüm komutlarınızı bir komut dosyasına koymayı düşünmeye başlamalısınız ...
root@hostname:~# time [command]
Aynı zamanda kullanılan gerçek zaman ve kullanılan sistem zamanı arasında ayrım yapar.
time
tty'ye yazar, stderr'e değil. Sanırım işleri daha da kötüleştiriyor.
Satır satır delta ölçümü için gnonom'u deneyin .
Zaman damgası bilgilerini başka bir komutun standart çıktısına eklemek için biraz moreutils'in ts'sine benzeyen bir komut satırı yardımcı programıdır. Bu kadar uzun sürenlerin tarihsel kaydını istediğiniz uzun süreli süreçler için kullanışlıdır.
Herhangi bir şeyi gnomon'a borulamak, her satırın başına bir zaman damgası ekleyerek bu satırın arabellekteki son satırın ne kadar uzun olduğunu, yani bir sonraki satırın görünmesinin ne kadar sürdüğünü belirtir. Varsayılan olarak, gnomon her satır arasında geçen saniyeleri gösterecektir, ancak bu yapılandırılabilir.
Kopya veya karma gibi uzun soluklu bir işleme başlıyorsam ve daha sonra ne kadar sürdüğünü öğrenmek istersem, sadece şunu yaparım:
$ date; sha1sum reallybigfile.txt; date
Bu, aşağıdaki çıktıyla sonuçlanacaktır:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Kabul edilirse, burada uygulandığı şekliyle çok kesin değildir ve geçen süreyi hesaplamaz. Ancak bu çok basit ve bazen ihtiyacınız olan tek şey.
Zsh'da kullanabilirsiniz
=time ...
Bash veya zsh'da kullanabilirsiniz
command time ...
Bunlar (farklı mekanizmalarla) harici bir komutu kullanılmaya zorlar.
Sadece ps -o etime= -p "<your_process_pid>"
man bash
: "TIMEFORMAT değişkeni, zamanlama bilgilerinin nasıl görüntüleneceğini belirten bir biçim dizesine ayarlanabilir"