管道符与输入输出重定向
管道符
|
是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 >file
或command 1>file
:将输出重定向至file,file原本的内容会被抹除。
command >>file
或command 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
|