گروه کاربران لینوکس دانشگاه شهید مدنی آذربایجان

لاگ دانشگاه آذربایجان :: Azarbaijan University Linux User Group

گروه کاربران لینوکس دانشگاه شهید مدنی آذربایجان

لاگ دانشگاه آذربایجان :: Azarbaijan University Linux User Group

یادگیری پوسته لینوکس:I/O Redirection

در این درس، یک ویژگی قدرت مندی را که توسط بسیاری از برنامه های خط فرمان به نام input/output redirection مورد استفاده قرار می گیرند را بررسی میکنیم. همانطور که مشاهده کردیم، بسیاری از دستورات مانند 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

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

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

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

خطوط لوله

مفید ترین و قدرتمند ترین کاری که می توانید با هدایت I / O انجام دهید این است که دستورات متعدد را همراه با آنچه  که  pipeline(خطوط لوله) نامیده می شود، وصل کنید. با خط لوله، خروجی استاندارد یک فرمان به ورودی استاندارد دیگری وارد می شود. به مثال زیر توجه کنید:

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

در این مثال، خروجی دستور ls به داخل less  وارد می شود. با استفاده از این ترفند « | less»، می توانید هر دستور را از خروجی پیمایش کنید.

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

کاری که انجام می دهد:

فرمان

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

 

ls -lt | head

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

 

du | sort -nr

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

find . -type f -print | wc -l

فیلترها

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

کاری که انجام می دهد

برنامه

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

 Sort

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

uniq

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

grep

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

fmt

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

pr

اولین خطوط ورودی آن را خروجی می دهد. برای گرفتن هدر یک فایل  مفید است.

head

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

tail

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

tr

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

sed

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

awk

 

انجام وظایف با خطوط لوله

۱. چاپ از خط فرمان: لینوکس برنامه ای با نام lpr فراهم می کند که ورودی استاندارد را می پذیرد و آن را به چاپگر می فرستد. اغلب با لوله ها و فیلترها استفاده می شود. در اینجا چند نمونه از این موارد وجود دارد:

cat poorly_formatted_report.txt | fmt | pr | lpr

 

cat unsorted_list_with_dupes.txt | sort | uniq | pr | lpr

 

در مثال اول، ما از cat برای خواندن فایل و خروجی آن به خروجی استاندارد استفاده می کنیم که به ورودی استاندارد fmt وارد می شود. fmt متن را به پاراگراف های مرتب و خروجی آن را به خروجی استاندارد تبدیل می کند که به ورودی استاندارد pr می انجامد. pr متن را به صورت منظم به صفحات جدا می کند و خروجی آن را به خروجی استاندارد می برد که به ورودی استاندارد lpr وارد می شود. lpr ورودی استاندارد خود را می گیرد و آن را به چاپگر می فرستد.

مثال دوم با یک لیست طبقه بندی نشده از داده ها، با ورودی های تکراری شروع می شود. اول، cat این فهرست را به sort  میفرستد که  sortآن را مرتب می کند و آن را به uniq می فرستد که هرچیز تکراری را حذف می کند. PR و LPR بعدی برای نوشتن و چاپ لیست استفاده می شوند.

 

۲. مشاهده محتویات فایل های tar: اغلب شما نرم افزار را به عنوان یک فایل tar gzip شده توزیع خواهید کرد. این فایل بایگانی نوار سنتی یونیکس (ایجاد شده با tar) است که با gzip فشرده شده است. شما می توانید این فایل ها را با پسوند فایل های سنتی خود، ".tar.gz" یا ".tgz" تشخیص دهید. شما می توانید از دستور زیر برای مشاهده دایرکتوری از یک فایل در یک سیستم لینوکس استفاده کنید:

tar tzvf name_of_file.tar.gz | less

 

   

 

منبع:

http://www.linuxcommand.org/lc3_lts0070.php

 

تهیه شده توسط: ۹۵۱۸۳۰۲۰۴

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد