Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199343
  • 博文数量: 87
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 840
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-18 21:12
文章分类

全部博文(87)

文章存档

2014年(86)

我的朋友

分类: LINUX

2014-06-23 16:51:38

1 标准输出 标准错误输出
標準輸出指的是『指令執行所回傳的正確的訊息』,
而標準錯誤輸出可理解為 指令執行失敗後,所回傳的錯誤訊息
例如:
系統預設有 /etc/crontab 但卻無 /etc/vbirdsay, 此時若下達『 cat /etc/crontab /etc/vbirdsay 』這個指令時,cat 會進行:
    標準輸出:讀取 /etc/crontab 後,將該檔案內容顯示到螢幕上;
    標準錯誤輸出:因為無法找到 /etc/vbirdsay,因此在螢幕上顯示錯誤訊息
資料流重導向可以將 standard output (簡稱 stdout) 與 standard error output (簡稱 stderr) 分別傳送到其他的檔案或裝置去,而分別傳送所用的特殊字元則如下所示:
    標準輸入  (stdin) :代碼為 0 ,使用 < 或 << ;
    標準輸出  (stdout):代碼為 1 ,使用 > 或 >> ;
    標準錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ;
[root@www ~]# ll / > ~/rootfile <==螢幕並無任何資訊
[root@www ~]# ll  ~/rootfile <==有個新檔被建立了!
   1 該檔案 (本例中是 ~/rootfile) 若不存在,系統會自動的將他建立起來,但是
   2 當這個檔案存在的時候,那麼系統就會先將這個檔案內容清空,然後再將資料寫入!
   3 也就是若以 > 輸出到一個已存在的檔案中,那個檔案就會被覆蓋掉囉!
該檔案 (本例中是 ~/rootfile) 若不存在,系統會自動的將他建立起來,但是
當這個檔案存在的時候,那麼系統就會先將這個檔案內容清空,然後再將資料寫入!
也就是若以 > 輸出到一個已存在的檔案中,那個檔案就會被覆蓋掉囉!
standard error output 的錯誤資料
透過 2> 及 2>> 囉!同樣是覆蓋 (2>) 與累加 (2>>) 的特性!我們在剛剛才談到 stdout 代碼是 1 而 stderr 代碼是 2 , 所以這個 2> 是很容易理解的,而如果僅存在 > 時,則代表預設的代碼 1 囉!也就是說:
    1> :以覆蓋的方法將『正確的資料』輸出到指定的檔案或裝置上;
    1>>:以累加的方法將『正確的資料』輸出到指定的檔案或裝置上;
    2> :以覆蓋的方法將『錯誤的資料』輸出到指定的檔案或裝置上;
    2>>:以累加的方法將『錯誤的資料』輸出到指定的檔案或裝置上
『 1>> 』以及『 2>> 』中間是沒有空格的;
將 stdout 與 stderr 分存到不同的檔案去
 find /home -name .bashrc > list_right 2> list_error
/dev/null 垃圾桶黑洞裝置與特殊寫法
find /home -name .bashrc 2> /dev/null -- 將錯誤的資料丟棄,螢幕上顯示正確的資料
將指令的資料全部寫入名為 list 的檔案中
[dmtsai@www ~]$ find /home -name .bashrc > list 2>&1     <==正確
[dmtsai@www ~]$ find /home -name .bashrc &> list  <==正確

standard input : < 與 <<
< 與 <<
將原本需要由鍵盤輸入的資料,改由檔案內容來取代範例六:利用 cat 指令來建立一個檔案的簡單流程
[root@www ~]# cat > catfile
testing
cat file test
<==這裡按下 [ctrl]+d 來離開
[root@www ~]# cat catfile
testing
cat file test
由於加入 > 在 cat 後,所以那個 catfile 會被主動的建立,而內容就是剛剛鍵盤上面輸入的那兩行資料了
可以用某個檔案的內容來取代鍵盤的敲擊
範例七:用 stdin 取代鍵盤的輸入以建立新檔案的簡單流程
[root@www ~]# cat > catfile < ~/.bashrc
[root@www ~]# ll catfile ~/.bashrc
-rw-r--r-- 1 root root 194 Sep 26 13:36 /root/.bashrc
-rw-r--r-- 1 root root 194 Feb  6 18:29 catfile
# 注意看,這兩個檔案的大小會一模一樣!幾乎像是使用 cp 來複製一般!
<< 代表的是結束的輸入字元
我要用 cat 直接將輸入的訊息輸出到 catfile 中, 且當由鍵盤輸入 eof 時,該次輸入就結束
[root@www ~]# cat > catfile << "eof"
> This is a test.
> OK now stop
> eof  <==輸入這關鍵字,立刻就結束而不需要輸入 [ctrl]+d
[root@www ~]# cat catfile
This is a test.
OK now stop     <==只有這兩行,不會存在關鍵字那一行!
    螢幕輸出的資訊很重要,而且我們需要將他存下來的時候;
    背景執行中的程式,不希望他干擾螢幕正常的輸出結果時;
    一些系統的例行命令 (例如寫在 /etc/crontab 中的檔案) 的執行結果,希望他可以存下來時;
    一些執行命令的可能已知錯誤訊息時,想以『 2> /dev/null 』將他丟掉時;
    錯誤訊息與正確訊息需要分別輸出時。
阅读(845) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~