大綱:
一、數據重定向定義
二、數據重定向分類
三、數據重定向作用
四、示例
一、數據重定向:命令的運行的結果默認輸出在監視器上,重定向就是把這個結果輸出到其它地方或其它文件。
二、數據重定向分類:
1.標準輸出: (standard output,簡稱stdout,代碼為 1 ,使用 > 或 >>):命令執行成功輸出的正確提示信息。
2.標準錯誤輸出 (standarp error output,簡稱stderr,代碼為 2 ,使用 2> 或 2>> ):命令執行失敗輸出的錯誤提示信息。
3.標準輸入(standard input,簡稱stdin,代碼為 0 ,使用 < 或 << ):鍵盤鍵入值。
三、作用:
1.保存屏幕輸出信息。
2.后臺運行的程序,不希望它顯示(例如:任務計劃中監控程序每個時間段采集數據命令,可以直接重定向為/dev/null)。
3.正確信息與錯誤信息分別輸出。
四、示例:
1.標準輸出: (standard output,簡稱stdout,代碼為 1 ,使用 > 或 >>):命令執行成功輸出的正確提示信息。
例1:查看/etc/inittab內容并重定向輸出至/tmp/inittab.test.
[root@localhost ~]# cat /etc/inittab > /tmp/inittab.test |
通過ls命令查看,發現/tmp目錄下創建了inittab.test文件,且內容與/etc/inittab完全一致;由此可知,重定向輸出指定的文件如果不存在,則創建此文件。
[root@localhost ~]# ll /tmp/ | grep init -rw-r--r--. 1 root root 884 Jun 19 23:52 inittab.test |
例2:查看/etc/issue文件內容并把結果重定向至已存在的/tmp/inittab.test,你再次查看inittab.test,會發現文件內容已改變;由此可知:重定向輸出指定的位置如果已存在,則覆蓋。
[root@localhost ~]# cat /etc/issue > /tmp/inittab.test [root@localhost ~]# cat /tmp/inittab.test CentOS release 6.5 (Final) Kernel \r on an \m |
例3:內容追加;查看/etc/inittab并把結果重定向追加至/tmp/inittab.test中,另外如果目標位置文件不存在,則創建。
[root@localhost ~]# cat /etc/issue > /tmp/inittab.test [root@localhost ~]# cat /tmp/inittab.test CentOS release 6.5 (Final) Kernel \r on an \m . . . # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault: |
2.標準錯誤輸出 (standarp error output,簡稱stderr,代碼為 2 ,使用 2> 或 2>> ):命令執行失敗輸出的錯誤提示信息。
例4:據例3可知,/tmp/inittab.test文件里面是有內容的,如下圖,我們再次把/etc/inittab重定向輸出/tmp/inittab.test,當我們不小心把命令敲錯了,把cat敲成了catt;cat一下,你會發現inittab.test里面沒有任何內容了;由此可知,如果輸出指定的文件已存在,
即使命令執行錯誤,也會清空目標文件內容。
[root@localhost ~]# catt /etc/inittab > /tmp/inittab.test -bash: catt: command not found [root@localhost ~]# cat /tmp/inittab.test [root@localhost ~]#
[root@localhost tmp]# sh hardcheck.sh &> out_file stdout、stderr合并輸出至out_file |
例5:合并重定向;如下兩例,&表示合并的意思。
[root@localhost tmp]# sh hardcheck.sh > out_file 2> &1 stdout輸出至out_file,std_err輸出至stdout
[root@localhost tmp]# sh hardcheck.sh > /tmp/out_right 2>/tmp/out_err [root@localhost tmp]# cat /tmp/out_right model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz MemTotal: 1012352 kB [root@localhost tmp]# cat out_err hardcheck.sh: line 7: cd: /abd: No such file or directory [root@localhost tmp]# |
例6:分別重定向:執行腳本,標準輸出重定向至/tmp/out_right;標準錯誤輸出重定向至/tmp/out_err;執行完成后,你會發現stdout、stderr已分別保存至/tmp/out_right、/tmp/out_err文件。
黑洞/dev/null,黑洞,故名思義,可以吞噬其范圍內的任何東西;如果我們把輸出指向/dev/null,自然而然,輸出會被吞噬。
例7:把std指向out_right,stderr指向/dev/null;就會發現stderr會部被丟棄了。
[root@localhost tmp]# sh hardcheck.sh > out_right 2> /dev/null [root@localhost tmp]# cat out_right model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz model name : Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz MemTotal: 1012352 kB [root@localhost tmp]# |
3.標準輸入(standard input,簡稱stdin,代碼為 0 ,使用 < 或 << ):鍵盤鍵入值。
例8:把鍵盤輸入值保存到/tmp/in_file。
[root@localhost ~]# cat > /tmp/in_file ==>in_file存在則覆蓋,不存在則新建 this is test file. ==>鍵盤輸入值保存值in_file hello.world! ==>輸出完成后,可以通過快捷鍵Ctrl+d中止輸入信號。 [root@localhost ~]# cat /tmp/in_file ==>查看保存后信息 this is test file. hello.world! |
例9:<<表示結束輸入字符,在stdin時,輸入緊跟<<的字符表示結束輸入的意思。
[root@localhost ~]# cat > in_file <<end ==><<后代表結束輸入字符 > hao are you! > Welcome! > end ==>輸入end回車離開 [root@localhost ~]# cat in_file ==>查看in_file,只有輸入的前兩行 hao are you! Welcome! |
原創文章,作者:老鼠上了貓,如若轉載,請注明出處:http://www.www58058.com/5593
修改了部分樣式看起來更美觀,添加了標簽可以增加seo搜索命中
@stanley:很贊,效果完全不一樣了,非常感謝!
@stanley:審核之后不能得新編輯了嗎,我想把例5、例6調整下?