نحوه استفاده از Piping و Redirection در ترمینال لینوکس
رابط خط فرمان در لینوکس راه قدرتمندی برای انجام طیف وسیعی از وظایف در سیستم شما فراهم می کند. لینوکس به دلیل ریشههایش، آپشن های زیادی در ترمینال دارد.
دو مورد از این ویژگی های قدرتمند لوله کشی و تغییر مسیر هستند. این ویژگی ها شما را قادر می سازد تا خروجی و ورودی دستورات را به دستورات و فایل های دیگر هدایت کنید.
در این مقاله، معنای لولهکشی و تغییر مسیر در لینوکس را خواهید آموخت و به دنبال آن، نحوه استفاده از این ویژگیها را به طور عمیق مطالعه خواهید کرد.
پیش نیازها
برای درک کامل این راهنما، حداقل باید موارد زیر را داشته باشید:
درک اولیه از سیستم عامل لینوکس .
تجربه اولیه کار با خط فرمان لینوکس.
برای آزمایش دستورات به خط فرمان لینوکس دسترسی داشته باشید.
اگر تازه کار هستید یا نیاز به تجدید نظر دارید، به این آموزش خط فرمان لینوکس نگاهی بیندازید.
Piping در لینوکس چیست؟
قبل از اینکه بخواهیم در مورد چگونگی تحلیل کنیم، لوله کشی به چه معناست؟ Piping عمل هدایت خروجی یک دستور لینوکس به عنوان ورودی به دستور دیگر است. شما می توانید خروجی استاندارد یا خطای استاندارد را از یک دستور به دستور دیگر با استفاده از لوله کشی هدایت کنید.
یک مثال ساده از لوله کشی زمانی است که شما خروجی یک دستور را می گیرید و از آن به عنوان ورودی برای دستور دیگر استفاده می کنید. برای دستیابی به این امر از متاکاراکتر لوله (|) استفاده می شود.
اگر با مفهوم متاکاراکترها تازه کار هستید، این فقط یک نام فانتزی برای کاراکترهایی با معنای خاص در خط فرمان است. به غیر از pipe (|) متاکاراکترهای دیگری در لینوکس وجود دارد. مثالهای رایج شامل کمتر از (<)، بزرگتر از (>) و علامت (&) است.
مبانی لوله کشی
نحو اصلی استفاده از دستور pipe
به شرح زیر است:
command1 | command2 | command3 | ... | commandN
در نحو بالا، ترمینال دستورات را از چپ به راست اجرا می کند. با command1
شروع می شود و سپس خروجی به command2
وارد می شود. سپس خروجی های command2
به عنوان ورودی command3
و غیره استفاده خواهند شد. خوبی در مورد لوله کشی این است که می توانید هر تعداد دستورات را که می خواهید زنجیره بزنید.
نمونه های لوله کشی
در زیر چندین مثال از استفاده از دستور pipe
برای انجام کارهای مختلف آورده شده است.
1. شمارش تعداد فایل ها و دایرکتوری ها
ls -l | wc -l
در مثال بالا، بخش اول تمام فایل ها و دایرکتوری های موجود در فهرست فعلی را با استفاده از دستور ls
فهرست می کند. گزینه اضافی -l
به دستور ls
می گوید که محتویات را در قالب فهرست طولانی فهرست کند.
سپس خروجی دستور ls -l
به بخش دوم منتقل می شود. دستور wc -l
تعداد خطوط خروجی دستور ls -l
را در قسمت اول می شمارد و نتیجه را در ترمینال چاپ می کند.
2. مرتب سازی فهرست ی از فایل ها و دایرکتوری ها
ls | sort
در دستور بالا، دستور ls
فهرست فایل ها و دایرکتوری ها را در فهرست فعلی خروجی می دهد. سپس فهرست به دستور sort
هدایت می شود که آنها را بر اساس حروف الفبا مرتب می کند و نتیجه را در ترمینال چاپ می کند.
3. مرتب سازی و نمایش کلمات منحصر به فرد از یک فایل
cat words.txt | sort -r | uniq
مثال سوم شامل سه فرمان جداگانه است که توسط دو لوله به هم متصل شده اند. دستور اول محتویات فایل words.txt
را که حاوی فهرست ی از کلمات است را خروجی می دهد.
خروجی به دستور sort -r
هدایت می شود که کلمات را به ترتیب حروف الفبا معکوس مرتب می کند. در نهایت، کلمات مرتب شده به دستور uniq
هدایت می شوند، که تکراری ها را حذف می کند و کلمات مرتب شده منحصر به فرد را خروجی می دهد.
چرا و چه زمانی باید Command Piping Linux را اعمال کنید؟
Piping چیزی بیش از دانستن نحو نیاز دارد. نحو بسیار ساده است. برای استفاده موثر از لوله کشی، باید ماهیت آن را درک کنید.
هدف از لوله کشی کمک به فرمان های زنجیره ای با استفاده از خروجی یکی به عنوان ورودی دیگری است.
Piping به معنای راهی برای زنجیره دستورات نامرتبط نیست که می خواهید به صورت متوالی اجرا شوند. اگر لازم است این کار را انجام دهید، دستورات خود را در ترمینال بنویسید و با استفاده از دستور زیر آنها را با نقطه ویرگول (;) جدا کنید:
command1 ; command2 ; ... ; commandN
تغییر مسیر در لینوکس چیست؟
تغییر مسیر عمل دیکته کردن ورودی یا خروجی دستورات شما است. به طور پیش فرض، دستورات داده ها را از ورودی استاندارد دریافت می کنند و سپس نتایج را در خروجی استاندارد خروجی می دهند.
یکی از زمینه های اصلی که در آن تغییر مسیر مفید است، هنگام کار با دستورات و فایل ها است. به عنوان مثال می توانید خروجی یک دستور را به جای چاپ خروجی در ترمینال به یک فایل هدایت کنید. از طرف دیگر، می توانید یک فایل خاص را به عنوان ورودی یک فرمان اعلام کنید.
مانند لوله کشی، لینوکس کاراکترهای خاصی را برای انجام تغییر مسیر ارائه می دهد. در اینجا کاراکترهای مهم تغییر مسیر فایل در لینوکس و کارهایی که انجام می دهند آورده شده است:
>
– خروجی یک دستور را به یک فایل معین هدایت می کند.
<
– محتویات یک فایل داده شده را به یک دستور هدایت می کند.
>>
– خروجی یک دستور را به یک فایل داده شده هدایت می کند. در صورت وجود و داشتن محتوا، خروجی را اضافه می کند.
2>
- پیام های خطا را از یک دستور به یک فایل داده شده هدایت می کند.
2>>
– یک پیام خطا را از یک دستور به یک فایل داده شده هدایت می کند. اگر فایل موجود باشد و محتوا داشته باشد، پیغام خطا را اضافه می کند.
&>
– خروجی استاندارد و خطا را به یک فایل معین هدایت می کند.
&>>
– خروجی استاندارد و خطا را به یک فایل معین هدایت می کند. در صورت وجود و داشتن محتوا به فایل اضافه می شود.
بیایید به هر کاراکتر تغییر مسیر فایل به طور عمیق نگاه کنیم.
1. تغییر مسیر خروجی با >
نماد >
شما را قادر می سازد تا خروجی یک دستور را به یک فایل خاص هدایت کنید. با استفاده از نماد، می توانید خروجی را به هر فایل موجود هدایت کنید. اگر وجود نداشته باشد، کاراکتر تغییر مسیر خروجی به طور خودکار یک کاراکتر جدید ایجاد می کند.
با این حال، هنگام نوشتن روی یک فایل موجود باید مراقب باشید زیرا محتویات آن بدون هشدار بازنویسی می شود.
شما می توانید تغییر مسیر خروجی را با استفاده از نحو زیر انجام دهید:
command > file
خروجی command
در حال اجرا به جای خروجی استاندارد در file
نوشته می شود (یا به عبارت دیگر در ترمینال چاپ می شود). در اینجا مثالی از نحوه انجام تغییر مسیر خروجی آورده شده است:
ls -a > contents.txt
در دستور بالا، فهرست موارد موجود در فهرست فعلی (شامل dotfiles، دایرکتوری ها و فایل ها) در فایل contents.txt
نوشته می شود. به دلیل تغییر مسیر هیچ خروجی در ترمینال نخواهید دید.
2. تغییر مسیر خروجی با >>
>>
به شما امکان می دهد خروجی یک دستور را به یک فایل هدایت کنید. اما، برخلاف استفاده از یک کاراکتر بزرگتر از ( >
)، اگر بخواهید روی یک فایل موجود بنویسید (به جای بازنویسی محتوای آن) >>
خروجی را اضافه می کند. اگر فایل وجود نداشته باشد، یک فایل جدید ایجاد می کند.
نحو به شرح زیر است:
command >> file
در اینجا مثالی از استفاده از تغییر مسیر خروجی با >>
برای انجام همان عمل قبلی آورده شده است:
ls -a >> contents.txt
3. تغییر مسیر ورودی با <
کاراکتر <
در خط فرمان به شما امکان میدهد ورودی را بهجای صفحهکلید از یک فایل به یک دستور هدایت کنید. نحو تغییر مسیر ورودی با استفاده از <
به شرح زیر است:
command < file
در اینجا مثالی از استفاده از تغییر مسیر ورودی آورده شده است:
wc -w < files.txt
در مثال بالا، files.txt
بهعنوان ورودی دستور wc -w
ارسال میکنیم که تعداد کلمات موجود در فایل را شمارش میکند. اما در بسیاری از سناریوها نیازی به استفاده از کاراکتر تغییر مسیر ورودی ندارید زیرا این رفتار پیش فرض است. به عنوان مثال، دستور بالا مشابه دستور زیر است:
wc -w files.txt
4. تغییر مسیر خطا با 2>
و 2>>
هنگام کار بر روی خط فرمان، ممکن است با خطا مواجه شوید. به عنوان مثال، اگر می خواهید یک فایل را بدون مجوزهای مناسب اجرا کنید. به جای اینکه به ترمینال اجازه دهید با چاپ آن خطا ایجاد کند، می توانید از کاراکتر error redirection برای تعیین اینکه پیام خطا کجا باید برود استفاده کنید.
یک مکان خوب برای تغییر مسیر خطاها، فایلی است که به ذخیره خطاها اختصاص داده شده است. در اینجا یک مثال ساده از دستوری است که سعی میکند به فهرست فایلهای موجود در فهرستی که وجود ندارد دسترسی پیدا کند:
ls nonexistent 2> error.txt
در مثال بالا، ترمینال یک خطا ایجاد می کند زیرا هیچ فایلی به نام nonexistent
ندارد. اما به جای چاپ آن در کنسول، به دلیل کاراکتر error redirection، در فایل error.txt
ذخیره می شود. با این حال، اگر خطایی وجود نداشته باشد، فایل چیزی نخواهد داشت.
اگر باید به جای بازنویسی محتویات فایل موجود، خطا را به آن اضافه کنید، به جای 2>>
از 2>
استفاده کنید.
5. تغییر مسیر خروجی و خطا با &>
و &>>
به جای انتخاب تغییر مسیر خروجی استاندارد یا خطاهای استاندارد به یک فایل، &>
به شما امکان می دهد هر دو را به طور همزمان تغییر مسیر دهید. میتوانید &>
را بهعنوان خلاصهنویسی برای ترکیب کاراکترهای تغییر مسیر خروجی (>) و تغییر مسیر خطا (2>) در نظر بگیرید.
نحو استفاده از &>
به صورت زیر است:
command &> output.txt
خطا یا خروجی command
در فایل output.txt
نوشته می شود. در اینجا یک مثال است:
ls sample &> output.txt
در دستور بالا، اگر دایرکتوری sample
در دسترس نباشد یا در دسترس باشد اما مجوز خواندن نداشته باشید، یک خطای مناسب در فایل output.txt
نوشته می شود. اما اگر وجود داشته باشد و مجوز خواندن داشته باشید، محتوای آن در فایل output.txt
خروجی خواهد شد.
استفاده از &>>
به شما امکان می دهد خروجی را در صورت وجود و داشتن محتویات به فایل اضافه کنید.
چگونه می توان لوله کشی و تغییر مسیر را برای آزاد کردن قدرت خط فرمان ترکیب کرد
استفاده از لوله کشی و تغییر مسیر به صورت ترکیبی می تواند به شما امکان انجام عملیات پیچیده را بدون بلند کردن سنگین دهد. با یادگیری نحوه ترکیب این دو، می توانید دستورات پیچیده ای برای انجام اقدامات مختلف با تایپ کمتر ایجاد کنید.
دستور زیر را به عنوان مثال در نظر بگیرید:
ls | grep ".txt" > text_files.txt
دستور ls
محتویات دایرکتوری فعلی را فهرست می کند. خروجی به دستور grep
هدایت می شود تا فایل های متنی را فیلتر کند. در نهایت خروجی دستور grep
به فایل text_files.txt
هدایت می شود.
این مثال ساده و در عین حال قدرتمند نشان می دهد که وقتی صحبت از لوله کشی و تغییر مسیر می شود، تنها محدودیت ذهن شم است.
نتیجه
در این آموزش با اصول پایپینگ و تغییر مسیر در لینوکس آشنا شدید. ما اصول اولیه را همراه با مثال هایی از نحوه استفاده از این دو توضیح دادیم.
این دو ویژگی به صورت مجزا می توانند قدرتمند باشند، اما می توانید با ترکیب آنها در دستورات خود، همانطور که در بخش آخر نشان داده شده است، جلوتر بروید.
ارسال نظر