Linux学习笔记(八)——管道和I/O重定向

计算机的五大部件分别是运算器、控制器(这两部分合称CPU)、存储器(RAM)输入设备和输出设备。

而在CPU里有三种总线分别实现不同的功能。
  • 地址总线:内存寻址
  • 数据总线:传输数据
  • 控制总线:控制指令

这三种总线在机器内部这是复用的,因此就需要寄存器暂时储存数据和指令。

  • 寄存器:CPU暂时存储器

此外,就是I/O设备来实现数据的输入和输出了。

  • INPUT设备
  • OUTPUT设备


在系统设定中

  • 默认输入设备为标准输入,用STDIN表示,描述符为0
  • 默认输出设备为标准输出,用STDOUT表示,描述符为1
  • 此外还有标准错误输出,用STDERR表示,描述符为2

对于一台计算机来说,默认的情况下:

  • 标准输入:键盘
  • 标准输出和错误输出:显示器

I/O重定向

有时,默认的输入输出设备并不能满足我们的要求,这时,就要通过I/O重定向来改变默认的输入输出方式。

输出重定向

  • >:覆盖输出,原有内容会被覆盖
  • >>:追加输出,保留原有内容

由于覆盖输出会抹去文件中所有的原本内容,因此十分危险,安全起见,可以使用set命令来开关覆盖输出

  • set -C 禁止对已存在的文件使用覆盖输出重定向
  • set+C 取消禁止
  • 2>:重定向覆盖错误输出输出
  • 2>>:重定向追加错误输出
  • &>:重定向标准输出或错误输出至同一个文件

输入重定向

  • <:输入重定向
  • <<:此处文档(Here Document),一种特殊的输入重定向,在<<后会跟一个标示符,当输入读取到标示符时会自动停止。

例如:

cat << EOF
> > 1st line
> > 2nd line
> > 3rd line
> > 4th line EOF
> > EOF
> 1st line
> 2nd line
> 3rd line
> 4th line EOF

标示符可以是任何内容,通常会使用EOF(End of File)来作为标示符。在输入标示符时,前后不能有空格或者字符,如上的第4行中的EOF就被作为单纯的输入内容打印了出来。

管道

  • |:管道,从前一个命令读取结果作为后一个命令的输出
  • tee:从标准输入读取,写入到标准输出,并保存到文件。同时实现管道和标准输出,就像一个T型的管道。

例如:

echo "Hello" | /tmp/hello.txt
echo "Hello" | tee /tmp/hello.txt