هدایت ورودی و خروجی (I/O) در لینوکس

هدایت ورودی و خروجی (I/O) در لینوکس

هدایت ورودی و خروجی (I/O) در لینوکس

در این آموزش به بررسی یک خصوصیت قدرتمند که توسط اکثر برنامه های تحت خط فرمان لینوکس مورد استفاده قرار میگیرد میپردازیم. این خصوصیت همان هدایت ورودی و خروجی هست. همانطور که قبلا نیز مشاهده فرموده اید اکثر دستورات لینوکس مثل ls و … خروجی خود را در صفحه نمایش چاپ میکنند. با استفاده از برخی نمادهای خاص میتوانیم خروجی دستورات را به یک فایل، دستگاه و یا حتی به یک دستور دیگر به عنوان ورودی برای آن دستور، هدایت کنیم.

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

اکثر برنامه های خط فرمان که خروجی خود را نمایش میدهند، این خروجی را به مرکزی بنام خروجی استاندارد میفرستند. و بصورت پیشفرض خروجی استاندارد نیز محتوای خودش، را به صفحه نمایش میفرستد.برای هدایت محتوای خروجی استاندارد به یک فایل از کاراکتر “<” مطابق تصویر زیر استفاده میشود:

هدایت ورودی و خروجی (I/O) در لینوکس

دستور top فعالیت های پردازنده را نمایش میدهد. لیستی از برنامه هایی را نمایش میدهد که cpu را درگیر خود کرده اند.

در این مثال دستور top اجرا شده و خروجی آن در فایل azaronline.txt نوشته میشود. در حالت عادی خروجی دستور top در صفحه ترمینال نمایش داده میشود. اما در این مثال چون خروجی دستور top به فایل هدایت شده است پس در ترمینال خروجی را نخواهید دید.

حالا با هر بار زدن دستور فوق خروجی دستور top در فایل azaronline.txt بازنویسی میشود و اطلاعات جدید جایگزین اطلاعات یا محتویات فایل azaronline.txt میشوند. اگر بخواهید محتویات قبلی فایل ثابت بمانند و محتویات جدید به انتهای فایل اضافه شوند باید بجای “<” از “<<” استفاده نمایید. مطابق تصویر زیر:

2

با هر بار اجرای دستور فوق خروجی حاصل به انتهای فایل azaronline.txt اضافه میشود و فایل بزرگ تر میشود. اگر فایل azaronline.txt موجود نباشد فایلی با نام مذکور ایجاد خواهد شد و نتیجه دستور در داخل آن نوشته خواهد شد.

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

بسیاری از دستورات میتوانند از مرکزی بنام ورودی استاندارد، ورودی بپذرند. بصورت پیشفرض ورودی استاندارد محتوای خود را از کیبورد دریافت میکند ولی مشابه خروجی استاندارد میتوان این را نیز هدایت کرد. برای هدایت ورودی استاندارد بجای کیبورد از یک فایل، میتوان از کاراکتر “>” مطابق زیر استفاده کرد:

3

در مثال فوق ما از دستور sort برای پردازش محتوای فایل azaronline.txt استفاده کرده ایم. خروجی این دستور تا زمانی که خروجی استاندارد را هدایت ننماییم در صفحه نمایش، نمایش داده خواهد شد. در همین دستور میتوانیم خروجی استاندارد را به یک فایل هدایت نماییم. مطابق شکل زیر:

4

در دستور فوق با استفاده از دستور sort محتوای فایل azaronline.txt را مرتب سازی کرده و سپس محتوای مرتب شده را داخل فایل my_sorted_file.txt ذخیره نمودیم.

همانور که میبینید میتوان هم ورودی و هم خروجی یک دستور را هدایت کرد. توجه داشته باشید که ترتیب هدایت مهم نیست تنها ضروری هست که عملگرهای هدایت یعنی “>” و “<” باید بعد از سایر آپشن ها و آرگومانهای دستور مورد نظر نوشته شوند.

خط لوله یا Pipeline

مهمترین و قدرتمند ترین استفاده ای که هدایت I/O دارد این است که میتوانید چند دستور را به یکدیگر وصل کنید. این کار با Pipeline صورت میگیرد. با استفاده از Pipeline ها خروجی استاندارد یک دستور به ورودی استاندارد دستور دیگر ارسال میشود. مثالی در تصویر زیر مشاهده میکنید:

5

در این مثال خروجی دستور ls بعنوان ورودی به دستور less داده شده است. دستور less برای مشاهده فایل هایی که اطلاعات آنها بیشتر از یک صفحه هست و یا برای مشاهده خروجی دستوراتی که بیش از یک صفحه هستند استفاده میشود.

با اتصال دستورها به یکدیگر میتوانید شاهکارهای شگفت انگیزی انجام دهید. در زیر برخی از مثالها را ارائه میدهیم.

مثالی از دستور هایی که با Pipeline به هم متصل میشوند:

6

10 تا از جدید ترین فایل ها را در دایرکتوری جاری را لیست میکند.

7

لیستی از دایرکتوریها و مقدار فضای اشغال شده توسط آنها را می آورد. و از بزرگ ترین دایرکتوری به کوچکترین دایرکتوری مرتب میشوند.

 

8

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

 

فیلترها

نوعی از برنامه که بصورت مکرر در Pipeline ها مورد استفاده قرار میگیرد فیلتر نام دارند. فیلترها ورودی استاندارد را گفته و عملی را روی آن انجام داده و نتیجه حاصل را به خروجی استاندارد میفرستد. میتوان این فیلتر ها را باهم ترکیب کرد و پردازش های قدرتمندی روی اطلاعات انجام داد. در زیر برنامه های رایجی که بعنوان فیلت عمل میکنند آورده شده است.

دستورات فیلتر:

sort ورودی استاندارد را مرتب کرده و حاصل مرتب شده را به خروجی استاندارد میفرستد.

uniq یک رشته ورودی استاندارد مرتب شده را میگیرد و سپس خط های تکراری را از ورودی پاک میکند (یعنی مطمعن میشود که هر خط فقط یکبار نوشته شده است.)

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

 

fmt متنی را از ورودی استاندارد خوانده و آن را فرمت کرده و به خروجی میفرستد.

pr ورودی را از ورودی استاندارد دریافت کرده و آن را به صفحاتی تقسیم میکند و به هر صفحه header و footer اضافه کرده و آن را برای پرینت آماده میکند.

head چند خط از ابتدای فایل را به خروجی میفرستد. این دستور در مواردی مانند بدست آوردن عنوان فایل مفید خواهد بود.

tail این دستور یک ورودی دریافت میکند و چند خط از خطوط پایانی آن را به خروجی میدهد. ( این دستور در مواردی مانند دریافت محتویات اخیر اضافه شده به فایل های لاگ مفید هست .)

tr کاراکتر ها را ترجمه میکند. میتواند برای عملیاتی مانند تبدیل کاراکتر ها از حالت حروف بزرگ به حروف کوچک و بلعکس و نیز برای تغییر کاراکتر پایان هر خط از یک نوع به نوع دیگر، استفاده شود. (برای مثال تبدیل فایل DOS به فایل متنی مورد استفاده در یونیکس)

sed جریان ورودی را ویرایش میکند. عملیات ترجمه ای پیچیده تری نسبت به tr میتواند انجام دهد.

awk زبان برنامه نویسی بسیار قوی برای طراحی فیلتر هست.

 

نظرات کاربران