淺談幾種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
下一篇 2018-04-05

相關推薦

  • 第二周作業

    第二周

    Linux筆記 2018-05-20
  • N30-bash特性以及Linux文件管理常用命令匯總

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理類命令:cat,tac,head,tail,more,less 分屏查看命令:more,less more:more FILE特點,翻盤至文件尾部后自動退出 less FILE head:查看文件的前n行head [options] FILE-n 數字-數字 tail:查看…

    Linux筆記 2018-05-26
  • linux用戶與組的權限管理與正則表達式

    一、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 二、編輯/etc/group文件,添加組hadoop 三、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop 四、復制/etc/skel…

    2018-07-16
  • 進入各種模式操作 在centos虛擬機上實現內外網的連接

    ? 進入單用戶模式; 重啟后在下面界面按任意鍵 進入此界面后按“ a ” 在下面界面 輸入? 1 ? 進入單用戶模式? 1之前有空格     進入救援模式 1 重啟后將鼠標鍵入界面里,在第一個界面的進度條沒走完之前按一次ESC鍵即可進入(只能按一次ESC) 2 選擇上圖中的第三項光盤引導啟動,之后選擇下圖的第三項救援模式啟動。 &nbsp…

    2018-05-09
  • 第三周博客作業

    1、列出當前系統上所有已登錄的用戶名,注意:同一用戶登陸多次,則只顯示一次即可。
    2、取出最后登錄到當前系統的用戶的相關信息。
    3、取出當前系統上被用戶當作默認shell的最多的那個shell。
    4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。
    5、取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6、列出/etc目錄下所有以.conf結尾的文件的文件名,并將其名字轉換為大寫后保存至/tmp/etc.conf文件中。
    7、顯示/var目錄下一級子目錄或文件的總個數。
    8、取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9、將/etc/fstab和/etc/issue文件的內容合并為同一個內容后保存至/tmp/etc.test文件中。
    10、請總結描述用戶和組管理類命令的使用方法并完成以下練習:

    Linux筆記 2018-03-27
  • 學習筆記(5)

    學習筆記(5)

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