五、管道与重定向

1、重定向命令

1.1、重定向符号

符号 描述
> 输出重定向到一个文件或者设备,覆盖原来的文件
>! 输出重定向到一个文件或设备,强制覆盖原来的文件
>> 输出重定向到一个文件或设备,追加原来的文件
< 输入重定向到一个程序

1.2 标准错误重定向符号

符号 描述
2>> 将一个标准错误输出重定向到一个文件或者设备,追加到原来的文件
2>&1 将一个标准错误输出重定向到标准输出 ——1:就代表 标准输出
>& 将一个标准错误输出重定向到一个文件或设备,覆盖原有的文件
|& 将一个标准错误通过管道输送到另一个命令作为输入
2> 将一个标准错误输出重定向到一个文件或者设备,覆盖原文件内的内容

1.3 命令重定向实例

xxxxxxxxxx4 1set nu # 显示行号2set nonu # 取消显示行号3set list # 显示控制符4set nolist # 取消显示控制符bash

1、标准输出:代码为0;或者为stdin;使用的方式为<

2、标准输出:代码为1;或称为stdout;使用的方式为1>

3、错误输出:代码为2;或称为stderr;使用的方式为2>

(1)将ls -al 命令输出的内容重定向输入到lsit.txt,追加到原有的文件的末尾,如果没有list.txt文件则创建

  1. ls -al >> lsit.txt

(2)将ls -al 命令输出的内容重定向输入到指定的文件中,正确输出则重定向到 lsit.txt ,错误输出则重定向到lsit.err,【>是覆盖,通过原文件有内容,则会全部覆盖掉】

  1. ls -al /home /aaaaaa 1> lsit.txt 2>lsit.err

(3)将标准错误重定向输出到标准输出【就是把错误的删除重定向到正确的输出中,实现错误和正确重定向到一个文件】

  1. ls -al 1> lsit.txt 2> &1

(4)将 ls -al 的标准输出重定向到 list.txt ,错误输出则重定向到/dev/null【/dev/null可以说是黑洞装置,为空,即不保存】

  1. ls -al 1> lsit.txt 2> /dev/null

(5)输出重定向

  1. cat > /opt/text1 <<EOF # 将输入的这几段话给cat查看,看完了再输入重定向到/opt/text1
  2. >fdjljkslf
  3. >jslfjfks
  4. >EOF # EOF段落标记;结束输入

1.4 为什么要使用命令输出重定向

  • 当屏幕输出的信息很重要,而且我们需要将他保存下来的时候
  • 背景执行中的程序,不希望他干扰屏幕正常输出结果时
  • 一些系统的例行命令(例如写在/etc/crontab 中的文件) 的执行结果,希望他可以保存下来时
  • 一些执行命令,我们已经知道他可能的错误讯息,所以想以【2> /dev/null】将他丢弃时
  • 错误讯息和正确讯息需要分别输出时

2、管道命令

stdout:标准输出流

stderr:标准错误输出流

2.1 基本概念

  • 管道命令是一种通信机制,通常用于进程间的通信(也可以通过socker进行网络通信),它表现出来的形式将前面每一个进程输出(stdout)直接作为下一个进程的输入(stdin)
  • 管道命令使用 | 作为界定符号,管道命令与上面说的连续执行命令不一样
  • 管道命令仅处理正确的命令,对于错误输出会予以忽略
  1. 命令1 | 命令2 | 命令3
  2. 命令1的输出 | 作为命令2的输入 | 命令2的输出作为命令3的输
  3. tee 三通 :把输出保留副本 | tee a.txt
  4. xargs 转换:把输出和输入进行格式转换。 | xargs rm -rvf
  5. cut | cut -d: -f1
  6. # 切片 -d:--是以冒号进行切片 -f1:切出第一个

xargs 转换:把输出和输入进行格式转换。 | xargs rm -rvf

2.2命令执行顺序控制

顺序执行多条命令:简单的顺序指令可通过;来实现

  1. command1;command2;command3
  2. 例如:
  3. count hwt;count hhh;count www # 按顺序依次创建文件

有条件的执行多条命令:

  1. which command1 && command2 || command3

&&:如果前一条命令执行成功则执行下一条命令。如果command1执行成功(返回0),则执行command2

||:与&&命令完全相反,执行不成功时执行下一条命令

$?:存储上一次命令的返回结果

  1. 例:
  2. which cd >/dev/null && cd --help // 如果存在cd命令[并将输出的结果丢进null],执行cd --help命令
  3. echo $? # 成功返回1,失败返回0

管道命令 &&

tee命令
  • tee命令主要被用于来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件中。

  • tee的命令格式: ```bash 命令 | tee [参数] 文件名 例:将ping baidu.com的返回值输入到文件中 ping baidu.com | tee ping-daidu.log

-a #已追加的方式添加到文件中 -i #忽视ctrl+c 组合键发起的中断信号(SIGINT)。 ```