11.2 重定向的含义-管道的使用-tee 命令
11.2.1 输出重定向
定义:将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上
重定向输出使用`>` `>>` 操作符号
语法: > 文件名
解释:表示将标准输出的内容,写到后面的文件中,如果此文件已经存在,将会覆盖原文件中的内容
语法:>> 文件名
解释:表示将标准输出的内容,追加到后面的文件中。若重定向的输出的文件不存在,则会新建该文件
例1:查看当前主机的CPU的类型保存到cpu.txt文件中(而不是直接显示到屏幕上)
>> 符号,在文件结尾追加内容
> 文件名,清空文件内容
11.2.2 输入重定向
例1:将命令中接收输入的途径由默认的键盘改为其他文件,而不是等待从键盘输入
例2:mysql 中导入数据
命令:mysql -uroot -p123456 < data.sql
解释:将data.sql 导入 mysql 数据库中。
11.2.3 EOF
EOF 本意是 End Of File, 表明到了文件末尾。`EOF`通常与 `<<` 结合使用,`<<EOF` 表示后续的输入作为子命令或子shell 的输入,知道遇到`EOF`,再次返回到主调shell,可将其理解为分解符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将`EOF`进行自定义,但是前后的`EOF`必须成对出现且不能和shell命令冲突。
例:在脚本中通过重定向输入来打印消息菜单
在使用的时候需要在``<<`` 右边跟一对终止符。终止符是可以自定义的(可以是eof,或者aaa,bbb,ccc)
11.2.4 错误重定向
将命令执行过程中出现的错误信息(选项或参数错误)保存到指定的文件,而不是直接显示到显示器
作用:错误信息保存到文件
操作符:
错误重定向符号:2 >;
标准输入:0 < 或者简写 <;
标准输出:1 > 或 >
2 值得是标准错误输出的文件描述符(在使用标准的输入和输出省略了1、0编号)
在实际应用中,错误重定向可以用来收集执行的错误信息,为排错提供依据;对于shell 脚本还可以将无关紧要的错误信息重定向到空文件 /dev/null中,以保持脚本输出的简洁
注:使用 2> 操作符时,会像使用 > 一样覆盖目标文件的内容,若追加而不覆盖文件的内容即可使用 2>> 操作符
11.2.5 null 黑洞和zero文件
1.把/dev/null 看作`黑洞`,所有写入它的内容都会永远丢失。而尝试从它那读取内容则什么也读取不到,然而/dev/null 对命令行和脚本都非常有用。
2./dev/zero 在类 UNIX 操作系统中,/dev/zero 是一个特殊的文件,当你读它的时候,会提供无线的空字符(NULL,ASCII NUL,0x00)。典型用法是用来产生一个特定大小的空白文件。
例1:使用dd命令产生一个50M的文件
命令:dd if=/dev/zero of=b.txt bs=1M count=50
参数:
if 代表输入文件。如果不指定if,默认就会从 stdin 中读取输入。
of 代表输出文件。如果不指定of,默认就会将 stdout 作为默认输出。
bs 代表字节为单位的块大小
count 代表被复制的块数。
例2:正确的内容写入一个文件,错误的写入一个文件
11.2.6 &>和>&符号
&表示等同于的意思
例1:把正确和错误的消息输入到相同的位置
1>&2 把标准输出重定向到标准错误
2>&1 把标准错误重定向到标准输出,如图:
例2:把正确和错误的消息输入到相同的位置
命令:ls /tmp/ xxxxx > 1.txt 2>&1
命令:ls /tmp/ xxxx 2> 2.txt 1>&2
解释:将错误输出(2)写入到2.txt中,然后将标准输出(1)重定向到错误输出(2)上
例3:实际场景:工作中shell脚本中的 >/dev/null 2>&1 是什么意思?
命令:cat /etc/passwd > /dev/null 2>&1
注:将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃
11.2.7 管道`|` 的使用
语法:command -a | command -b | command -c | ......
注意:
1.管道命令只处理前一个命令正确速出,不处理错误输出
2.管道右边的命令,必须能够接收标准输入的数据流命令才行
3.管道符可以把两条命令连起来,它可以链接多个命令使用
11.2.8 tee 命令(了解)
功能:读取标准输入的数据,并将其内容输出成文件。
语法:tee [-a][-help][--version][文件...]
参数:
-a,-append 内容追加到给定的文件而非覆盖
--help 在线帮助
tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件
案例:将输出内容既保存成文件,又在屏幕上显示一份
命令:df -h | tee disk.log