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

دو مورد از این ویژگی های قدرتمند لوله کشی و تغییر مسیر هستند. این ویژگی ها شما را قادر می سازد تا خروجی و ورودی دستورات را به دستورات و فایل های دیگر هدایت کنید.

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

پیش نیازها

برای درک کامل این راهنما، حداقل باید موارد زیر را داشته باشید:

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

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

Piping در لینوکس چیست؟

قبل از اینکه بخواهیم در مورد چگونه غوطه ور شویم، اصلاً لوله کشی به چه معناست؟ Piping عمل هدایت خروجی یک دستور لینوکس به عنوان ورودی به دستور دیگر است. شما می توانید خروجی استاندارد یا خطای استاندارد را از یک دستور به دستور دیگر با استفاده از لوله کشی هدایت کنید.

یک مثال ساده از لوله کشی زمانی است که شما خروجی یک دستور را می گیرید و از آن به عنوان ورودی برای دستور دیگر استفاده می کنید. برای دستیابی به این امر از متاکاراکتر لوله (|) استفاده می شود.

اگر با مفهوم متاکاراکترها تازه کار هستید، این فقط یک نام فانتزی برای کاراکترهایی با معنای خاص در خط فرمان است. به غیر از pipe (|) متاکاراکترهای دیگری در لینوکس وجود دارد. مثال‌های متداول شامل کمتر از (<)، بزرگ‌تر از (>) و علامت (&) است.

مبانی لوله کشی

نحو اصلی استفاده از pipe دستور به شرح زیر است:

command1 | command2 | command3 | ... | commandN

در نحو بالا، the terminal دستورات را از چپ به راست اجرا خواهد کرد. با شروع خواهد شد command1، و سپس خروجی به ورودی خواهد شد command2. خروجی های command2 سپس به عنوان ورودی استفاده خواهد شد command3 و غیره روی. خوبی در مورد لوله کشی این است که می توانید هر تعداد دستورات را که می خواهید زنجیره بزنید.

نمونه های لوله کشی

در زیر چندین نمونه از استفاده از pipe دستور برای انجام وظایف مختلف

1. شمارش تعداد فایل ها و دایرکتوری ها

ls -l | wc -l

در مثال بالا، بخش اول تمام فایل‌ها و دایرکتوری‌های موجود در فهرست فعلی را با استفاده از فهرست فهرست می‌کند ls فرمان اضافی -l گزینه می گوید ls دستور فهرست کردن محتویات در قالب لیست طولانی.

خروجی از ls -l سپس دستور به بخش دوم منتقل می شود. این wc -l دستور تعداد خطوط از خروجی را می شمارد ls -l دستور را در قسمت اول قرار داده و نتیجه را در قسمت چاپ می کند terminal.

2. مرتب سازی لیستی از فایل ها و دایرکتوری ها

ls | sort

در دستور بالا، ls دستور خروجی لیست فایل ها و دایرکتوری ها در دایرکتوری فعلی است. لیست سپس به لوله کشی می شود sort دستور، که آنها را بر اساس حروف الفبا مرتب می کند و نتیجه را در صفحه چاپ می کند terminal.

3. مرتب سازی و نمایش کلمات منحصر به فرد از یک فایل

cat words.txt | sort -r | uniq

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

پیشنهاد می‌کنیم بخوانید:  ایجاد فایل های اجرایی از اسکریپت های پایتون با py2exe

خروجی به لوله کشی می شود sort -r دستور، که کلمات را به ترتیب حروف الفبا معکوس مرتب می کند. در نهایت، کلمات مرتب شده به لوله منتقل می شوند uniq دستور، که موارد تکراری را حذف می کند و کلمات مرتب شده منحصر به فرد را خروجی می دهد.

چرا و چه زمانی باید Command Piping Linux را اعمال کنید؟

Piping چیزی بیش از دانستن نحو نیاز دارد. نحو بسیار ساده است. برای استفاده موثر از لوله کشی، باید ماهیت آن را درک کنید.

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

Piping به معنای راهی برای زنجیره دستورات نامرتبط نیست که می خواهید به صورت متوالی اجرا شوند. اگر نیاز به انجام این کار دارید، دستورات خود را در قسمت بنویسید terminal و با استفاده از دستور زیر آنها را با نقطه ویرگول (;) جدا کنید:

command1 ; command2 ; ... ; commandN

تغییر مسیر در لینوکس چیست؟

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

یکی از زمینه های اصلی که در آن تغییر مسیر مفید است، هنگام کار با دستورات و فایل ها است. برای مثال می‌توانید خروجی یک دستور را به جای چاپ کردن خروجی در فایل، تغییر مسیر دهید terminal. از طرف دیگر، می توانید یک فایل خاص را به عنوان ورودی یک فرمان اعلام کنید.

