前言
I/ O 重定向容许咱们将命令的输出和输入重定向到文件中,以及将多个命令连贯到一起成为管道。本文就来介绍无关重定向的常识。
规范输出、输入、谬误
输入包含两种类型:
- 程序的后果。被称为规范输入或者
stdout
。 - 状态以及错误信息。被称为规范谬误或者
stderr
。
除此之外,一些程序从规范输出 stdin
中获取输出。默认状况下,规范输出与键盘相连接。
默认状况下,stdout
和stderr
都被链接到屏幕上,而不是保留到文件中。重定向容许咱们扭转输入的去向和输出的起源。
重定向规范输入
为了重定向到其余文件而不是屏幕上,咱们应用 >
重定向操作符,前面追随文件的名称。
举例来说,咱们能够应用重定向操作符来通知 shell
,发送ls
命令的输入到 ls-output.txt
文件中,而不是屏幕上。
ls -l /usr/bin > ls-output.txt
咱们能够看到,ls
命令的输入没有发送到屏幕上,而是发送 ls-output.txt
到文件中。
须要留神的是,应用 >
重定向操作符会笼罩指标文件。如果要追加内容,咱们能够应用 >>
重定向操作符。
重定向规范谬误
为了重定向 stderr
,咱们必须援用其文件描述符。shell
将stdout
、stdin
和 stderr
别离作为文件描述符 0、1 和 2 的外部援用。咱们能够用这个符号重定向stderr
。
ls -l /bin/usr 2> ls-error.txt
重定向到同一文件
重定向规范输入和规范谬误到同一文件中,共有两种形式能够实现。首先让咱们应用传统办法,它实用于老版本的shell
:
ls -l /bin/usr > ls-output.txt 2>&1
首先,咱们将 stdout
重定向到 ls-output.txt
文件,而后用 2>&1
的符号将文件描述符 2 stderr
重定向到文件描述符 1 stdout
中。
须要留神重定向的程序,重定向 stderr
必须总是在重定向 stdout
之后产生。
最近版本的 bash
提供了第二种办法,该办法让执行这种组合重定向更精简。
ls -l /bin/usr &> ls-output.txt
你依然能够应用 >>
进行追加操作。
解决不须要的输入
零碎提供了一种办法,能够将输入重定向到一个叫做 /dev/null
的非凡文件,该文件通常被称为比特桶(bit bucket)。它承受输出,但不做任何解决。
ls -l /bin/usr 2> /dev/null
重定向规范输出
还有 <
重定向操作符,咱们能够将stdin
的起源从键盘改为文件。
cat < sample.txt
管道
应用管道操作符 |
,一个命令的stout
能够通过管道进入另一个命令的 stdin
,less
就是一个例子:
ls -l /usr/bin | less
能够把几个命令放在一起,组成一个流水线。应用这种形式的命令被称为过滤器。过滤器承受输出,以某种形式扭转它,而后输入它。
tee 命令
tee
命令读取 stdin
并将其复制到 stdout
和一个或多个文件中。
ls /usr/bin | tee ls.txt | grep zip