درسنامه ۱۱: ساخت پایپلاین در خط فرمان لینوکس
مفهوم پایپلاین
پایپلاین (Pipeline) به اتصال خروجی یک دستور به ورودی استاندارد دستور بعدی گفته میشود. این اتصال با کاراکتر | انجام میشود و به شما اجازه میدهد ابزارهای ساده را کنار هم قرار دهید تا کار پیچیدهتری انجام دهند.
در این مثال، ls فهرست فایلها را تولید میکند و sort همان لیست را مرتب میکند.
زنجیرههای چند مرحلهای
میتوانید چندین دستور را پشت سر هم زنجیره کنید. هر مرحله دادههای خود را به مرحلهٔ بعدی میدهد.
توضیح مراحل:
1. ls /etc: فهرست فایلهای /etc.
2. grep "^ssh": فیلتر کردن مواردی که با ssh شروع میشوند.
3. sort: مرتبسازی نتایج.
4. nl: شمارهگذاری خطوط خروجی نهایی.
فیلتر کردن و جمعآوری دادهها
پایپلاینها با ابزارهای متنی مانند grep, cut, awk و wc بسیار قدرتمند میشوند.
ps aux: همهٔ فرایندها را نشان میدهد.grep python: فقط فرایندهای شامل واژهٔpython.grep -v grep: حذف خطی که خودgrepتولید کرده است.wc -l: شمارش تعداد خطوط باقیمانده.
هدایت داده به فایل یا شبکه
پایپلاینها فقط محدود به نمایش در ترمینال نیستند. خروجی نهایی را میتوان با تغییر مسیر در فایل ذخیره کرد یا برای برنامههای دیگر فرستاد.
در این مثال خروجی فیلتر شده علاوه بر نمایش، در فایل ssh-logins.txt هم نوشته میشود.
پایپهای پیشرفته
command1 |& command2: این ساختار در Bash خروجی استاندارد و خطا را با هم بهcommand2میدهد.-
xargs: ورودی پایپ را به صورت آرگومانهای جدید استفاده میکند و برای اجرای دستهای دستورات مفید است. -
از Bash نسخهٔ ۴ به بعد، میتوانید با
coprocپایپلاینهای تعاملی ایجاد کنید که دادهها را به صورت غیرهمزمان پردازش میکنند؛ اگرچه این فراتر از محدودهٔ این درس است.
نکات عملی
- هر مرحله باید کاری مشخص و کوچک انجام دهد؛ این فلسفهٔ «ابزارهای کوچک، کارهای بزرگ» یونیکس است.
- برای اشکالزدایی، میتوانید در میانهٔ پایپلاین دستور
teeیاcat -nقرار دهید تا ببینید دادهها در هر مرحله چه تغییری کردهاند. - پایپلاینها در اسکریپتنویسی Shell کمک میکنند بدون نوشتن برنامهٔ پیچیده، دادهها را پردازش و گزارشگیری کنید.