99fb7f0e82
- Created a new sitemap.xml file for better SEO. - Added a compressed version of the sitemap as sitemap.xml.gz. - Introduced extra.css for custom styles, including Persian font support (IRANSansX). - Defined font-face rules for regular and bold styles of IRANSansX. - Implemented various text styles and layout adjustments for better readability. - Enhanced Mermaid diagram styles to support Persian text rendering.
59 lines
3.5 KiB
Markdown
59 lines
3.5 KiB
Markdown
# درسنامه ۱۱: ساخت پایپلاین در خط فرمان لینوکس
|
|
|
|
## مفهوم پایپلاین
|
|
پایپلاین (Pipeline) به اتصال خروجی یک دستور به ورودی استاندارد دستور بعدی گفته میشود. این اتصال با کاراکتر `|` انجام میشود و به شما اجازه میدهد ابزارهای ساده را کنار هم قرار دهید تا کار پیچیدهتری انجام دهند.
|
|
|
|
```bash
|
|
$ ls | sort
|
|
```
|
|
|
|
در این مثال، `ls` فهرست فایلها را تولید میکند و `sort` همان لیست را مرتب میکند.
|
|
|
|
## زنجیرههای چند مرحلهای
|
|
میتوانید چندین دستور را پشت سر هم زنجیره کنید. هر مرحله دادههای خود را به مرحلهٔ بعدی میدهد.
|
|
|
|
```bash
|
|
$ ls /etc | grep "^ssh" | sort | nl
|
|
```
|
|
|
|
توضیح مراحل:
|
|
1. `ls /etc`: فهرست فایلهای `/etc`.
|
|
2. `grep "^ssh"`: فیلتر کردن مواردی که با `ssh` شروع میشوند.
|
|
3. `sort`: مرتبسازی نتایج.
|
|
4. `nl`: شمارهگذاری خطوط خروجی نهایی.
|
|
|
|
## فیلتر کردن و جمعآوری دادهها
|
|
پایپلاینها با ابزارهای متنی مانند `grep`, `cut`, `awk` و `wc` بسیار قدرتمند میشوند.
|
|
|
|
```bash
|
|
$ ps aux | grep python | grep -v grep | wc -l
|
|
```
|
|
|
|
- `ps aux`: همهٔ فرایندها را نشان میدهد.
|
|
- `grep python`: فقط فرایندهای شامل واژهٔ `python`.
|
|
- `grep -v grep`: حذف خطی که خود `grep` تولید کرده است.
|
|
- `wc -l`: شمارش تعداد خطوط باقیمانده.
|
|
|
|
## هدایت داده به فایل یا شبکه
|
|
پایپلاینها فقط محدود به نمایش در ترمینال نیستند. خروجی نهایی را میتوان با تغییر مسیر در فایل ذخیره کرد یا برای برنامههای دیگر فرستاد.
|
|
|
|
```bash
|
|
$ journalctl -n 200 | grep sshd | tee ssh-logins.txt
|
|
```
|
|
|
|
در این مثال خروجی فیلتر شده علاوه بر نمایش، در فایل `ssh-logins.txt` هم نوشته میشود.
|
|
|
|
## پایپهای پیشرفته
|
|
- `command1 |& command2`: این ساختار در Bash خروجی استاندارد و خطا را با هم به `command2` میدهد.
|
|
- `xargs`: ورودی پایپ را به صورت آرگومانهای جدید استفاده میکند و برای اجرای دستهای دستورات مفید است.
|
|
```bash
|
|
$ ls *.log | xargs -n 1 gzip
|
|
```
|
|
|
|
- از Bash نسخهٔ ۴ به بعد، میتوانید با `coproc` پایپلاینهای تعاملی ایجاد کنید که دادهها را به صورت غیرهمزمان پردازش میکنند؛ اگرچه این فراتر از محدودهٔ این درس است.
|
|
|
|
## نکات عملی
|
|
- هر مرحله باید کاری مشخص و کوچک انجام دهد؛ این فلسفهٔ «ابزارهای کوچک، کارهای بزرگ» یونیکس است.
|
|
- برای اشکالزدایی، میتوانید در میانهٔ پایپلاین دستور `tee` یا `cat -n` قرار دهید تا ببینید دادهها در هر مرحله چه تغییری کردهاند.
|
|
- پایپلاینها در اسکریپتنویسی Shell کمک میکنند بدون نوشتن برنامهٔ پیچیده، دادهها را پردازش و گزارشگیری کنید.
|