首页 > 代码库 > 重定向

重定向

标准输入:STDIN,描述符:0,默认为键盘。

标准输出:STDOUT,描述符:1,默认为显示器。

标准错误输出:STDERR,描述符:2,默认为显示器。

输入重定向:<
输出重定向:>
错误输出重定向:2>
错误的像正确的一样输出:2>&1
错误的和正确的输出到同一个文件:&>
>:会覆盖原来文件里面的内容。
>>:保留原来文件里面的内容。称为追加输出。
2>>:错误追加

所谓的输入、输出重定向,就是改变原本输入、输出数据的来源。

当我们使用输出重定向修改配置文件时,可能由于马虎或者是其他的一些原因导致应该使用“>>”的,而使用了“>”,覆盖了原有文件的内容,这时可以通过如下方法设置一个开关,禁止覆盖已经存在的文件里面的数据。这个就是set

开启开关:set -C
关闭开关:set +C

示例:

[root@Server3 ~]# set -C
[root@Server3 ~]# echo frame > aa
-bash: aa: cannot overwrite existing file
[root@Server3 ~]# cat aa
redhat
[root@Server3 ~]# set +C
[root@Server3 ~]# echo frame > aa
[root@Server3 ~]# cat aa
frame
[root@Server3 ~]#

如果文件不存在,则可以重定向数据到不存在的文件里面:

[root@Server3 tmp]# ll
total 0
[root@Server3 tmp]# set -C
[root@Server3 tmp]# echo frame > aa
[root@Server3 tmp]# cat aa
frame
[root@Server3 tmp]# echo frame > aa
-bash: aa: cannot overwrite existing file
[root@Server3 tmp]#

如果使用了set -C,并且在不使用set +C的情况下,非要往文件里面重定向数据的话,可以在“>”后面跟上一个“|”,如下所示:

[root@Server3 tmp]# ll
total 4
-rw-r--r-- 1 root root 6 Jul  2 23:12 aa
[root@Server3 tmp]# set -C
[root@Server3 tmp]# cat aa
frame
[root@Server3 tmp]# echo "Test" > aa
-bash: aa: cannot overwrite existing file
[root@Server3 tmp]# echo "Test" >| aa
[root@Server3 tmp]# cat aa
Test
[root@Server3 tmp]#
<<:称为Here Document,此处文档,意思是在此处生成一个文档。<<后面跟的是文档结束符,通常使用的是EOF或者是END

示例:

[root@Server3 tmp]# cat > ifconfig-eth0 << EOF
DEVICE=eth0
HWADDR=00:0C:29:00:01:23
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.16.1.1
NETMASK=255.255.255.0
GATEWAY=172.16.1.1
USERCTL=no
IPV6INIT=yes
EOF
[root@Server3 tmp]# cat ifconfig-eth0 
DEVICE=eth0
HWADDR=00:0C:29:00:01:23
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.16.1.1
NETMASK=255.255.255.0
GATEWAY=172.16.1.1
USERCTL=no
IPV6INIT=yes
[root@Server3 tmp]# 

说明:这种方式常用于在脚本中生成一个文件。


如果既想输出到标准输出,又想保存到文件的话,则可以使用tee命令。

示例:

[root@Server3 tmp]# ifconfig bond0 | tee /tmp/aa
bond0     Link encap:Ethernet  HWaddr 00:0C:29:B5:49:97  
          inet addr:172.17.100.252  Bcast:172.17.100.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb5:4997/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:8533 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5832 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:923523 (901.8 KiB)  TX bytes:669092 (653.4 KiB)
[root@Server3 tmp]# cat /tmp/aa
bond0     Link encap:Ethernet  HWaddr 00:0C:29:B5:49:97  
          inet addr:172.17.100.252  Bcast:172.17.100.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb5:4997/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:8533 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5832 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:923523 (901.8 KiB)  TX bytes:669092 (653.4 KiB)
[root@Server3 tmp]#



本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1434036