7.Shell本章同步视频:https://edu.51cto.com/sd/e4874

7.5 数据流重导向

7.5.1 什么是数据流重导向

n  标准输入  (stdin) :代码为 0 ,使用 < 或 << ;

n  标准输出  (stdout):代码为 1 ,使用 > 或 >> ;

n  标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

设备

设备名

文件描述符

类型

键盘

/dev/stdin

0

标准输入

显示器

/dev/stdout

1

标准输出

显示器

/dev/stderr

2

标准错误输出

 

Linux-shell-数据流重导向_stdout

1.用法

u  1> :以覆盖的方法将『正确的数据』输出到指定的档案或装置上;

u  1>>:以累加的方法将『正确的数据』输出到指定的档案或装置上;

u  2> :以覆盖的方法将『错误的数据』输出到指定的档案或装置上;

u  2>>:以累加的方法将『错误的数据』输出到指定的档案或装置上;

2.stdout

       通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏)。

[root@localhost ~]# cat stdout        #有stdout文件,内容为stdout

stdout

[root@localhost ~]# echo "aaa"     #标准输出

aaa

[root@localhost ~]# echo "aaa">stdout    #以>重定向输出

[root@localhost ~]# cat stdout         #stdout文件内容被覆盖

aaa

[root@localhost ~]# echo "bbb">>stdout      #以>>重定向输出

[root@localhost ~]# cat stdout         #stdout文件内容被追加

aaa

bbb

(1)使用输出重定向向其他控制台发送消息

[root@localhost ~]# tty        #查看tty

/dev/pts/0

[root@localhost ~]# echo "aaa">/dev/pts/1     #发送信息

#以下是另一个终端显示的信息

[root@localhost Desktop]# tty

/dev/pts/1

[root@localhost Desktop]# aaa

(2)利用输出重定向清空文件

[root@localhost ~]# echo >passwd

(3)利用输出重定向创建新文件

[root@localhost ~]# cat passwd >passwd.bak

(4)禁止>覆盖内容

[root@localhost ~]# cat aaa

bbb

[root@localhost ~]# set -C     #设置禁止>覆盖

[root@localhost ~]# echo "aaa">aaa    #覆盖失败

bash: aaa: cannot overwrite existing file

[root@localhost ~]# echo "aaa">>aaa     #>>不受影响

[root@localhost ~]# cat aaa

bbb

aaa

#取消禁止>覆盖,输入如下命令:

[root@localhost ~]# set +C

#set -C只禁止>覆盖,不禁止vim等的修改。

#被禁止后,亦可强制利用 >| 覆盖,命令如下:

[root@localhost ~]# cat aaa

aaaaaaaa

[root@localhost ~]# echo "bbbbbbbb" >|aaa

[root@localhost ~]# cat aaa

bbbbbbbb

3.stderr

[root@localhost ~]# cat calf       #标准错误输出

cat: calf: No such file or directory

[root@localhost ~]# cat calf 2>stderr     #以>重定向错误输出

[root@localhost ~]# cat stderr          #查看stderr内容

cat: calf: No such file or directory

[root@localhost ~]# cat aaa        #标准错误输出

cat: aaa: No such file or directory

[root@localhost ~]# cat aaa 2>>stderr     #以>>重定向错误输出

[root@localhost ~]# cat stderr       #查看stderr内容

cat: calf: No such file or directory

cat: aaa: No such file or directory

4.stdin

      输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。

Linux-shell-数据流重导向_标准输出_02

[root@localhost ~]# cat stdout     #标准输入

aaa

bbb

[root@localhost ~]# cat <stdout    #以<重定向输入

aaa

bbb

[root@localhost ~]# cat <<"eof"      #以<<重定向输入

>aaaaa           #输入内容

>bbbbb          #输入内容

>eof                #输入结束标志

aaaaa              #输出

bbbbb              #输出

5.综合应用

(1)同时重定向stdout和stderr

[root@localhost tmp]# ls

aaa

[root@localhost tmp]# cat aaa bbb

aaa         #标准输出

cat: bbb: No such file or directory      #标准错误输出

[root@localhost tmp]# cat aaa bbb >stdout 2>stderr

[root@localhost tmp]# cat stdout

aaa

[root@localhost tmp]# cat stderr

cat: bbb: No such file or directory

(2)stdout和stderr重定向到同一个文件

[root@localhost tmp]# cat aaa bbb >stdout 2>&1

[root@localhost tmp]# cat stdout

aaa

cat: bbb: No such file or directory

#注:下面的命令也能实现,但是存在多次打开文件操作。

[root@localhost tmp]# cat aaa bbb >stdout 2>>stdout

[root@localhost tmp]# cat stdout

aaa

cat: bbb: No such file or directory

#注:分析下面的错误

[root@localhost tmp]# echo >stdout     #清空stdout

[root@localhost tmp]# cat aaa bbb >stdout 2>stdout

[root@localhost tmp]# cat stdout

cat: bbb: No such file or directory

#注:以下两组命令亦可达到效果

[root@localhost tmp]# echo >stdout

[root@localhost tmp]# cat aaa bbb &>stdout

#[root@localhost tmp]# cat aaa bbb >&stdout    亦可

[root@localhost tmp]# cat stdout

aaa

cat: bbb: No such file or directory

[root@localhost tmp]# echo >stdout

[root@localhost tmp]# cat aaa bbb &>>stdout

[root@localhost tmp]# cat stdout

                           #我也不知道这个空行哪里来的

aaa

cat: bbb: No such file or directory

本章同步视频:https://edu.51cto.com/sd/e4874