خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

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

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

در این درس، ما یک ویژگی قدرتمند استفاده شده با بسیاری از برنامه‌های خط فرمان به نام تغییر مسیر ورودی-خروجی رامرور می‌کنیم. به طوری که دیده‌ایم، بسیاری فرمانها از قبیل ls خروجی‌شان را در نمایشگر چاپ می‌کنند. هر چند این نباید مسئله‌ای باشد. با استفاده از برخی نشانه‌گذاری‌ها می‌توانیم خروجی بسیاری از فرمانها را به فایلها، دستگاه‌ها، و حتی ورودی سایر فرمانها تغییر مسیر بدهیم.

خروجی استاندارد

اکثر برنامه‌های خط فرمان که نتایج‌شان را نمایش می‌دهند، با فرستادن نتایج به وسیله‌ای به نام خروجی استاندارد این کار را انجام می‌دهند. به طور پیش‌فرض خروجی استاندارد محتویاتش را به نمایشگر هدایت می‌کند. برای تغییر مسیر خروجی استاندارد به یک فایل، کاراکتر «‎>‎» به این صورت به کار می‌رود:

[me@linuxbox me]$ ls > file_list.txt

در این مثال، فرمان ls اجرا می‌شود و نتایج در یک فایل به نام ‎file_list.txt‎ نوشته می‌شوند. چون خروجی ls به فایل تغییر مسیر یافته بود، نتایجی در نمایشگر ظاهر نمی‌گردد.

هر بار که فرمان فوق تکرار بشود، فایل ‎file_list.txt‎ از ابتدا با خروجی فرمان ls رونویسی می‌گردد (مترجم: در حقیقت ابتدا محتویات فایل پاک می‌شود و پس از آن مطالب جدید از ابتدای آن نوشته می‌شود یعنی به هر حال محتوای فایل از بین می‌رود حتی اگر خروجی جدیدی وجود نداشته باشد.). در صورتیکه می‌خواهید به جای آن نتایج جدید به فایل پیوست بشوند، «‎>>‎» را بکار ببرید، مانند این:

[me@linuxbox me]$ ls >> file_list.txt

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

ورودی استاندارد

بسیاری از فرمانها می‌توانند ورودی را از وسیله‌ای به نام ورودی استاندارد دریافت کنند. به طور پیش‌فرض، ورودی استاندارد محتویاتش را از صفحه کلید می‌گیرد، اما مانند خروجی استاندارد، می‌تواند تغییر مسیر داده شود. برای تغییر مسیر ورودی استاندارد از یک فایل به جای صفحه کلید، کاراکتر «‎<‎» به این صورت به کار می‌رود:

[me@linuxbox me]$ sort < file_list.txt

در مثال فوق، ما از فرمان sort برای پردازش محتویات فایل ‎file_list.txt‎ استفاده کردیم. نتایج در نمایشگر خارج می‌شوند چون خروجی استاندارد تغییر مسیر نیافته بود. می‌توانستیم خروجی استاندارد را به فایل دیگری تغییر مسیر بدهیم، مانند این:

[me@linuxbox me]$ sort < file_list.txt > sorted_file_list.txt

به طوری که می‌توانید ببینید، هر دو خروجی استاندارد و ورودی استاندارد یک فرمان می‌توانند تغییر مسیر داده شوند. آگاه باشید که ترتیب تغییر مسیر اهمیت ندارد. تنها التزام آن است که عملگرهای تغییر مسیر («‎<‎» و «‎>‎») باید بعد از سایر گزینه‌ها و شناسه‌ها در فرمان ظاهر شوند.

(مترجم: یعنی می‌توانستیم فرمان فوق را به این شکل نیز بنویسیم ‎sort > sorted_file_list.txt < file_list.txt‎)

خط لوله‌ها

مفیدترین و قدرتمندترین موردی که می‌توانید با تغییر مسیر ورودی-خروجی برای اتصال چندین فرمان با یکدیگر انجام بدهید به وسیله چیزی است که خط لوله نامیده می‌شود. با خط لوله‌ها، خروجی استاندارد یک فرمان به ورودی یک فرمان دیگر تغذیه می‌شود. این هم موردی که کاملاً دلپسند من است:

[me@linuxbox me]$ ls -l | less

در این مثال، خروجی فرمان ls به برنامه less خورانده می‌شود. با استفاده از این شگردِ ‎"| less"‎، شما می‌توانید خروجی هر فرمانی را قابل مرور کردن نمایید. من این روش را همیشه به کار می‌برم.

با متصل کردن فرمانها به یکدیگر، می‌توانیدکارهای برجسته شگفت‌انگیزی انجام بدهید. در اینجا چند مثال که شما برای امتحان کردن لازم دارید، آمده است:

مثالهای فرمانهای استفاده شده با یکدیگر در خط لوله‌ها
فرمان آنچه انجام می‌دهد

ls -lt | head

نمایش 10 فایل جدیدتر در دایرکتوری جاری.

du | sort -nr

نمایش فهرستی از دایرکتوری‌های فرعی و اندازه فضای مصرفی آنها،به صورت مرتب شده از بزرگترین به کوچکترین فایل.

find . -type f -print | wc -l

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

فیلترها

یک نوع برنامه که بارها در خط لوله‌ها به کار می‌رود فیلتر نامیده می‌شود. فیلترها ورودی استاندارد را گرفته و عملیاتی روی آن انجام می‌دهند و نتایج را به خروجی استاندارد می‌فرستند. به این ترتیب، آنها می‌توانند در روشهای نیرومند برای پردازش اطلاعات ترکیب بشوند. این هم برخی برنامه‌های رایج که می‌توانند به عنوان فیلتر عمل کنند:

تعدادی از فرمانهای فیلتر که بیشتر متداول هستند
برنامه کاری که انجام می‌دهد

sort

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

uniq

از یک جریان مرتب شده داده‌های دریافت شده از ورودی استاندارد سطرهای تکراری داده‌ها را حذف می‌کند (یعنی اطمینان ایجاد می‌کند که هر یک از سطرها منحصر بفرد است).

grep

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

fmt

متن را از ورودی استاندارد می‌خواند، سپس متن قالب‌بندی شده را درخروجی استاندارد بیرون می‌دهد.

pr

ورودی متن را از ورودی استاندارد دریافت می‌کند و داده‌ها را با نشانه‌های صفحه، سرآیند و پانویس به صفحه‌های آماده برای چاپ شدن، تفکیک می‌کند.

head

چند سطر ابتدای ورودی‌اش را بیرون می‌دهد. مناسب برای به دست آوردن سرآیند یک فایل.

tail

چند سطر انتهای ورودی‌اش را بیرون می‌دهد. مناسب برای مواردی مانند به دست آوردن آخرین ورودی‌های یک فایل ثبت رخداد.

tr

کاراکترها را ترجمه می‌کند. می‌تواند برای انجام وظایفی از قبیل تغییر و تبدیل‌های حالت کوچک و بزرگ حروف یا برگرداندن کاراکترهای خاتمه دهنده سطر از یک نوع به نوع دیگر (برای مثال، تبدیل فالهای متن DOS به فایلهای متن سَبکِ Unix) به کار برود.

sed

ویرایشگر جریانی. می‌تواند ترجمه‌های متن پیچیده‌تر از tr انجام بدهد.

awk

یک زبان برنامه‌نویسی کامل طراحی شده برای ساختن فیلترها. فوق‌العاده قدرتمند.