文件 文件描述符
输入文件->标准输入 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