天天看点

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

继续阅读