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

درسنامه ۱۱: ساخت پایپ‌لاین در خط فرمان لینوکس

مفهوم پایپ‌لاین

پایپ‌لاین (Pipeline) به اتصال خروجی یک دستور به ورودی استاندارد دستور بعدی گفته می‌شود. این اتصال با کاراکتر | انجام می‌شود و به شما اجازه می‌دهد ابزارهای ساده را کنار هم قرار دهید تا کار پیچیده‌تری انجام دهند.

$ ls | sort

در این مثال، ls فهرست فایل‌ها را تولید می‌کند و sort همان لیست را مرتب می‌کند.

زنجیره‌های چند مرحله‌ای

می‌توانید چندین دستور را پشت سر هم زنجیره کنید. هر مرحله داده‌های خود را به مرحلهٔ بعدی می‌دهد.

$ ls /etc | grep "^ssh" | sort | nl

توضیح مراحل: 1. ls /etc: فهرست فایل‌های /etc. 2. grep "^ssh": فیلتر کردن مواردی که با ssh شروع می‌شوند. 3. sort: مرتب‌سازی نتایج. 4. nl: شماره‌گذاری خطوط خروجی نهایی.

فیلتر کردن و جمع‌آوری داده‌ها

پایپ‌لاین‌ها با ابزارهای متنی مانند grep, cut, awk و wc بسیار قدرتمند می‌شوند.

$ ps aux | grep python | grep -v grep | wc -l
  • ps aux: همهٔ فرایندها را نشان می‌دهد.
  • grep python: فقط فرایندهای شامل واژهٔ python.
  • grep -v grep: حذف خطی که خود grep تولید کرده است.
  • wc -l: شمارش تعداد خطوط باقی‌مانده.

هدایت داده به فایل یا شبکه

پایپ‌لاین‌ها فقط محدود به نمایش در ترمینال نیستند. خروجی نهایی را می‌توان با تغییر مسیر در فایل ذخیره کرد یا برای برنامه‌های دیگر فرستاد.

$ journalctl -n 200 | grep sshd | tee ssh-logins.txt

در این مثال خروجی فیلتر شده علاوه بر نمایش، در فایل ssh-logins.txt هم نوشته می‌شود.

پایپ‌های پیشرفته

  • command1 |& command2: این ساختار در Bash خروجی استاندارد و خطا را با هم به command2 می‌دهد.
  • xargs: ورودی پایپ را به صورت آرگومان‌های جدید استفاده می‌کند و برای اجرای دسته‌ای دستورات مفید است.

    $ ls *.log | xargs -n 1 gzip
    

  • از Bash نسخهٔ ۴ به بعد، می‌توانید با coproc پایپ‌لاین‌های تعاملی ایجاد کنید که داده‌ها را به صورت غیرهمزمان پردازش می‌کنند؛ اگرچه این فراتر از محدودهٔ این درس است.

نکات عملی

  • هر مرحله باید کاری مشخص و کوچک انجام دهد؛ این فلسفهٔ «ابزارهای کوچک، کارهای بزرگ» یونیکس است.
  • برای اشکال‌زدایی، می‌توانید در میانهٔ پایپ‌لاین دستور tee یا cat -n قرار دهید تا ببینید داده‌ها در هر مرحله چه تغییری کرده‌اند.
  • پایپ‌لاین‌ها در اسکریپت‌نویسی Shell کمک می‌کنند بدون نوشتن برنامهٔ پیچیده، داده‌ها را پردازش و گزارش‌گیری کنید.