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

posted on 2024-05-27 15:55  与太阳肩并肩  阅读(20)  评论(0编辑  收藏  举报

导航