IO重定向
a. 输入输出的数据流分为三种:1标准输入,2标准输出,3标准错误输出
1、 输入的数据流: <– 标准输入(stdin),键盘
代码为0,使用<或<<
2、输出的数据流:–> 标准输出(stdout).显示器
代码为1,使用>或>>
3、 错误的输出流: –>标准错误输出(stderr),显示器
代码为2,使用2>或2>>
b. fd: file descriptor,文件描述符
i. 标准输入:0
ii. 标准输出:1
iii. 错误输出:2
c. IO重定向
i. 输出重定向:> 命令的输出结果由显示器转到某个文件中,也就是说所有结果都保存在重定向的文件中了
1. 特性:覆盖输出,将原来文件中的内容覆盖掉,
ii. 输出重定向:>>
1. 特性:追加输出,在原来的基础上增加
[root@localhost ~]#echo "hello" > test [root@localhost ~]#cat test hello [root@localhost ~]#echo "how are you" > test #原来的内容会丢失 [root@localhost ~]#cat test how are you [root@localhost ~]#echo "how old are you" >> test #追加到后面 [root@localhost ~]#cat test how are you how old are you vi. 错误输出流重定向:2>,2>> 特性和上面相同,不通用,命令的输出的错误结果信息由显示器转到某个文件中,也就是说所有结果都保存在重定向的文件中了
示例说明:如果命令执行成功,执行命令echo $?的结果为0,表示成功,如果结果非0,表示失败,如果andy用户已经存在了,再创建相同的用户名会报错,结果为非0,“>”重定向只能将正常的输出流重定向,这里重定向到/dev/null,但是执行的错的信息就不能成功重定向到/dev/null里面,要使用“2>”才可以将错误信息重定向。
[root@localhost ~]#id andy uid=496(andy) gid=491(andy) groups=491(andy) [root@localhost ~]#useradd andy useradd: user 'andy' already exists [root@localhost ~]#useradd andy > /dev/null #错误信息不能重定向 useradd: user 'andy' already exists [root@localhost ~]#echo $? 9 [root@localhost ~]#useradd andy 2> /dev/null #错误信息可以正常重定向 [root@localhost ~]#echo $? 9 [root@localhost ~]#useradd bob > /dev/null #执行命令成功的状态值为0 [root@localhost ~]#echo $? 0vii. 合并正常输出流和错误输出流:
1. &>, &>>,覆盖和追加,不管对错都可以执行,比下面的简洁,推荐
2. 合并追加
a. COMMAND > /path/to/somefile 2>&1
b. COMMAND >> /path/to/somefile 2>&1
示例:不管输出信息正确错误与否,都可以重定向,只关心执行状态结果
[root@localhost ~]#useradd andy &> /dev/null [root@localhost ~]#echo $? 9 [root@localhost ~]#useradd alex &> /dev/null [root@localhost ~]#echo $? 0另外一个示例,test文件存在,test2文件不存在,不管cat的结果是否正确,都重定向到log文件中,作为日志记录,只关心执行命令的状态值
[root@localhost ~]#cat test hello [root@localhost ~]#cat test > log 2>&1 [root@localhost ~]#echo $? 0[root@localhost ~]#cat log hello [root@localhost ~]#cat test2 > log 2>&1 [root@localhost ~]#echo $? 1 [root@localhost ~]#cat log cat: test2: No such file or directory
------下面的一样,重定向 [root@localhost ~]#cat test &> log [root@localhost ~]#cat log hello [root@localhost ~]#cat test2 &> log [root@localhost ~]#cat log cat: test2: No such file or directory -------追加 [root@localhost ~]#cat test &>> log [root@localhost ~]#cat test2 &>> log [root@localhost ~]#cat log hello cat: test2: No such file or directory