在linux中,一切皆文件。
其中,有三个文件最常用:标准输入(standard input,简称stdin)、标准输出(standard output,简称stdout)和标准错误(standard error,简称stderr)。一般情况下,标准输入链接到键盘,标准输出和标准错误则链接到屏幕。如果我们要链接到其它地方,就要进行重定向。这三个文件中,属于输出的是stdout和stderr。
一、对标准输出进行重定向
当我们执行命令时,通常有输出信息。一般情况下,这些输出,都显示在屏幕上,因为标准输出通常链接到屏幕。有的时候,我们想保存这些结果,就需要输出到文件,也就是重定向到文件。
重定向使用符号>或>>,后面跟文件名。
当使用>时,输出信息覆盖指定文件。
当使用>>时,输出信息追加到指定文件尾部。
例如:
ls -l >out.txt
会把结果输出到out.txt。如果这个文件存在,则覆盖它,否则创建它。
二、对标准错误进行重定向
只对标准输出进行重定向,错误信息还是会显示到屏幕上。如果要把错误信息输出到文件,就要对标准错误进行重定向。
要对标准错误进行重定向,先了解一个概念:文件描述符(file descriptor)。在shell中,标准输入、标准输出和标准错误的文件描述符为0,1,2。我们在重定向符号>和>>前没有写文件描述符时,就认为它是1,既标准输出。要重定向标准错误时,就不能省了,必须写上2。
做一个实验,
ls -l /bin/usr 2>err.txt
其中,目录/bin/usr不存在。这样命令执行的结果就会有错误信息。上面的命令就把这些信息输出到了文件err.txt中。如果不写这个2,错误信息还是显示在屏幕上。
与标准输出的重定向一样,用>会覆盖指定文件,用>>添加到尾部。如果不存在指定文件,则创建。
三、同时重定向标准输出和标准错误到一个文件
有两个 办法,一个是旧版的,一个是新版的。前者要麻烦一些,后者要简单一些。如果能用新版,就用新版的方法。
1 旧版方法
Is -l . /bin/usr > out.txt 2>&1
注意命令中的顺序,必须把标准输出的重定向写在前面。
注意这里执行的命令,要显示两个目录:当前目录和/bin/usr,但/bin/usr并不存在。这样才同时有标准输出和标准错误的信息。
2 新版方法
Is -l . /bin/usr &> out.txt
只需要写一个重定向符号。
四、分别重定向标准输出和标准错误到不同的文件
用前面的例子,把两个文件都写出来:
Is -l . /bin/usr > out.txt 2>err.txt
这里顺序没有关系,因为都明确地写出了文件名。
五、丢弃输出
如果我们不需要输出,可以把它们重定向到一个特殊文件/dev/null,这样就相当于丢弃了它们,可以认为/dev/null是垃圾桶。例如,下面的命令丢弃了错误输出:
ls -l . /bin/usr 2>/dev/null
网友评论