~2 min read • Updated Jul 18, 2025

هر برنامه در لینوکس با سه جریان اصلی داده تعامل دارد:


  • stdin: ورودی استاندارد (معمولاً کیبورد)
  • stdout: خروجی استاندارد (نمایش در صفحه)
  • stderr: نمایش پیام‌های خطا

تغییر مسیر خروجی استاندارد (stdout)


ls -l /usr/bin > ls-output.txt

خروجی به جای نمایش در ترمینال در فایل ذخیره می‌شود.


تغییر مسیر خطاها (stderr)


ls -l /bin/usr 2> ls-error.txt

فقط خطاها در فایل ثبت می‌شوند، خروجی عادی در ترمینال باقی می‌ماند.


ذخیره همزمان stdout و stderr


روش سنتی:


ls -l /bin/usr > ls-output.txt 2>&1

روش جدید در Bash:


ls -l /bin/usr &> ls-output.txt

افزودن خروجی به فایل (append)


ls -l /usr/bin >> ls-output.txt

داده‌ها به فایل اضافه می‌شوند، بدون پاک شدن محتوی قبلی.


دور انداختن خطاها با /dev/null


ls -l /bin/usr 2> /dev/null

/dev/null جریان خروجی را حذف می‌کند — اصطلاحاً «سطل زباله یونیکسی».


استفاده از cat و ورودی استاندارد (stdin)


cat filename

نمایش فایل در خروجی استاندارد


ساخت فایل با ورودی مستقیم:


cat > lazy_dog.txt
متنی که تایپ می‌کنیم

پایان ورودی با Ctrl+D


خواندن ورودی از فایل با <


cat < lazy_dog.txt

اتصال دستورات با pipe (|)


ls -l /usr/bin | less

خروجی ls وارد less می‌شود و قابل پیمایش خواهد بود.


مرتب‌سازی و حذف تکرار با sort و uniq


ls /bin /usr/bin | sort | uniq | less

نمایش فقط موارد تکراری:


ls /bin /usr/bin | sort | uniq -d | less

شمارش خطوط با wc


ls /bin /usr/bin | sort | uniq | wc -l

شمار فایل‌های اجرایی منحصربه‌فرد


جستجوی الگوها با grep


ls /bin /usr/bin | sort | uniq | grep zip

یافتن ابزارهای مرتبط با فشرده‌سازی


نمایش اولین یا آخرین خطوط با head و tail


head -n 5 ls-output.txt
tail -n 5 ls-output.txt

استفاده در pipe:


ls /usr/bin | tail -n 5

مانیتور لحظه‌ای فایل لاگ:


tail -f /var/log/messages

برای توقف Ctrl+C بزنید.


ذخیره همزمان با tee در میانهٔ pipe


ls /usr/bin | tee ls.txt | grep zip

همزمان ذخیره کل لیست در ls.txt و نمایش موارد zip


نتیجه‌گیری


با شناخت جریان‌های ورودی/خروجی و استفاده از تکنیک‌هایی مانند redirection و pipeline، می‌توان داده‌ها را کنترل، پالایش و ذخیره‌سازی کرد. ابزارهایی مانند grep، sort، wc، tee و /dev/null در کنار stdin، stdout و stderr دنیای ترمینال لینوکس را قدرتمند و قابل شخصی‌سازی می‌سازند.


Written & researched by Dr. Shahin Siami