淺談幾種IO重定向變形用法

淺談幾種IO重定向變形用法

首先,我們來認識一下linux系統中的幾種標準輸入和輸出

什么是標準輸入和輸出呢?

Linux給程序提供了三種I/O設備,即:

標準輸入(STDIN)? 0??????? ??? 默認接受來自鍵盤的輸入

標準輸出(STDOUT) 1????? 默認輸出到終端窗口

標準錯誤(STDERR) 2?????? 默認輸出到終端窗口

 

同時linux中使用“>”和“>>”將標準輸出和標準錯誤重新定向到文件中:

“>”后跟重定向文件,文件內容會被覆蓋

>?????? 把標準輸出重定向到文件

2>??? 把標準錯誤重定向到文件

&>??? 把標準輸出和錯誤都定向到文件

1>&2??????? 把標準輸出定向到標準錯誤(簡單來講,對的變成錯的)

2>&1??????? 把標準錯誤定向到標準標準輸出(錯的變成對的)

 

“>>”后跟重定向文件,是在原有內容基礎上,追加內容

>>??? 追加標準輸出重定向到文件

2>>? 追加標準錯誤重定向到文件

&>> 追加標準輸出和錯誤都定向到文件

 

那么下面我們來討論下幾種重定向的變形用法:

首先我們先建file1-6的6個空文件

創建空文件

這里我們看到:

ll /data/f1 顯示標準輸出(f1文件詳細信息);

ll /erorr顯示標準錯誤(提示無此目錄);

接下來我們來進行幾個小實驗:

正確與錯誤

實驗1.ll /data/f1 /erorr > /data/file1 2>&1

file1

結果:屏幕無顯示,標準輸出和標準錯誤輸入到file1文件中

實驗2.ll /data/f1 /erorr 2>&1 > /data/file2

file2

結果:屏幕顯示標準錯誤,標準輸出輸入到file2文件中

實驗3.ll /data/f1 /erorr 2> /data/file3 1>&2

file3

結果:屏幕無顯示,標準輸出和標準錯誤輸入到file3文件中

實驗4.ll /data/f1 /erorr 1>&2 > /data/file4

file4

結果:屏幕顯示標準錯誤,標準輸出輸入到file4文件中

實驗5.ll /data/f1 /erorr > /data/file5

file5

結果:屏幕顯示標準錯誤,標準輸出輸入到file5文件中

實驗6.ll /data/f1 /erorr > /data/file6 1>&2

file6

結果:屏幕顯示標準輸出和標準錯誤,file6文件為空

觀察6個小實驗我們發現:

實驗1,3得出的結果完全相同,屏幕無顯示,標準輸出和標準錯誤輸入到file文件中。得出此結果也有兩種

執行順序的可能性:

可能性1實驗1可看做,標準輸出先重定向到file文件中,標準錯誤然后重定向為標準輸出再次重定向

file文件中;實驗3可看做,標準錯誤先重定向到file文件中,標準輸出然后重定向為標準錯誤再次重定

向到file文件中,所以file文件中既有標準輸入又有標準輸出。

可能性2實驗1可看做,標準輸出和錯誤都經過2>&1的重定向后,全變為標準輸出,再輸入進file1件中;

實驗3可看做,標準輸出和錯誤都經過1>&2的重定向后,全變為標準錯誤,再輸入file3文件中。

于是我們有了實驗6,ll /data/f1 /erorr > /data/file6 1>&2,得出結果屏幕顯示標準輸出和標準錯誤,file6

文件為空,由此可認為實驗6執行了可能性2的執行過程。

 

結論1:當有1>&2或2>&1處于重定向組合命令結尾時,輸出結果全部先執行1>&2或2>&1,再執行前面的重定向。

實驗2,4,5得出的結果完全相同,即屏幕顯示標準錯誤,標準輸出輸入到file5文件中

三條命令分別為:

ll /data/f1 /erorr 2>&1 > /data/file2

ll /data/f1 /erorr 1>&2 > /data/file4

ll /data/f1 /erorr > /data/file5

我們是否可以這樣認為:

結論2:當2>&1或1>&2處在重定向組合命令中間位置時,2>&1或1>&2是不起作用的,可以忽略掉(此結論待定)

 

現在再來看這個問題

下列哪個標準輸出結果與其他選項不同:(?? )

A.cmd >log 2>&1

B.cmd 2>&1 >log

C.cmd &> log

D,cmd 2>log 1>&2

小伙伴們,現在用以上結論去做這道題,是不是很easy了呢

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95033

(4)
wangxczwangxcz
上一篇 2018-04-05 19:37
下一篇 2018-04-05 23:37

相關推薦

  • 作業-1

    Linux系統基礎-計算機組成.Linux簡介

    2018-06-19
  • 基于Memcached的session server

    session server:將Tomcat的session信息保存在Memcached中,實現session server 前提: 兩個Tomcat節點,兩個Memcached節點,一個nginx節點;Tomcat需要使用到Memcached-session-manager這個Java類,即上面所說的調用了Memcached提供的API的模塊,以達到Mem…

    Linux筆記 2018-03-31
  • grep、vim及用戶和組練習

    grep
    chown
    chmod
    vim

    2018-07-23
  • VIM編輯器用法大全

    文本編輯工具 語法:vim 參數 文件 文本編輯種類: 行編輯器:sed 全屏編輯器:nano,vi,vim – Vi Improved vim編輯器三大模式 編輯模式, 輸入模式: 末行模式: 內置的命令行接口; 模式轉換: 編輯模式 — > 輸入模式 : i : 在光標所在處輸入 a : 在光標所在處的后方輸入 o : 在光…

    2018-04-08
  • 主機經過三路由通信

    網絡規劃 主機 A IP/# 172.16.0.1/16 gatway 172.16.0.2 網段 vm10 172.16.0.0 eth0 IP/# 172.16.0.2/16 路由 R1 eth1 IP/# 10.0.0.1/8 網段 vm11 10.0.0.0 eth0 IP/# 10.0.0.2/8 路由 R2 eth1 IP/# 172.31.0.…

    Linux筆記 2018-05-04
欧美性久久久久