檔案 檔案描述符
輸入檔案->标準輸入 0
輸出檔案->标準輸出 1
錯誤輸出檔案->标準錯誤 2
輸出重定向符号:
>:覆寫輸出
>>:追加輸出
set -c:禁止對已經存在的檔案進行覆寫重定向
在禁止設定後強制覆寫輸出,使用>|
set +c:關閉上述功能
标準輸出
<code>覆寫模式标準輸出重定向</code>
<code>[root@liang-study basic]</code><code># ls /var > 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 >> 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> 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>> b.txt</code>
<code>[root@liang-study basic]</code><code># cat b.txt </code>
标準輸出和标準錯誤輸出同時重定向
<code>[root@liang-study basic]</code><code># ll /var12 &> b.txt </code>
<code>[root@liang-study basic]</code><code># ll /var &> 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 > a.txt</code>
<code>[root@qa-</code><code>test</code><code>-lb-103-101 ~]</code><code># /usr/local/nginx/sbin/nginx -v 2> 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 |& grep nginx |awk -F '/' '{print $2}'</code>
<code>10.2.2</code>
上述中在管道符“|”後增加&,表示将标準錯誤輸出轉化成标準輸出,再對輸出做awk處理即可切割或者過濾。
本文轉自 亮公子 51CTO部落格,原文連結:http://blog.51cto.com/iyull/1884189