دستور time را میتوان به عنوان ابزاری برای نشان دادن زمان اجرای برنامهها در پارامترهای زیر معرفی کرد:
- زمان صرف شده توسط برنامه در مد کاربری (user mode)
- زمان صرف شده توسط برنامه در مد هسته
- متوسط حافظهٔ (RAM) استفاده شده در برنامه
این دستور به عنوان یک ابزار اختصاصی به این منظور در لینوکس مورد استفاده قرار میگیرد.
“time” نام برنامه را به عنوان ورودی دریافت میکند و اطلاعاتی را در رابطه با منابعی که برنامه مورد استفاده قرار داده را در خروجی می آورد. همچنین این فرمان یک پیام هشدار به علاوهٔ exit status را در خروجی نشان میدهد. در صورتیکه exit status در پایان خروجی عددی غیر از صفر را نشان دهد برنامه با خطا مواجه شده است.
بعد از اجرای هر برنامه، دستور زیر را برای بررسی صحتِ اجرای دستور در ترمینال صادر کنید (این کار مقدار exit status را به شما نشان میدهد):
echo $?
زمانیکه خروجی عدد ۰ را نشان دهد این بدان معنیست که برنامه به درستی اجرا شده ولی خروجی غیر صفر نشانگر عدم اجرای صحیح فرمان میباشد.
star@galaxy:~$ time date Mon Mar 5 20:03:39 IRST 2012 real 0m0.002s user 0m0.000s sys 0m0.000s star@galaxy:~$ time datz datz: command not found real 0m0.159s user 0m0.124s sys 0m0.036s
ترکیب زیر فرم کلی این دستور را نشان میدهد:
/usr/bin/time [options] program [arguments]
فرمان time گزینههایی را در اختیار کاربر قرار میدهد که در ادامه شما را با برخی از آنها آشنا میکنیم:
-v , –verbose : این گزینه زمانی استفاده میشود که خروجی با جزئیات بیشتری مورد نیاز است. به مثال پیش رو توجه کنید:
star@galaxy:~$ /usr/bin/time -v date Mon Mar 5 20:18:41 IRST 2012 Command being timed: “date” User time (seconds): 0.00 System time (seconds): 0.00 Percent of CPU this job got: 0% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 2768 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 228 Voluntary context switches: 1 Involuntary context switches: 1 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
–quite: از نمایش exit status در خروجی جلوگیری به عمل میآورد.
-f , –format: کاربر با استفاده از این گزینه میتواند خروجی را بصورتی که میخواهد کنترل (قالببندی) کند.
-p , –portability : این گزینه قالب خروجی را طبق استاندارد POSIX ارائه میدهد.
Real %e
Use %U
Sys %S
:-o FILE, –output=FILE این گزینه به کاربر این امکان را میدهد که خروجی time را به یک فایل هدایت و در آن ذخیره کند. همچنین به time اجازه بازنویسی بر روی فایل FILE را میدهد.
:-a ، –append این گزینه به time این اجازه را میدهد که اطلاعات را به فایل FILE اضافه و از بازنویسی اطلاعات اجتناب کند.
زمانیکه فرمان time اجرا میشود، خروجی چیزی شبیه به این مثال است:
star@galaxy:~$ /usr/bin/time ls Desktop Public Documents spinner 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3344maxresident)k 0inputs+0outputs (0major+269minor)pagefaults 0swaps
همانطور که در بالا نشان داده شده است، دو خط آخرِ خروجی منابعی که توسط برنامه یا دستورِ مورد نظر استفاده شده است را نمایش میدهد.
خروجی پیشفرض این فرمان بدون در نظر گرفتن هیچ گزینهٔ اضافی به سبک زیر خواهد بود:
Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax) K %Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps
معمولا گزینهها به کاربر اجازه تصمیمگیری در مورد نحوه گرفتنِ خروجی از برنامه به شیوهای که مد نظر دارد را میدهد. خروجی معمولا شامل منابع خاصی است که در قالب text ساده نمایش داده میشود.
علامت درصد (‘%’) کاراکتر بعدی را به عنوان منبعِ موردِ نظر تفسیر میکند. علامت بکاسلش (‘\\’) به چاپ یک کارکتر بعد از خروجی ترجمه میشود. علامت ’\\t’ خروجی را پس از یک tab نشان میدهد. همچنین علامت ‘\\n’ خروجی را در خط جدیدی چاپ و علامت ‘\\’ یک بکاسلش در خروجی چاپ میکند.
در اینجا به بخشی از منابعی که ممکن است یک برنامه استفاده کند اشاره شده است:
c- نام و آرگومانت کامند time
E- زمان واقعی سپری شده توسط پروسس به ثانیه:دقیقه:ساعت.
I- تعداد فایل سیستمهایی که توسط پروسس وارد می شوند.
M- بیشینهٔ اندازه پروسسهای موجود در lifetime به کیلوبایت.
P- درصد cpuیی که برنامه مورد استفاده قرار داده است. لازم به ذکر است این میزان تنها زمان کاربر + سیستم که توسط زمان اجرایی نهایی بصورت جدا از هم هستند را نشان میدهد. همچنین علامت درصد را نیز چاپ میکند.
W- مقدار زمانهایی که پروسس از swap استفاده کرده است.
Z- اندازه page سیستم به بایت. این یک مقدار ثابت سیستمی است، اما بین سیستمهای مختلف متفاوت است.
e- زمان واقعی سپری شده توسط پروسس به ثانیه.
K- تعداد سیگنالهایی که به پروسس انتقال داده شده است.
x- نتیجه exit status فرمان یا برنامه.
و تعداد زیاد دیگری از منابع سیستمی که توسط time می توان از آنها مطلع شد.
نکتهای که در هنگام استفاده از دستور time وجود دارد به کار گرفتن مسیر کامل آن به جای استفاده از فرمان time است. اگر بخواهیم از گزینهها استفاده کنیم بدون ذکر کامل مسیر فرمان، خطایی مانند خطای زیر را خواهید دید:
$ time -f “\\t%U user,\\t%S system,\\t%x status” date -f: command not found real 0m0.255s user 0m0.230s sys 0m0.030
همانگونه که در مثال بالا نشان داده شده است، فرمان time زمانیکه بدون مسیر کامل (/usr/bin/time) استفاده میشود با افزودن گزینهٔ –f در خروجی خود خطا میدهد. همچنین فرمت خروجی نه آن سبکی که ما به عنوان قالب مشخص کرده بودیم را به نمایش میگذازد و نه فرم پیشفرض را به خود گرفته است. زمانیکه فرمان time بدون مسیر کامل (/usr/bin/time) اجرا می شود، در حقیقت دستور built-in هست که bash shell آن را اجرا می کند.
برای کسب اطلاعات بیشتر در رابطه با این دستور می تواند راهنمای آن را با اجرای دستور man time مطالعه نمائید. همچنین با صدور help time اطلاعاتی که دستور built-in بش در رابطه با این فرمان دارد را میتوان مشاهده کرد.
star@galaxy:~$ type /usr/bin/time /usr/bin/time is /usr/bin/time star@galaxy:~$ type time time is a shell keyword
همانگونه که اشاره شد نوع فرمان time در هر دو شکلی که بیان شده متفاوت است. در اولی به مسیر و در دومی به built-in بودن این فرمان اشاره شده است.
6 دیدگاه برای این نوشته:
- hoco:
۱۸ اسفند ۱۳۹۰
عالی بود. مقالات در مورد ترمینال رو بیشتر کنید. - zobilla:
۱۸ اسفند ۱۳۹۰
عالی نبود! ممنون از زحمتی که کشیدید اما بهتره یه سری آموزش پی در پی و منظم و با نگاه کلی تر و زبان ساده تر تو سایت قرار بگیره تا کاربرهای تازه کاری مثل من بتونن از طریق این سایت (و نه جای دیگه!) با مبانی ترمینال آشنا بشن. اینجوری بین مطالب آموزشی یه پیوستگی ایجاد میشه و بعد میتونید با اطمینان از اینکه خواننده ها مطالب پایه ای رو بلدن، مطالب تخصصی تری مثل این یکی رو منتشر کنید. - eMan:
۱۹ اسفند ۱۳۹۰
سلام
داخل قسمتهای مختلف سایت الان داره محتوای آموزشی برای همه کاربرها ایجاد میشه. تا چند روز دیگه یه سری پستهای آموزشی مبتدی تا پیشرفته به انجمن اضافه میشه.
اسکریپت نویسی بش
http://community.linuxreview.ir/thread-101-post-1367.html
http://wiki.linuxreview.ir/Shell-scripting-tutorial
اموزش پایتون از مبتدی
http://community.linuxreview.ir/thread-93.html
و …
پروژههایی هم هست که هنوز کار دارند و هنوز به مرحله معرفی نرسیده.
شما میتونید از این طریق به صورت پایهای شروع به یادگیری کنید. چون به هر حال بلاگ شامل همه پستی میشه و شاید نشه اون یک پارچگی که شما ازش حرف میزنید رو پیاده کرد ;) - mrmrn:
۱۹ اسفند ۱۳۹۰
سلام.
ممنون.
یه تگی چیزی نیست که عبارتای انگلیسی رو مرتب و از راست به چپ نشون بده؟ این مشکل تو این سایت هست.و اینکه همون جاهایی هم که تو تگ میذارن باز اعدادش فارسی میشه.
این رو لطف کنین مدنظر قرار بدین.
بازم ممنون. - بیژن:
۲۱ اسفند ۱۳۹۰
فوق العاده بود - hojy:
۲۵ اسفند ۱۳۹۰
سلام
ممنون از اهمیتی که به خط فرمان میدید و البته کافی نیست!
به نظر من باید دانش همیشه به ساد ترین وصورت بیان بشه
مخصوصا جایی که حرفهایهاش بایه گشت و گذار توی
اینترنت مشکلشون حله و فقط ما میمونیم!
با توجه به تازهکاریتون عالی بود!