数据流重定向
标准输入&标准输出&标准错误输出
执行命令后显示的信息将正确和错误信息分别放入不同文件 /dev/null垃圾桶黑洞设备将正确和错误的信息写入一个文件
自定义错误信息 标准输入
<<< 为什么要使用数据流重定向 数据流重定向
将某个命令执行后应该在屏幕上显示的数据,传输到其他地方,例如:文件或者设备–打印机
标准输入&标准输出&标准错误输出将正确和错误的输出分别传输到不同的文件和设备需要用到的特殊字符:
标准输入stdin:代码0,使用<或<<
标准输出stdout:代码1,使用>或>>。仅存在>时,代表默认代码1
标准错误输出stderr:代码2,使用2>或2>>
>> 是追加内容
> 是覆盖原有内容
执行命令后显示的信息执行一个命令后会有2种信息在屏幕显示:
标准输出STDOUT,显示命令执行所返回的正确信息
标准错误输出STDEER,显示命令执行失败所返回的错误信息
[hadoop@node1 ~]$ find /home -name .bashrc#STDOUT:正确信息,返回hadoop用户根目录下的.bashrc文件/home/hadoop/.bashrc#STDEER:错误信息hadoop用户没有权限访问test用户根目录下的.bashrc文件find: ‘/home/test’: Permission denied[hadoop@node1 ~]$
将正确和错误信息分别放入不同文件#重定向>的文件不存在,系统会在当前目录自动创建[hadoop@node1 ~]$ find /home -name .bashrc >> right 2>> error#正常和错误信息都放入了指定的文件中,屏幕不返回任何信息[hadoop@node1 ~]$ lltotal 8drwxrwxrwx 2 root root 6 Apr 11 2021 bin-rw-rw-r-- 1 hadoop hadoop 42 Feb 16 21:28 errordrwxr-xr-x 14 hadoop hadoop 207 Mar 26 2020 IdeaProjectsdrwxr-xr-x 2 root root 6 Apr 11 2021 jars-rw-rw-r-- 1 hadoop hadoop 21 Feb 16 21:28 right[hadoop@node1 ~]$ cat error find: ‘/home/test’: Permission denied[hadoop@node1 ~]$ cat right /home/hadoop/.bashrc
/dev/null垃圾桶黑洞设备在知道会有错误信息的情况下,怎么故意不储存或显示错误信息?
/dev/null可以吃掉任何导向这个设备的信息
#丢弃错误的信息,屏幕上显示正确的信息[hadoop@node1 ~]$ find /home -name .bashrc 2>> /dev/null/home/hadoop/.bashrc
将正确和错误的信息写入一个文件#错误,正确和错误信息交叉写入文件,会造成次序错乱,会生成文件,但是里面数据排序不对,并非原本在屏幕上打印的输出顺序[hadoop@node1 ~]$ find /home -name .bashrc > right 2> right#正确[hadoop@node1 ~]$ find /home -name .bashrc > right 2>&1#正确[hadoop@node1 ~]$ find /home -name .bashrc &> right[hadoop@node1 ~]$ cat right /home/hadoop/.bashrcfind: ‘/home/test’: Permission denied
自定义错误信息#让"error message"作为标准错误的格式输出[hadoop@node1 ~]$ echo "error message" 1>&2error message[hadoop@node1 ~]$ echo "error message" 2> /dev/null 1>&2#屏幕上没有输出"error message",说明"error message"已经作为标准错误输出放入了/dev/null
标准输入 <将原本需要键盘输入的数据,改由文件内容来替换
[hadoop@node1 ~]$ cat error find: ‘/home/test’: Permission denied#将error的内容覆盖的方式写入catfile[hadoop@node1 ~]$ cat > catfile < error [hadoop@node1 ~]$ cat error find: ‘/home/test’: Permission denied[hadoop@node1 ~]$ cat catfile find: ‘/home/test’: Permission denied#将error的内容追加的方式写入catfile[hadoop@node1 ~]$ cat >> catfile < error [hadoop@node1 ~]$ cat catfile find: ‘/home/test’: Permission deniedfind: ‘/home/test’: Permission denied
搭配mail命令非常好用
<<<<代表结束的输入字符,写程序的时候很好用
#不用使用ctrl+d也能结束cat的输入[hadoop@node1 ~]$ cat >> catfile << "end" > 1> 2> end[hadoop@node1 ~]$ cat catfile find: ‘/home/test’: Permission deniedfind: ‘/home/test’: Permission denied12[hadoop@node1 ~]$
为什么要使用数据流重定向屏幕输出的信息很重要,要存下来后台执行中的程序,不希望他干扰屏幕的正常输出一些系统的计划任务命令(比如:写在/etc/crontab中的文件)的执行结果,希望存下来已知错误信息,想要丢掉 2> /dev/null
root收到系统crontab传来的错误信息,这是常见的错误,这个错误信息可以忽略 错误信息和正确信息分别输出时