Featured image of post Linux03-管道符与输入输出重定向

Linux03-管道符与输入输出重定向

管道符与输入输出重定向

管道符

|是Linux管道命令操作符,简称管道符。使用此管道符可以将两个命令分隔开,|左边命令的输出就会作为|右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

假设有以下hello.txt文件:

1
2
3
4
5
6
7
hello1
hello2
hello3
hello4
hello4
hello4
hello5

可以使用管道符一次性串联多个命令:

1
2
# cat输出1.txt内容,给sort进行排序,再给uniq进行区重,最后查找含有o3的行
cat hello.txt | sort | uniq | grep "o3"
输入输出重定向

在linux中,shell与内核沟通的通道有三个:标准输入、标准输出以及标准错误输出,分别以0、1、2来表示。在命令行中敲入命令,shell会通过标准输入 (0) 将命令传递至内核。命令执行完毕后输出的信息会通过标准输出 (1) 传递至屏幕上,而错误信息则会通过标准错误输出 (2) 传递至屏幕上。

名称 文件描述符 操作符 Java中的表示
标准输入(stdin) 0 < 或 << System.in
标准输出(stdout) 1 >, >>, 1>, 1>> System.out
标准错误输出(stderr) 2 2>, 2>> System.err

通过重定向符号,可以将输入输出重定向至文件,甚至是另一个通道。常见的重定向符号包括:

command >filecommand 1>file:将输出重定向至file,file原本的内容会被抹除。

command >>filecommand 1>>file :将输出以追加的方式重定向至file,即在file的末尾添加内容。

command <file :将输入重定向至file。

此外,还可以将两个文件描述符用重定向符号连接,如:

2>&1:将标准错误输出重定向至标准输出。后面的文件描述符需要加上&,否则会定向至名为1的文件里。

以下是一些重定向的具体例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 将输出的hello重新定向至hello.txt中
echo "hello">hello.txt

# 尝试读取不存在的文件,将错误输出信息重定向至err.txt
cat not_existent.txt 2>err.txt

# 尝试读取文件,将文件内容重定向至log文件,如果发生错误,则将错误信息重定向至标准输出,而标准输出又重定向至log文件,故错误信息也将定向至log文件
cat not_existent.txt 1>log 2>&1

# 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null。/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃
cat not_existent.txt 1>log 2>/dev/null
welcome to my blog
使用 Hugo 构建
主题 StackJimmy 设计