Linux :输入/输出重定向 >, 1>, 2>, &>, >> , <<

linux重定向可以将命令的输出或输入重新定向到其他位置或文件,以实现对输出输入的控制。默认情况下命令的输出通常为终端,如果想将输出转移到文件或其他位置,这时候就需要重定向。

文件描述符:一个命令通常都会打开三个文件,默认使用文件描述符0,1,2来指代这个三个文件

stdin   0	标准输入流 (键盘)
stdout	1	标准输出流 (终端)
stderr	2	标准错误输出流 (终端)

输出重定向

输出重定向常见形式:

command > file  #将标准输出1重定向到 file 里
command 1> file #将标准输出1重定向到 file 里,与上面的写法功能一样
command 2> file #将标准错误输出1重定向到 file 里
command &> file #将标准输出1 与 标准错误输出2 一起重定向到 file 里

最简单的用法,将命令的输出重定向到文件里:

$ ls > out.txt #将ls的结果写进out.txt里
$ cat out.txt 
file1.txt
out.txt

当然输出重定向还有其他用法,我们来看下面看这个例子:

当前目录下只有file1.txt这个文件

但我们使用cat命令查看file1.txt和file2.txt,返回终端的结果其实包含两部分

cat file1.txt的标准输出,

cat file2.txt的标准错误输出(因为文件不存在)

$ ls
file1.txt

$ cat file1.txt file2.txt 
1	apple      #标准输出
2	banana     #标准输出
3	pear       #标准输出
4	orange     #标准输出
cat: file2.txt: No such file or directory   #标准错误输出

1> 和 2> 分别重定向标准输出,与标准错误输出

# 单独使用> 或1>将命令的结果重定向到 out.txt文件中
# 此时,只有标准输出被重定向,标准错误输出被直接输出到终端
$ cat file1.txt file2.txt > out.txt
cat: file2.txt: No such file or directory #标准错误输出
$ cat out.txt 
1	apple
2	banana
3	pear
4	orange

# 单独使用2> 时,只有标准错误输出被重定向,标准输出被直接输出到终端
$ cat file1.txt file2.txt 2>out.txt
1	apple
2	banana
3	pear
4	orange
$ cat out.txt 
cat: file2.txt: No such file or directory

&> 为一起重定向标准输出 与 标准错误输出的简便写法

# &> 是指将 标准输出 与 标准错误输出 一起重定向 
$ cat file1.txt file2.txt &> out.txt
$ cat out.txt 
1	apple
2	banana
3	pear
4	orange
cat: file2.txt: No such file or directory

#以上代码等价于 1> out.txt 2>&1
#这里 &1 指代标准输出1
#将标准错误输出2 先定向到标准输出1,然后将标准输出1定向到out.txt文件中
$ cat file1.txt file2.txt 1> out.txt 2>&1
$ cat out.txt 
1	apple
2	banana
3	pear
4	orange
cat: file2.txt: No such file or directory

#等价于
$ cat file1.txt file2.txt 2> out.txt 1>&2
$ cat out.txt 
1	apple
2	banana
3	pear
4	orange
cat: file2.txt: No such file or directory


不覆盖file的输出重定向 >>

command >> file 
#将标准输出1重定向到 file 里, 不替代原本file文件内容,只是在末尾添加

$ cat file1.txt >out.txt #将cat file1的结果输出到out.txt
$ cat out.txt 
1	apple
2	banana
3	pear
4	orange

$ cat file1.txt >>out.txt #将cat file1的结果添加到out.txt末尾,不覆盖源文件
$ cat out.txt  
1	apple
2	banana
3	pear
4	orange
1	apple
2	banana
3	pear
4	orange

>>的其他用法与 >类似, 也可以有 &>> 1>> 2>>等用法:

#将标准输出定向到out.txt,然后将标准错误输出添加到out.txt末尾
$ cat file1.txt file2.txt 1> out.txt 2>>out.txt
(base) [heyunye@gc017 redirection]$ cat out.txt 
1	apple
2	banana
3	pear
4	orange
cat: file2.txt: No such file or directory


输入重定向

与输出重定向类似,将文件内容重定向到标准输入0

command <file  #重定向标准输入
command << xxx  #here document

看下面这个例子,使用head -v 来查看文件,理解其中区别

# 使用head -v命令来查看file1.txt (-v 选项可以输出文件名)
$ head -v file1.txt 
==> file1.txt <==           
1	apple
2	banana
3	pear
4	orange

# 使用重定向,可以看到主体部分相同,但文件名为standard input,因为我们将文件重定向到了标准输入
$ head -v <file1.txt 
==> standard input <==
1	apple
2	banana
3	pear
4	orange

Here document

可以以交互形式实现快捷的多行输入。

<<xxx 这种形式被称为Here document,xxx为任意字符串,作为标签,为Here documen的起始,输入时直接在终端里输入多行内容,完成后再次输入xxx,标记输入完成。

#here document
command <<标签  
>内容
>内容
>...
>标签

$ head -v <<abc #<<abc 是指here document的起始
> 123 #内容
> 123 #内容
> 123 #内容
> abc #abc 表示结束
==> standard input <==  #Here document被定向为标准输入
123
123
123

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s