تغییر مسیر خروجی استاندارد
تغییر مسیر ورودی/خروجی به ما اجازه می دهد تا جایی که خروجی استاندارد می رود را دوباره تعریف کنیم. برای تغییر مسیر خروجی استاندارد به فایل دیگری به جای صفحه نمایش، از عملگر تغییر مسیر “>” و به دنبال آن نام فایل استفاده می کنیم. چرا ما می خواهیم این کار را انجام دهیم؟ ذخیره خروجی یک فرمان در یک فایل اغلب مفید است. برای مثال، میتوانیم به پوسته بگوییم که خروجی را ارسال کند ls دستور به فایل ls-output.txt به جای صفحه نمایش:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
در اینجا، ما یک لیست طولانی از آن ایجاد کردیم / usr / bin دایرکتوری و نتایج را به فایل ارسال کرد
ls-output.txt. اجازه دهید خروجی تغییر مسیر فرمان را بررسی کنیم:
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 167878 2016-02-01 15:07 ls-output.txt
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 167878 2016-02-01 15:07 ls-output.txt
خوب؛ یک فایل متنی زیبا، بزرگ اگر به فایل با نگاه کنیم کمتر، خواهیم دید که فایل
ls-output.txt در واقع حاوی نتایج دستور ls ما است:
[me@linuxbox ~]$ کمتر ls-output.txt
[me@linuxbox ~]$ کمتر ls-output.txt
اکنون، بیایید تست تغییر مسیر خود را تکرار کنیم، اما این بار با پیچ و تاب. نام دایرکتوری را به نامی که وجود ندارد تغییر می دهیم:
[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt
ls: نمی تواند به /bin/usr دسترسی پیدا کند: چنین فایل یا دایرکتوری وجود ندارد
[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt
ls: نمی تواند به /bin/usr دسترسی پیدا کند: چنین فایل یا دایرکتوری وجود ندارد
یک پیام خطا دریافت کردیم. این منطقی است زیرا ما دایرکتوری ناموجود را مشخص کردیم /bin/usr، اما چرا پیام خطا به جای هدایت شدن به فایل روی صفحه نمایش داده می شود ls-output.txt؟ پاسخ این است که ls برنامه پیغام خطای خود را به خروجی استاندارد ارسال نمی کند. در عوض، مانند بسیاری از برنامههای یونیکس که به خوبی نوشته شدهاند، پیامهای خطای خود را به خطای استاندارد ارسال میکند. از آنجایی که ما فقط خروجی استاندارد و نه خطای استاندارد را تغییر مسیر دادیم، پیام خطا همچنان به صفحه نمایش ارسال می شد. خواهیم دید که چگونه
تغییر مسیر خروجی استاندارد
برای تغییر مسیر خطای استاندارد تنها در یک دقیقه، اما ابتدا، بیایید ببینیم چه اتفاقی برای فایل خروجی ما افتاده است:
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 0 2016-02-01 15:08 ls-output.txt
[me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 0 2016-02-01 15:08 ls-output.txt
طول فایل اکنون صفر است! این به این دلیل است که وقتی خروجی را با عملگر تغییر مسیر ">" هدایت می کنیم، فایل مقصد همیشه از ابتدا بازنویسی می شود. از آنجایی که ما ls دستور هیچ نتیجه ای ایجاد نکرد و فقط یک پیغام خطا داشت، عملیات تغییر مسیر شروع به بازنویسی فایل کرد و سپس به دلیل خطا متوقف شد و در نتیجه کوتاه شد. در واقع، اگر زمانی نیاز به کوتاه کردن یک فایل (یا ایجاد یک فایل جدید و خالی) داشته باشیم، میتوانیم از ترفندی مانند این استفاده کنیم:
[me@linuxbox ~]$ > ls-output.txt
[me@linuxbox ~]$ > ls-output.txt
صرفاً استفاده از عملگر تغییر مسیر بدون هیچ دستوری قبل از آن، یک فایل موجود را کوتاه می کند یا یک فایل جدید و خالی ایجاد می کند.
بنابراین، چگونه می توانیم به جای بازنویسی فایل از ابتدا، خروجی هدایت شده را به یک فایل اضافه کنیم؟ برای آن، ما از عملگر تغییر مسیر ">>" استفاده می کنیم، مانند:
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt
استفاده از عملگر ">>" باعث می شود که خروجی به فایل اضافه شود. اگر فایل از قبل وجود نداشته باشد، درست مثل اینکه از عملگر ">" استفاده شده است ایجاد می شود. بیایید آن را آزمایش کنیم:
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 503634 2016-02-01 15:45 ls-output.txt
[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l ls-output.txt
-rw-rw-r-- 1 me me 503634 2016-02-01 15:45 ls-output.txt
ما این دستور را سه بار تکرار کردیم و در نتیجه یک فایل خروجی سه برابر بزرگتر شد.