Shell指令在執行時,會自動打開三個标準檔案,即标準輸入檔案(stdin),一般對應終端的鍵盤;标準輸出檔案(stdout)和标準出錯輸出檔案(stderr),這兩個檔案對應終端的螢幕。但在實際應用中,這三個檔案常常需要按照新的格式進行定向,從其它檔案中導入内容或将内容導出到其它檔案中,此過程就是重定向;使内容按一定格式輸出,這就是管道。 1. 重定向 一個指令的執行可以用圖 5‑2表示。
01.jpg (8.18 KB, 下載下傳次數: 0)
下載下傳附件 儲存到相冊 設為封面
6 天前 上傳
執行指令時,這個指令會通過鍵盤讀入資料,經過處理後,再将資料輸出到螢幕上。資料流重定向就是指令執行後,從某檔案中讀入資料,經過處理後,再将資料輸出到另一檔案中。其執行過程如下圖示:
02.jpg (10.33 KB, 下載下傳次數: 0)
下載下傳附件 儲存到相冊 設為封面
6 天前 上傳
重定向可分為輸出重定向、錯誤重定向與輸入重定向。下面将舉例分析: (1)輸出重定向 通過重定向符“>”或“>>”将指令的标準輸出重新定向到指定檔案中。 一般形式:指令 > 檔案名 指令 >> 檔案名 “>”與“>>”都能将内容重新寫入到檔案中,但如果檔案中有内容,執行“>”完後新的内容将會覆寫掉原來的内容,而“>>”則是将新的輸出内容附加到原來内容的結尾。 實驗1: [[email protected] shell]# ls [[email protected] shell]# ps > test [[email protected] shell]# ls test [[email protected] shell]# cat test PID TTY TIME CMD 6459 pts/2 00:00:00 bash 6479 pts/2 00:00:00 bash 6774 pts/2 00:00:00 ps 實驗解析: 将ps指令的内容重定向到test檔案中,執行完指令後,終端上确實沒有輸出内容,而目前目錄下卻多了test檔案,再利用cat可以看到内容的确寫到裡面去了。 實驗2: [[email protected] shell]# ls -a >> test [[email protected] shell]# cat test PID TTY TIME CMD 6459 pts/2 00:00:00 bash 6479 pts/2 00:00:00 bash 6774 pts/2 00:00:00 ps . .. test 實驗解析: 用“>>”将目前目錄下的所有檔案名寫入到實驗1中建立的test檔案中,執行完指令後用cat指令檢視,新的内容的确是添加到檔案原有内容的尾部。 (2)錯誤重定向 通過重定向符“2>”或“2>>”将指令的标準錯誤輸出重新定向到指定檔案中。 一般形式:指令 2> 檔案名 指令 2>> 檔案名 實驗3: [[email protected] shell]# cat ./jingzhao cat: ./jingzhao: 沒有那個檔案或目錄 [[email protected] shell]# cat ./jingzhao > test cat: ./jingzhao: 沒有那個檔案或目錄 [[email protected] shell]# cat ./jingzhao 2> test [[email protected] shell]# ls test [[email protected] shell]# cat test cat: ./jingzhao: 沒有那個檔案或目錄 實驗解析: 由于目前目錄中不存在檔案jingzhao,用cat指令輸出其中内容時會在終端上列印出錯資訊。改用輸出重定向符号時錯誤資訊還是沒能重定向到test中,最後利用錯誤重定向符号将錯誤提示輸出到test檔案中。 從上面也可以知道,采用“>”或“>>”是不能将錯誤的資訊重定向的。 (3)輸入重定向 通過重定向符“<”将指令的标準輸入重新定位到指定檔案中。 一般形式:指令 < 檔案名 實驗: [[email protected] shell]# ls sh.sh [[email protected] shell]# cat sh.sh echo "your working directory is `pwd` " echo "the time is `date`" [[email protected] shell]# bash < sh.sh your working directory is /shell the time is 四 7月 29 15:16:23 CST 2010 實驗解析: Shell指令解析程式将從腳本程式sh.sh中讀取指令行,并加以執行。 2. 管道 Linux下可以采用管道操作符“|”來連接配接多個指令或程序,如下圖示:
02.jpg (8.5 KB, 下載下傳次數: 0)
下載下傳附件 儲存到相冊 設為封面
6 天前 上傳
在連接配接的管道線兩邊,每個指令執行時都是一個獨立的程序。前一個指令的輸出正是下一個指令的輸入。這些程序可以同時運作,并且随着資料流在它們之間的傳遞可以自動地進行協調,進而能夠完成較為複雜的任務。 一般形式:[指令1] | [指令2] | [指令3] 實驗:顯示/etc目錄下面内容 [[email protected] shell]# ls /etc/ 。。。。。。。 esd.conf pwdb.conf exports quotagrpadmins fb.modes quotatab fdprm racoon …… 因為/etc下面的檔案太多了,當利用ls /etc/來檢視時發現整個螢幕都被塞滿了檔案,非常不友善,可利用more來分頁顯示。 [[email protected] bin]# ls /etc |more a2ps.cfg a2ps-site.cfg acpi adjtime alchemist aliases aliases.db alsa …… --More-- 指令ls /etc顯示/etc目錄的内容,指令more是分頁顯示内容。 本文轉載于唯C教育,【Linux基礎】重定向與管道
http://www.weicedu.com/forum.php?mod=viewthread&tid=91&fromuid=4
(出處: http://www.weicedu.com/)