菜鸟笔记
提升您的技术认知

重定向

重定向简介

计算机最基础的功能是可以提供输入输出操作。对于Linux系统来说,通常以键盘为默认输入设备,又称标准输入设备;以显示器为默认的输出设备,又称标准输出设备。所谓重定向,就是将原本应该从标准输入设备(键盘)输入的数据,改由其他文件或设备输入,或将原本应该输出到标准输出设备(显示器)的内容,改由输出到其他文件或设备上。

文件标识符是重定向中很重要的一个概念,Linux使用0到9的整数指明了与特定进程相关的数据流,系统在启动一个进程的同时会为该进程打开三个文件:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr),分别用文件标识符0、1、2来标识。如果要为进程打开其他的输入输出,则需要从整数3开始标识。默认情况下,标准输入为键盘,标准输出和错误输出为显示器。

对于一条命令的执行过程如下:

I/O重定向符号和用法

简单的说,I/O重定向可以将任何文件、命令、脚本、程序的输出重定向到另外一个文件、命令、程序或脚本。

常见的重定向符号和功能如下图:
输出重定向:

输入重定向:

绑定重定向:

实例:
显示当前目录文件test test2(test2实际不存在在)

正确输出与错误输出都显示在屏幕了,现在需要把正确输出写入note.txt
(1> 可以省略,不写,默认输出至标准输出)

把错误输出,不输出到屏幕,输出到err.txt

继续追加把输出写入note.txt err.txt “>>” 追加操作符

将错误输出信息关闭

注:&[n] 代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符
注:/dev/null 这个设备,是linux 中黑洞设备

关闭所有输出:

关闭1,2文件描述符

将1,2输出转发给/dev/null设备

将错误输出2绑定给正确输出1,然后将正确输出发送给/dev/null设备(&代表标准输出,错误输出将所有标准输出与错误输出 输入到/dev/null)

使用标准输入,在a.txt文件中写入"hello world"
注:在shell编程中,“EOF"通常与”<<“结合使用,”<<EOF"表示后续的输入作为子命令或子shell的输入,直到遇到"EOF"

管道符“|”

管道表现为输入输出重定向的一种方法,可以将一个命令的输出内容当做下一个命令的输入内容,可以通过多个简单命令的共同协作来完成较为复杂的工作。