در لینوکس همه چیز به شکل فایل دیده می شود. حتی تمام قطعات مثل ماوس و کی بورد و به هریک آدرس یک فایل اختصاص پیدا می کنه. لینوکس به هر برنامه اجازه دسترسی به سه فایل مهم رو می ده: standard input, standard output and standard error و هر کدام از این فایلها شماره مخصوص خودشون رو دارند. به ترتیب:
# Standard Input - 0
# Standard Output - 1
# Standard Error - 2
حالا شما می توانید این سه جریان رو از هر دستور یا قطعه( که به صورت فایل دیده می شه) به سمت هر دستور یا فایل دیگری «هدایت» کنید، به این کار redirect کردن گفته می شه. علامت < برای هدایت خروجی است و علامت > برای هدایت ورودی است. شما حتی می توانید خطاهایی که یک دستور می دهد را هدایت کنید، برای اینکار جلوی دستور می نویسید:
2>
عدد دو نشاندهنده اینست که خروجی خطا را می خواهیم و علامت < برای هدایت کردن آن است که ترکیب این دو منجر به هدایت خروجی خطا به هر جا ما بخواهیم می شود.
مثال هدایت خروجی یک لیست به یک فایل:
$ ls -l myfile.txt > test.txt
مثلا هدایت خروجی خطا وقتی فایل پیدا نشود به یک فایل دیگر، هر دو دستور زیر را اجرا کنید و تفاوت را ببینید. در دستور دوم فایلی به نام تست تشکیل می شود محتویات آنرا ببینید:
ls -l myfile.txt > test.txt
ls -l myfile.txt 2> test.txt
حالا برویم سراغ دستور شما:
COMMANDNAME 2>&1|tee yourlog.log
سینتکس مورد نظر شما یعنی this: 2>&1 جریان شماره دو رو هدایت می کنه(Standard Error) و علاوه براون روی مسیر شماره یک(Standard Output) هم اون رو نمایش می ده یعنی روی ترمینال هم نمایش داده می شه. سینتکس "|" هم خروجی دستور ما رو به ورودی دستور tee می فرسته. که کار دستوری tee هم log کردن و ذخیره کردن ورودی اش درون یک فایل متنی است.
برای توضیحات بیشتر به زبان انگلیسی به این لینک مراجعه کنید:
http://linuxhelp.blogspot.com/2006/01/inputoutput-redirection-made-simple-in.html و همینطور این لینک:
https://lists.ubuntu.com/archives/ubuntu-users/2005-July/042328.html