พิมพ์เวลาดำเนินการของคำสั่งเชลล์


89

เป็นไปได้ไหมที่จะพิมพ์เวลาดำเนินการของคำสั่งเชลล์ด้วยชุดค่าผสมต่อไปนี้

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

คำตอบ:


73

อย่าลืมว่ามีความแตกต่างระหว่าง builtin ของ bash time(ซึ่งควรถูกเรียกโดยค่าเริ่มต้นเมื่อคุณทำtime command) และ/usr/bin/time(ซึ่งควรกำหนดให้คุณเรียกใช้ตามเส้นทางแบบเต็ม)

builtin timeจะพิมพ์ไปที่ stderr เสมอ แต่/usr/bin/timeจะช่วยให้คุณสามารถส่งเอาต์พุตของเวลาไปยังไฟล์เฉพาะได้ดังนั้นคุณจึงไม่ยุ่งเกี่ยวกับสตรีม stderr ของคำสั่งที่ดำเนินการ นอกจากนี้/usr/bin/time's รูปแบบที่กำหนดในบรรทัดคำสั่งหรือโดยตัวแปรสภาพแวดล้อมTIMEในขณะที่ builtin ทุบตีของ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 อาจถูกตั้งค่าเป็นสตริงรูปแบบที่ระบุวิธีแสดงข้อมูลเวลา"
Dennis Williamson

อ๊ะ - ฉันคิดว่ามีวิธีการจัดรูปแบบอยู่บ้าง แต่ฉันพลาดhelp timeเพราะฉันมองไปที่มันเท่านั้นและฉันคิดว่ามันเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ฉันจะอัปเดตคำตอบ
Mark Rushakoff

3
นี่คือ 9 ปีต่อมาและคำสั่งใช้เวลาเพียง 0m0.018s ฉันแค่คิดว่าฉันจะชี้ให้เห็น
Ghassen Louhaichi

112

time เป็นคำสั่งในตัวในเชลล์ส่วนใหญ่ที่เขียนข้อมูลเวลาดำเนินการไปยัง tty

คุณสามารถลองทำสิ่งต่างๆเช่น

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

เห็นด้วยกับ Maaza ความยืดหยุ่นนี้ทำให้ฉันสามารถวัดเวลาของชุดคำสั่งทั้งหมดได้

เป็นไปได้ไหมที่จะใช้ลักษณะ linux กับคำสั่ง linux ใด ๆ เพื่อคำนวณการดำเนินการ
Syed Mazreena

2
ข้อเสียอย่างหนึ่งของแนวทางนี้คือการวัดผลเป็นวินาทีในขณะที่timeใช้มิลลิวินาที และถ้าคุณต้องการรวมคำสั่งจำนวนหนึ่งเข้าด้วยกันโดยไม่ต้องใช้ตัวแปรและการคำนวณคุณสามารถใช้วงเล็บ: time ( command1 ; command2 ; command3 )คุณอาจกำหนดเวลาทีละคำพร้อมกันด้วยเวลาทั้งหมดเช่น: time ( time command1 ; time command2 ; time command3 ) แน่นอนว่าถ้าคุณต้องการ 20 คำสั่งอาจ ควรใช้คำตอบนี้ดีกว่า แต่คุณควรเริ่มคิดว่าจะใส่คำสั่งทั้งหมดลงในสคริปต์ ...
msb

26
root@hostname:~# time [command]

นอกจากนี้ยังแยกความแตกต่างระหว่างเวลาจริงที่ใช้และเวลาของระบบที่ใช้


นั่นเป็นคำตอบพื้นฐานอย่างแน่นอน - แต่มีภาวะแทรกซ้อนบางอย่างหากคุณต้องการดูผลลัพธ์ข้อผิดพลาดจากคำสั่งและยังส่งข้อมูลเวลาไปยังเอาต์พุตมาตรฐานตามที่คำถามทำ คำสั่ง time เขียนถึง stderr สิ่งที่คุณแนะนำน่าจะถูกต้องเพียงพอดังนั้น +1 ของฉัน
Jonathan Leffler

2
timeเขียนถึง tty ไม่ใช่ stderr ซึ่งฉันเดาว่าทำให้สิ่งต่างๆแย่ลง
ม็อบ

13

สำหรับบรรทัดโดยบรรทัดวัดเดลต้าลองgnonom

เป็นยูทิลิตี้บรรทัดคำสั่งเช่นเดียวกับ ts ของ moreutils เพื่อเพิ่มข้อมูลการประทับเวลาล่วงหน้าไปยังเอาต์พุตมาตรฐานของคำสั่งอื่น มีประโยชน์สำหรับกระบวนการทำงานที่ยาวนานซึ่งคุณต้องการบันทึกทางประวัติศาสตร์ว่าอะไรใช้เวลานานมาก

การวางสิ่งใด ๆ ลงใน gnomon จะเพิ่มการประทับเวลาของแต่ละบรรทัดโดยระบุว่าบรรทัดนั้นเป็นบรรทัดสุดท้ายในบัฟเฟอร์นานเท่าใดนั่นคือระยะเวลาที่บรรทัดถัดไปจึงจะปรากฏ ตามค่าเริ่มต้น gnomon จะแสดงวินาทีที่ผ่านไประหว่างแต่ละบรรทัด แต่สามารถกำหนดค่าได้

gnomon สาธิต


8

การเพิ่มคำตอบของ @ mob:

ท้าย%Nที่จะdate +%sช่วยให้เรามีความถูกต้อง nanosecond:

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 ...

ใน bash หรือ zsh คุณสามารถใช้ได้

command time ...

สิ่งเหล่านี้ (โดยกลไกที่แตกต่างกัน) บังคับให้ใช้คำสั่งภายนอก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.