重定向

在Linux中,标准输入是从键盘读入数据或命令等,标准输出是将命令的结果等输出到屏幕。

类型

设备

文件路径

文件描述符

描述

标准输入0

键盘

/proc/self/fd/0

0

从键盘获得输入

标准输出1

屏幕

/proc/self/fd/1

1

输出到屏幕

错误输出2

屏幕

/proc/self/fd/2

2

输出到屏幕

但使用 Linux 终端时,经常需要将命令的输出重定向到文件或其他命令中,这时需要使用到重定向技术。

重定向是一种非常有用的技术,可以将命令的输出从标准输出流发送到文件或其他进程的输入流。

在 Linux 中有三种常见重定向方式:输出重定向、输入重定向和错误重定向。

输出重定向

将某个命令默认指向的输出文件转而指向一个文件,即使得命令输出到某个指定文件中,而不是输出到终端屏幕或终端窗口。

Linux 中使用 >>> 来重定向标准输出。

输出重定向

输出重定向是将命令输出的内容写入到文件或其他进程中。

在 Linux 中,我们可以使用 > 符号来将命令的输出重定向到一个文件中。

如,下面的命令将会把 "s 命令的输出写入到 files.txt 的文件中。

ls > files.txt

若 file.txt 文件不存在,则文件将被创建;否则,文件内容将被强制覆盖。

输出追加重定向

如果想要将输出追加到文件末尾而不是覆盖它,可以使用 >> 符号。

如,下面的命令将会将 ls 命令的输出追加到 files.txt 文件的末尾:

ls >> files.txt

使用重定向在bash中写入文件

有一条有意思的命令是cat >file <<EOF,该命令使用了输出重定向,可以用脚本非交互式的编写文件并显示内容。如:

centos重定向命令 重定向linux_bash

用户可以一直输入文本,直到输入 "EOF"为止。

输入重定向

输入重定向是将文件的内容发送到命令中,而不是从键盘输入。使用 < 符号来将文件中的内容重定向到命令中。

如,下面的命令将会将 input.txt 文件的内容发送给 sort 命令进行排序:

sort < input.txt

错误重定向

错误重定向是将命令的错误输出重定向到文件或其他进程中。使用 2> 符号将命令的错误输出重定向到文件中。

如,下面的命令将会将 ls 命令的错误输出写入到 error.txt 的文件中:

ls file2.txt 2> error.txt

追加重定向

与输出追加重定向一样,使用>>来追加输出。

如,下面的命令将会将 ls 命令的错误输出追加写入到 error.txt 的文件中:

ls file2.txt 2>> error.txt

分别重定向

分别将标准输出和错误输出定向到两个文件内,使用1>2>。如:

ls file.txt 1>stdout.txt 2>stderr.txt

该命令会分别重定向标准输出到 stdout.txt 文件,标准错误输出到 stderr.txt 文件。

全部重定向

使用 &> 来将标准输出和错误输出全部重定向到指定文件。如:

ls file.txt 1&>stdout.txt

该命令会将所有输出全部重定向到 stdout.txt 文件。

或者使用命令 >> 文件 2>&1来全部重定向。如:

ls >> file.txt 2>&1

特殊文件

Linux中存在两个特殊文件,可以用来配合重定向一起使用实现功能。

/dev/null

黑洞文件 /dev/null 是一个特殊的设备文件,写入黑洞文件的数据都会被清空。通常用于丢弃不需要的数据输出,或作为用于输入流的空文件。

  • 丢弃无用输出流
ls file.txt 1>stdout.txt 2> /dev/null

将命令的标准输出重定向到 stdout.txt 文件,将错误输出写入黑洞文件(即丢弃)。

  • 清空文件
cat /dev/null>file.txt

将黑洞文件写入 file.txt ,即清空 file.txt 文件。

其他可用的清空文件的方法:

echo >file.txt
echo "">file.txt
echo -n "" >file.txt
:>file.txt

/dev/zero

和/dev/null类似,/dev/zero也是一个特殊的字符设备文件。当我们使用或读取它的时候,它会提供无限连续不断的空的数据流,主要的用处是用来创建一个指定长度用于初始化的空文件,或以覆盖的方式清空文件。

如:

dd if=/dev/zero of=./output.txt bs=1024 count=1

该命令会产生一个大小为1kb的空文件output.txt

续不断的空的数据流,主要的用处是用来创建一个指定长度用于初始化的空文件,或以覆盖的方式清空文件。

如:

dd if=/dev/zero of=./output.txt bs=1024 count=1

该命令会产生一个大小为1kb的空文件output.txt