Can you summarize the following document?
        
  重定向一般透過在命令間插入特定的符號來實現。特別的,這些符號的語法如下所示:  上面這個命令執行command1然後將輸出的內容存入file1.注意任何file1內的已經存在的內容將被新內容替代。如果要將新內容新增在檔案末尾,請使用»操作符。  執行command1,使用file1作為用來替代鍵盤的輸入源。  同時替換輸入和輸出,執行command1,從檔案infile讀取內容,然後將輸出寫入到outfile中。

  多個程式可以一起執行,一個程式可以直接將另外一個程式的輸出作為其輸入,並且不需要藉助中間檔案:  執行command1,將其輸出作為command2的輸入。這種方式被稱為管道,因為"|"字元被稱為"管道"。這種方式的結果和使用2個重定向及一個臨時檔案的方式相等價: 但是使用管道的時候兩個命令是同時執行的,較為省時。  一個使用命令管道的很好例子是使用echo和另外一個命令達到在一個非互動式shell中達到一定的互動效果: 這個例子執行ftp客戶端,然後輸入使用者名稱,回車,然後再輸入密碼。

  源自Bourne shell的許多Unix shell,可以將一個數字(檔案描述符)放在重定向符號前,這樣可以影響用於重定向的資料流。Unix的標準輸入輸出流是:  例如:  執行command1,然後將標準錯誤輸出重定向到檔案file1  一些源自csh的shells,將&符號放在重定向符號後,達到同樣的效果。這樣做的原因是為了將標準輸出與檔名為'1'的檔案區分開來。例如對於'cat file 2>1'和'cat file 2>&1',前者會將錯誤輸出重定向至叫做'1'的檔案,後者則將其重定向至標準輸出。  另外一個很有用的功能是將一個標準檔案控制代碼重定向到另一個。最流行的一種用法是將標準錯誤輸出融合到標準輸出中去,這樣錯誤資訊可以和其他普通的輸出資訊一起處理。例如:  上面這個命令會找到所有名字為.profile的檔案。如果沒有重定向,它會輸出結果到標準輸出,錯誤(例如在遍歷過程中缺少訪問某些受保護目錄的許可權)到標準錯誤輸出。如果標準輸出被重定向到一個檔案,那麼錯誤資訊就會出現在控制檯上。通過使用重定向2>&1,輸出的結果和錯誤資訊都被寫入了檔案results.  可以將2>&1放置在">"前,但是這樣並不能達到我們想要的效果。因為當直譯器讀到2>&1, 它並不知道標準輸出已經被重定向到哪裡,所以標準錯誤輸出並沒有和標準輸出融合。  如果融合過的輸出通過管道作為另外一個程式的輸入,那麼這個融合2>&1必須在管道符號之前:  一個命令  的簡化版本 (不使用於bourne shell)  或者

  重定向和管道符可以聯合使用,這樣可以組合出更加複雜的命令, 例如:  上面這個命令將當前目錄的內容列出來,將其作為grep命令的輸入內容,grep將過濾掉沒有以".sh"結尾的內容,然後將內容輸出給sort命令作為輸入引數,sort將輸入內容按照字元的順序排序以後,將最終的輸入內容寫入shlist檔案。在Unix和Linux作業系統中,這個樣的組合命令非常的常見。

  命令tee可以將一個命令的輸出重定向到幾個目標:  上面這個例子將ls的輸出重新定向到標準輸出和檔案xyz。
在計算機領域,重定向是大多數命令列直譯器所具有的功能,包括各種可以將標準流重定向使用者規定地點的Unix shells。類Unix作業系統的程式可以透過dup2(2)系統呼叫完成重定向,或者透過缺少一些靈活性但是更高一級層次的freopen(3)和popen(3)來完成。