乐趣区

关于linux:Linux系列之重定向操作

前言

I/ O 重定向容许咱们将命令的输出和输入重定向到文件中,以及将多个命令连贯到一起成为管道。本文就来介绍无关重定向的常识。

规范输出、输入、谬误

输入包含两种类型:

  • 程序的后果。被称为规范输入或者stdout
  • 状态以及错误信息。被称为规范谬误或者stderr

除此之外,一些程序从规范输出 stdin 中获取输出。默认状况下,规范输出与键盘相连接。

默认状况下,stdoutstderr 都被链接到屏幕上,而不是保留到文件中。重定向容许咱们扭转输入的去向和输出的起源。

重定向规范输入

为了重定向到其余文件而不是屏幕上,咱们应用 > 重定向操作符,前面追随文件的名称。

举例来说,咱们能够应用重定向操作符来通知 shell,发送ls 命令的输入到 ls-output.txt 文件中,而不是屏幕上。

ls -l /usr/bin > ls-output.txt

咱们能够看到,ls命令的输入没有发送到屏幕上,而是发送 ls-output.txt 到文件中。

须要留神的是,应用 > 重定向操作符会笼罩指标文件。如果要追加内容,咱们能够应用 >> 重定向操作符。

重定向规范谬误

为了重定向 stderr,咱们必须援用其文件描述符。shellstdoutstdinstderr 别离作为文件描述符 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 能够通过管道进入另一个命令的 stdinless 就是一个例子:

ls -l /usr/bin | less

能够把几个命令放在一起,组成一个流水线。应用这种形式的命令被称为过滤器。过滤器承受输出,以某种形式扭转它,而后输入它。

tee 命令

tee命令读取 stdin 并将其复制到 stdout 和一个或多个文件中。

ls /usr/bin | tee ls.txt | grep zip
退出移动版