منبع اصلی نوشتار زیر در این لینک قرار دارد

time ابزاری مفید در ترمینال !

دستور time را می‌توان به عنوان ابزاری برای نشان دادن زمان اجرای برنامه‌ها در پارامتر‌های زیر معرفی کرد:

  1. زمان صرف شده توسط برنامه در مد کاربری (user mode)
  2. زمان صرف شده توسط برنامه در مد هسته
  3. متوسط حافظهٔ (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 دیدگاه برای این نوشته:

  1. \'\'hoco:

    ۱۸ اسفند ۱۳۹۰
    عالی بود. مقالات در مورد ترمینال رو بیشتر کنید.
  2. \'\'zobilla:

    ۱۸ اسفند ۱۳۹۰
    عالی نبود! ممنون از زحمتی که کشیدید اما بهتره یه سری آموزش پی در پی و منظم و با نگاه کلی تر و زبان ساده تر تو سایت قرار بگیره تا کاربرهای تازه کاری مثل من بتونن از طریق این سایت (و نه جای دیگه!) با مبانی ترمینال آشنا بشن. اینجوری بین مطالب آموزشی یه پیوستگی ایجاد میشه و بعد میتونید با اطمینان از اینکه خواننده ها مطالب پایه ای رو بلدن، مطالب تخصصی تری مثل این یکی رو منتشر کنید.
  3. \'\'eMan:

    ۱۹ اسفند ۱۳۹۰
    سلام
    داخل قسمت‌های مختلف سایت الان داره محتوای آموزشی برای همه کاربرها ایجاد میشه. تا چند روز دیگه یه سری پست‌های آموزشی مبتدی تا پیشرفته به انجمن اضافه میشه.
    اسکریپت نویسی بش
    http://community.linuxreview.ir/thread-101-post-1367.html
    http://wiki.linuxreview.ir/Shell-scripting-tutorial
    اموزش پایتون از مبتدی
    http://community.linuxreview.ir/thread-93.html
    و …
    پروژه‌هایی هم هست که هنوز کار دارند و هنوز به مرحله معرفی نرسیده.
    شما می‌تونید از این طریق به صورت پایه‌ای شروع به یادگیری کنید. چون به هر حال بلاگ شامل همه پستی میشه و شاید نشه اون یک پارچگی که شما ازش حرف میزنید رو پیاده کرد ;)
  4. \'\'mrmrn:

    ۱۹ اسفند ۱۳۹۰
    سلام.
    ممنون.
    یه تگی چیزی نیست که عبارتای انگلیسی رو مرتب و از راست به چپ نشون بده؟ این مشکل تو این سایت هست.و اینکه همون جاهایی هم که تو تگ میذارن باز اعدادش فارسی میشه.
    این رو لطف کنین مدنظر قرار بدین.
    بازم ممنون.
  5. \'\'بیژن:

    ۲۱ اسفند ۱۳۹۰
    فوق العاده بود
  6. \'\'hojy:

    ۲۵ اسفند ۱۳۹۰
    سلام
    ممنون از اهمیتی که به خط فرمان میدید و البته کافی نیست!
    به نظر من باید دانش همیشه به ساد ترین وصورت بیان بشه
    مخصوصا جایی که حرفه‌‌ای‌هاش بایه گشت و گذار توی
    اینترنت مشکلشون حله و فقط ما می‌مونیم!
    با توجه به تازه‌کاریتون عالی بود!

\"ارسال



برچسب ها : , , , , , ,