【Linux】データストリーム再ガイド(後編)

4862 ワード

1)/dev/nullゴミ箱ブラックホール装置と特殊な書き方
想像してみてください.もし私がエラー情報が発生することを知っていたら、エラー情報を表示したり保存したりしないで無視しますか?このときブラックホール装置/dev/nullが重要です!この/dev/nullはこの装置を導く情報を食べることができますよ!上記の例を修正します.
   :    ,        ,          
[dmtsai@www ~]$ find /home -name .bashrc 2> /dev/null
/home/dmtsai/.bashrc  <==   stdout        , stderr     

もう一度想像してみてください.もし私が正しいデータと間違ったデータを同じファイルに書き込んだら?このときは特殊な書き方をしなければなりません!同様に、次の例で説明します.
   :             list     
[dmtsai@www ~]$ find /home -name .bashrc > list 2> list  <==  
[dmtsai@www ~]$ find /home -name .bashrc > list 2>&1     <==  
[dmtsai@www ~]$ find /home -name .bashrc &> list         <==  

上記の表の最初の行が間違っているのは、2つのデータが同時に1つのファイルに書き込まれ、特殊な文法が使用されていないため、2つのデータが交差してそのファイルに書き込まれ、順序が乱れている可能性があるからです.だから最終的にリストファイルは生成されますが、中のデータの配列は元の画面の出力ソートではなく、変になります.同じファイルに書き込む特殊な構文は、上記の表のように2>&1でも&>! 
2)standard input:<と<<
stderrとstdoutを知った後、その<また何ですか?ほほほ!最も簡単な言い方で言えば、「キーボードで入力する必要があったデータを、ファイルの内容に置き換える」という意味です.まず次のcatコマンド操作で『キーボード入力』とは何かを知りましょう.
cat               
[root@www ~]# cat > catfile
testing
cat file test
<==     [ctrl]+d    

[root@www ~]# cat catfile
testing
cat file test

加入>cat後のため、そのcatfileはアクティブに作成され、内容はキーボードに入力した2行のデータです.うん!キーボードの入力の代わりに純粋なテキストファイルを使うことができますか?つまり、キーボードのノックの代わりにあるファイルの内容を使うことができますか?いいですよ.次のようになります.
   :  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

これはとても役に立ちます!特にmailのようなコマンドの使用に使用されます.<を理解してから、もう一つは恐ろしい<<この二つの小さい記号が続いています.彼は『终わりの入力文字』の意味を表しています!たとえば、「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     <==     ,          !

見えますか?<<右側の制御文字を使用して、[crtl]+dを入力することなく、入力を終了できます.これはプログラムを書くのに役立ちますよ.では、なぜコマンド出力を再ガイドするのでしょうか.話しましょう.
  • 画面から出力される情報は重要で、私たちが彼を保存する必要があるとき.
  • バックグラウンドで実行中のプログラムは、画面の正常な出力結果を干渉したくない場合.
  • いくつかのシステムのルーチンコマンド(例えば/etc/crontabに書かれたファイル)の実行結果は、彼が保存できることを望んでいる場合.
  • いくつかの実行コマンドの既知のエラー情報がある場合、『2>/dev/null』で彼をなくしたい場合.
  • エラー情報と正しい情報を別々に出力する必要がある場合.

  • もちろん多くの機能がありますが、最も簡単なのはよく聞くことです.「なぜ私のrootはシステムcrontabからエラーメッセージを受け取るのか」というのはよくあるエラーですが、もし私たちがこのエラーメッセージが無視できることを知っていたら、うん!『2>errorfile』という機能が重要でしょう!分かりましたか.
    参考資料:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php#redirect