پرش به محتویات

درسنامه ۱۰: استاندارد استریم‌ها در لینوکس

آشنایی با سه جریان اصلی

برنامه‌های خط فرمان معمولاً با سه جریان ورودی/خروجی کار می‌کنند:

  • STDIN (Standard Input) با شمارهٔ فایل ۰، ورودی پیش‌فرض برنامه است که اغلب از صفحه‌کلید دریافت می‌شود.
  • STDOUT (Standard Output) با شمارهٔ فایل ۱، خروجی معمولی برنامه است.
  • STDERR (Standard Error) با شمارهٔ فایل ۲، پیام‌های خطا و هشدار را نگه می‌دارد.

درک این جریان‌ها کمک می‌کند رفتار برنامه‌ها را بهتر کنترل کنید و خروجی مورد نیاز را به فایل‌ها یا دستورات دیگر هدایت کنید.

تغییر مسیر خروجی

با عملگر > می‌توان خروجی استاندارد را در فایل ذخیره کرد. اگر فایل موجود باشد بازنویسی می‌شود؛ برای افزودن به انتهای فایل از >> استفاده کنید.

$ ls > listing.txt
$ ls -a >> listing.txt

برای هدایت خروجی خطا به فایل دیگر از 2> استفاده کنید، زیرا عدد فایل ۲ نمایندهٔ STDERR است.

$ ls /nonexistent 2> errors.log

اگر می‌خواهید خروجی عادی و خطا در یک فایل قرار بگیرند، یکی را به دیگری هدایت کنید:

$ make > build.log 2>&1

تغییر مسیر ورودی

با استفاده از < می‌توانید ورودی برنامه را از فایل تأمین کنید. برنامه‌های تعاملی که در حالت عادی منتظر تایپ کاربر هستند، در این حالت داده‌ها را از فایل می‌خوانند.

$ sort < unsorted-names.txt

این تکنیک در خودکارسازی فرایندها و تست برنامه‌ها بسیار کاربردی است.

استفاده از tee برای تقسیم خروجی

دستور tee خروجی برنامه را همزمان روی صفحه نمایش می‌دهد و داخل فایل ذخیره می‌کند. این کار زمانی مفید است که بخواهید خروجی را در لحظه ببینید و نسخهٔ ثبت‌شده هم داشته باشید.

$ ls -l | tee listing.txt

گزینهٔ -a به tee می‌گوید که به انتهای فایل اضافه کند.

جمع‌بندی

  • استریم‌ها واحدهای پایهٔ انتقال داده هستند؛ با شناخت آن‌ها رفتار برنامه‌های خط فرمان قابل پیش‌بینی می‌شود.
  • ترکیب درست عملگرهای تغییر مسیر (>, >>, <, 2>, &>) به شما اجازه می‌دهد خروجی‌ها را جدا کنید، ذخیره کنید یا به برنامه‌های دیگر بدهید.
  • حتی در اسکریپت‌های پیچیده، این اصول ساده به شما کمک می‌کنند خطاها را ثبت و فرایندها را عیب‌یابی کنید.