Linux命令 -- 重定向

Linux命令 -- 重定向

  • 输出重定向
    • 标准输出
    • 标准错误输入
    • 正确与错误都重定向
  • 输入重定向

输出重定向

[root@localhost testdir]# ll
total 4
-rw-r--r--. 1 root root 72 Aug 13 00:45 mo.txt
[root@localhost testdir]# cat mo.txt 
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day

# 查询mo.txt文件里,包含字符串hello的行,并将结果写入am.log文件中
# > 表示覆盖, >> 表示追加
[root@localhost testdir]# grep hello mo.txt > am.log
[root@localhost testdir]# ll
total 8
-rw-r--r--. 1 root root 18 Aug 13 00:46 am.log
-rw-r--r--. 1 root root 72 Aug 13 00:45 mo.txt
[root@localhost testdir]# cat am.log 
hello
hello world

标准输出

重定向默认写入标准输出。对于标准错误输出,其内容默认不写入。

[root@localhost testdir]# ll
total 8
-rw-r--r--. 1 root root 18 Aug 13 00:46 am.log
-rw-r--r--. 1 root root 72 Aug 13 00:45 mo.txt

# 查看存在的文件,正确输出。不存在的文件,输出错误信息
[root@localhost testdir]# cat mo.txt ml.txt
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day
cat: ml.txt: No such file or directory

# 将信息写入到am.log中
[root@localhost testdir]# cat mo.txt ml.txt > am.log 
cat: ml.txt: No such file or directory
[root@localhost testdir]# cat am.log 
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day

0:标准输入,1:标准输出,2:标准错误输出
重定向输出符>,是1>的缩写。也就是说明它只会重定向标准输出,标准错误输出不符合,也就不处理。

标准错误输入

用 2> 可将标准错误输入,重定向到文件中。但会省略标准输出。
此方法适用于将执行失败的错误信息,打印到日志中。2>>是追加。

[root@localhost testdir]# ll
total 8
-rw-r--r--. 1 root root 72 Aug 13 00:53 am.log
-rw-r--r--. 1 root root 72 Aug 13 00:45 mo.txt
[root@localhost testdir]# cat mo.txt ml.txt 2> am.log 
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day
[root@localhost testdir]# cat am.log 
cat: ml.txt: No such file or directory
[root@localhost testdir]# 

正确与错误都重定向

将正确与错误都重定向到文件中。2>& 1 表示标准错误输出和标准输出绑定在一起
cat mo.txt ml.txt > am.log 2>& 1 表示覆盖
cat mo.txt ml.txt >> am.log 2>& 1 表示追加

[root@localhost testdir]# cat am.log 

[root@localhost testdir]# cat mo.txt ml.txt > am.log 2>& 1
[root@localhost testdir]# cat am.log 
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day
cat: ml.txt: No such file or directory

也可以将正确和错误,分别重定向到两个文件中

[root@localhost testdir]# ll
total 4
-rw-r--r--. 1 root root 72 Aug 13 00:45 mo.txt
[root@localhost testdir]# cat mo.txt ml.txt 1>> a1.log 2>> a2.log
[root@localhost testdir]# cat mo.txt mq.txt 1>> a1.log 2>> a2.log
[root@localhost testdir]# ll
total 12
-rw-r--r--. 1 root root 144 Aug 13 01:26 a1.log
-rw-r--r--. 1 root root  78 Aug 13 01:26 a2.log
-rw-r--r--. 1 root root  72 Aug 13 00:45 mo.txt
[root@localhost testdir]# cat a1.log 
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day
[root@localhost testdir]# cat a2.log 
cat: ml.txt: No such file or directory
cat: mq.txt: No such file or directory

输入重定向

与输出重定向相反,用符号 < 表示

[root@localhost testdir]# ll
total 4
-rw-r--r--. 1 root root 72 Aug 13 00:45 mo.txt

# 将mo.xtx文件内容,作为标准输入,输入给cat命令。
# cat命令转化成标准输出,并打印出来
[root@localhost testdir]# cat < mo.txt 
hello
hello world
Hello
Hello World in the asd.txt
today is a sunny day

用 >> 表示追加,追加多个标准输入。结束的标志符一般用EOF(end of file),因为是自定义的,所以也可以用其他的。

[root@localhost testdir]# cat << EOF
> wa ha ha
> hello
> jia duo bao
> EOF
wa ha ha
hello
jia duo bao
[root@localhost testdir]# cat << a
> w
> q
> e
> a
w
q
e

配合输出重定向,可创建文件并写入内容

[root@localhost testdir]# cat > wa.txt << EOF
> wa ha ha
> hello
> jia duo bao
> EOF
[root@localhost testdir]# cat wa.txt
wa ha ha
hello
jia duo bao

你可能感兴趣的:(Linux,linux)