مانند لوله کشی، لینوکس کاراکترهای خاصی را برای انجام تغییر مسیر ارائه می کند. در اینجا کاراکترهای مهم تغییر مسیر فایل در لینوکس و کارهایی که انجام می دهند آورده شده است:

  • > – خروجی یک دستور را به یک فایل معین هدایت می کند.
  • < – محتویات یک فایل داده شده را به یک دستور هدایت می کند.
  • >> – خروجی یک دستور را به یک فایل معین هدایت می کند. در صورت وجود و داشتن محتوا، خروجی را اضافه می کند.
  • 2> – پیام های خطا را از یک دستور به یک فایل داده شده هدایت می کند.
  • 2>> – یک پیغام خطا را از یک دستور به یک فایل داده شده هدایت می کند. اگر فایل موجود باشد و محتوا داشته باشد، پیغام خطا را اضافه می کند.
  • &> – خروجی و خطای استاندارد را به یک فایل معین هدایت می کند.
  • &>> – خروجی و خطای استاندارد را به یک فایل معین هدایت می کند. در صورت وجود و داشتن محتوا به فایل اضافه می شود.

بیایید به هر کاراکتر تغییر مسیر فایل به طور عمیق نگاه کنیم.

1. تغییر مسیر خروجی با >

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

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

شما می توانید تغییر مسیر خروجی را با استفاده از نحو زیر انجام دهید:

command > file

خروجی دویدن command به نوشته خواهد شد file به جای خروجی استاندارد (یا، به عبارت دیگر، چاپ شده در terminal). در اینجا مثالی از روش انجام تغییر مسیر خروجی آورده شده است:

ls -a > contents.txt

در دستور بالا، لیست موارد موجود در فهرست فعلی (شامل dotfiles، دایرکتوری ها و فایل ها) در contents.txt فایل. شما هیچ خروجی را در terminal به دلیل تغییر مسیر

2. تغییر مسیر خروجی با >>

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

پیشنهاد می‌کنیم بخوانید:  روش نصب پایتون روی CentOS 8

نحو به شرح زیر است:

command >> file

در اینجا نمونه ای از استفاده از تغییر مسیر خروجی با >> برای انجام همان عمل قبلی:

ls -a >> contents.txt

3. تغییر مسیر ورودی با <

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

command < file

در اینجا مثالی از استفاده از تغییر مسیر ورودی آورده شده است:

wc -w < files.txt

در مثال بالا، ما در حال عبور هستیم files.txt به عنوان ورودی به wc -w دستور، که تعداد کلمات فایل را می شمارد. اما در بسیاری از سناریوها نیازی به استفاده از کاراکتر تغییر مسیر ورودی ندارید زیرا این رفتار پیش فرض است. به عنوان مثال، دستور بالا مشابه دستور زیر است:

wc -w files.txt

4. خطای تغییر مسیر با 2> و 2>>

هنگام کار روی خط فرمان، ممکن است با خطا مواجه شوید. به عنوان مثال، اگر می خواهید یک فایل را بدون مجوزهای مناسب اجرا کنید. به جای اجازه دادن به terminal با چاپ کردن خطا، می توانید از کاراکتر error redirection برای تعیین اینکه پیام خطا باید کجا برود استفاده کنید.

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

ls nonexistent 2> error.txt

در مثال بالا، terminal از آنجایی که هیچ فایلی با نام وجود ندارد، یک خطا ایجاد می کند nonexistent. اما به جای چاپ آن در console، آن را در ذخیره می شود error.txt فایل به دلیل کاراکتر خطای تغییر مسیر. با این حال، اگر خطایی وجود نداشته باشد، فایل چیزی نخواهد داشت.

اگر باید یک خطا را به جای بازنویسی محتویات آن به فایل موجود اضافه کنید، از آن استفاده کنید 2>> بجای 2>.

5. خروجی و تغییر مسیر خطا با &> و &>>

به جای انتخاب تغییر مسیر خروجی استاندارد یا خطاهای استاندارد به یک فایل، &> به شما امکان می دهد هر دو را به طور همزمان تغییر مسیر دهید. می توانید فکر کنید &> به عنوان خلاصه ای برای ترکیب کاراکترهای تغییر مسیر خروجی (>) و تغییر مسیر خطا (2>).

نحو استفاده از &> به شرح زیر است:

command &> output.txt

خطا یا خروجی از command به نوشته شده است output.txt فایل. در اینجا یک مثال است:

ls sample &> output.txt

در دستور بالا، اگر sample دایرکتوری موجود نیست یا در دسترس است اما شما مجوز خواندن ندارید، یک خطای مناسب در آن نوشته می شود output.txt فایل. اما اگر وجود داشته باشد و مجوز خواندن داشته باشید، محتوای آن در خروجی خواهد بود output.txt فایل.

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

چگونه Piping و Redirection را برای آزادسازی قدرت خط فرمان ترکیب کنیم

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

دستور زیر را به عنوان مثال در نظر بگیرید:

ls | grep ".txt" > text_files.txt

این ls دستور محتویات دایرکتوری فعلی را فهرست می کند. خروجی به لوله کشی می شود grep دستور فیلتر کردن فایل های متنی در نهایت، خروجی از grep دستور به مسیر هدایت می شود text_files.txt فایل.

این مثال ساده و در عین حال قدرتمند نشان می دهد که وقتی صحبت از لوله کشی و تغییر مسیر می شود، تنها محدودیت ذهن شماست.

نتیجه

در این آموزش با اصول پایپینگ و تغییر مسیر در لینوکس آشنا شدید. ما اصول اولیه را همراه با مثال هایی از روش استفاده از این دو توضیح دادیم.

این دو ویژگی به‌صورت مجزا می‌توانند قدرتمند باشند، اما همانطور که در بخش آخر نشان داده شده است، می‌توانید با ترکیب آنها در دستورات خود جلوتر بروید.