天天看點

linux基礎--I/O重定向

檔案                檔案描述符

輸入檔案->标準輸入            0

輸出檔案->标準輸出            1

錯誤輸出檔案->标準錯誤          2

輸出重定向符号:

    >:覆寫輸出

    >>:追加輸出

set -c:禁止對已經存在的檔案進行覆寫重定向

            在禁止設定後強制覆寫輸出,使用>|

set +c:關閉上述功能

标準輸出

<code>覆寫模式标準輸出重定向</code>

<code>[root@liang-study basic]</code><code># ls /var &gt; a.txt</code>

<code>[root@liang-study basic]</code><code># cat a.txt </code>

<code>account</code>

<code>cache</code>

<code>crash</code>

<code>cvs</code>

<code>db</code>

<code>追加模式标準輸出重定向</code>

<code>[root@liang-study basic]</code><code># ll /home &gt;&gt; a.txt</code>

<code>empty</code>

<code>total 16948</code>

<code>-rw-r--r--   1 root     root      5484681 Dec  8 12:24 4.1.0.</code><code>tar</code><code>.gz</code>

<code>drwxr-xr-x   2 root     root         4096 Dec 20 10:55 basic</code>

<code>drwx------   2 chenchao chenchao     4096 Dec 14 17:34 chenchao</code>

<code>drwxrwxr-x   8 root     root         4096 Dec  8 12:25 ipython-4.1.0</code>

<code>drwxr-xr-x.  2 root     root         4096 Dec  7 19:05 logs</code>

<code>drwx------.  2 root     root        16384 Dec  7 19:00 lost+found</code>

标準錯誤輸出

<code>覆寫模式标準錯誤輸出重定向</code>

<code>[root@liang-study basic]</code><code># ll /var12 2&gt; b.txt</code>

<code>[root@liang-study basic]</code><code># cat b.txt </code>

<code>ls</code><code>: cannot access </code><code>/var12</code><code>: No such </code><code>file</code> <code>or directory</code>

<code>追加模式标準錯誤輸出重定向</code>

<code>[root@liang-study basic]</code><code># ll /var12 2&gt;&gt; b.txt</code>

<code>[root@liang-study basic]</code><code># cat b.txt          </code>

标準輸出和标準錯誤輸出同時重定向

<code>[root@liang-study basic]</code><code># ll /var12 &amp;&gt; b.txt  </code>

<code>[root@liang-study basic]</code><code># ll /var &amp;&gt; b.txt  </code>

<code>total 76</code>

<code>drwxr-xr-x.  2 root root 4096 Dec 20 03:43 account</code>

<code>drwxr-xr-x. 11 root root 4096 Dec  7 19:04 cache</code>

<code>drwxr-xr-x.  2 root root 4096 Nov 18 23:19 crash</code>

<code>drwxr-xr-x.  2 root root 4096 Nov 22  2013 cvs</code>

<code>drwxr-xr-x.  3 root root 4096 Dec  7 19:04 db</code>

即輸出到螢幕又儲存到檔案中

<code>[root@liang-study basic]</code><code># echo "hello word" | tee c.txt</code>

<code>hello word</code>

<code>[root@liang-study basic]</code><code># cat c.txt </code>

特殊例子:擷取nginx版本号

<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># /usr/local/nginx/sbin/nginx -v </code>

<code>nginx version: DLEngine</code><code>/10</code><code>.2.2</code>

<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># /usr/local/nginx/sbin/nginx -v | grep nginx |awk -F '/' '{print $2}'</code>

上例可以看到,對nginx -v的輸出使用awk處理并沒有效果,繼續看實驗

<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># /usr/local/nginx/sbin/nginx -v &gt; a.txt</code>

<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># /usr/local/nginx/sbin/nginx -v 2&gt; a.txt</code>

<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># cat a.txt </code>

明白了吧,nginx -v不是标準輸出,而是标準錯誤輸出。标準錯誤輸出不可使用awk等做處理。

可通過下面辦法處理

<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># /usr/local/nginx/sbin/nginx -v |&amp; grep nginx |awk -F '/' '{print $2}'</code>

<code>10.2.2</code>

上述中在管道符“|”後增加&amp;,表示将标準錯誤輸出轉化成标準輸出,再對輸出做awk處理即可切割或者過濾。

本文轉自  亮公子  51CTO部落格,原文連結:http://blog.51cto.com/iyull/1884189

繼續閱讀