Linux--重定向

昨天学习了有关于输入输出的相关内容,其中特别注意重定向的相关用法,即输入重定向,输出重定向,改变了默认的位置。

在学习期间,还学习到了管道的用法。

今天来回顾一下这两个方面的内容,重定向和管道大部分都是可以一起使用的。

 

首先单独学习重定向和管道的相关知识。

重定向

一般来说,输入默认是键盘鼠标,输出默认到输出到终端界面上。重定向,顾名思义便是重新进行输入输出并定向地输入、输出到指定的

文件。

举个简单地例子,当我们使用计算机计算时,希望能够将结果存放在我们指定的某个文件时,这便是重定向。

重定向则分为:

标准输入(STDIN)-0 默认接受来自键盘的输入

标准输出(STDOUT)-1 默认输出到终端窗口

标准错误(STDERR)-2 默认输出到终端窗口

 

输入重定向:

使用 < 来重定向标准输入,需要注意的是,只有  <  能进行输入重定向,需分清 < 和 > 出现在同一命令行的时候。

当cat > hello ,需要从键盘端进行输入。

举个简单的例子来说,当我们希望将/etc/passwd文件里的定向输入到命名为a的文件时,除了cp命令外还可以使用 < ,但是会对 > 有点混淆。

1 [root@mmmm ~]# cat > a < /etc/passwd             #先读 < ,即先将/etc/passwd 输入到 cat 命令里,然后由cat 命令输出到文件 a
2 [root@mmmm ~]# cat a
3 root:x:0:0:root:/root:/bin/bash
4 bin:x:1:1:bin:/bin:/sbin/nologin
5 daemon:x:2:2:daemon:/sbin:/sbin/nologin
6 adm:x:3:4:adm:/var/adm:/sbin/nologin
7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
8 sync:x:5:0:sync:/sbin:/bin/sync
9 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

 

 

输出重定向:

输出重定向分为标准输出(STDOUT)、标准错误(STDERR)。

STDOUT和STDERR可以被重定向到文件、命令、操作符号、文件名 。

支持的操作符号包括:

             > 把STDOUT重定向到文件

             2> 把STDERR重定向到文件

             &> 把所有输出重定向到文件

标准输出:

但是我们需要注意的是,有时候运行的结果和我们预期的不一样。

比如:> 文件内容会被覆盖 

1 [root@mmmm ~]# cat test.txt 
2 111222333
3 [root@mmmm ~]# cat > test.txt
4 abcdabcd
5 [root@mmmm ~]# cat test.txt
6 abcdabc

这时候可以使用 set –C  禁止将内容覆盖已有文件,但可追加 ,

但是有的时候需要临时覆盖,则可以使用 >| file 进行强制覆盖,而 set +C  允许覆盖 。

另一种方法防止覆盖则是在原命令上 使用 >>  原有内容基础上,追加内容。

标准错误

 2> 覆盖重定向错误输出数据流

2>> 追加重定向错误输出数据流

例如:使用find 命令 查找在 /etc  目录下,以.conf 结尾的文件,但是,运行发现有些文件的权限有限制,这时我们将错误结果输入到

已有的find.err 文件里,但是,同标准输出一样,> 内容会被覆盖掉,使用>> 则是追加。

1 [mmmm@localhost ~]$ vi find.err
2 [mmmm@localhost ~]$ cat find.err
3 it's wrong
4 [mmmm@localhost ~]$ find /etc -name "*.conf" 2> find.err
5 /etc/plymouth/plymouthd.conf
6 /etc/fprintd.conf
7 /etc/abrt/plugins/CCpp.conf
8 /etc/abrt/plugins/python.conf

 查看find.err 内容如下,会发现内容被覆盖:

1 [mmmm@localhost ~]$ cat find.error
2 find: ‘/etc/grub.d’: Permission denied
3 find: ‘/etc/pki/CA/private’: Permission denied
4 find: ‘/etc/pki/rsyslog’: Permission denied
5 find: ‘/etc/selinux/targeted/active’: Permission denied
6 find: ‘/etc/selinux/final’: Permission denied
7 find: ‘/etc/dhcp’: Permission denied
8 find: ‘/etc/lvm/archive’: Permission denied
[mmmm@localhost ~]$ vi find.error
[mmmm@localhost ~]$ cat find.error
hello mmmm!
[mmmm@localhost ~]$ find /etc -name "*.conf"  2>> find.error
/etc/resolv.conf
/etc/fonts/conf.d/31-cantarell.conf
/etc/fonts/conf.d/65-0-smc-meera.conf
/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
[mmmm@localhost ~]$ cat find.error
hello mmmm!
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied

 

 

 

标准输出和错误输出各自定向至不同位置 

 1 [mmmm@localhost ~]$ find /etc -name "*.conf" > file.out 2> error.out
 2 [mmmm@localhost ~]$ cat file.out
 3 /etc/resolv.conf
 4 /etc/fonts/conf.d/31-cantarell.conf
 5 /etc/fonts/conf.d/65-0-smc-meera.conf
 6 /etc/fonts/conf.d/10-scale-bitmap-fonts.conf
 7 /etc/fonts/conf.d/65-1-vlgothic-gothic.conf
 8 /etc/fonts/conf.d/20-unhint-small-vera.conf
 9 /etc/fonts/conf.d/65-0-lohit-telugu.conf
10 [mmmm@localhost ~]$ cat error.out
11 find: ‘/etc/grub.d’: Permission denied
12 find: ‘/etc/pki/CA/private’: Permission denied
13 find: ‘/etc/pki/rsyslog’: Permission denied
14 find: ‘/etc/selinux/targeted/active’: Permission denied
15 find: ‘/etc/selinux/final’: Permission denied
16 find: ‘/etc/dhcp’: Permission denied

 

合并标准输出和错误输出为同一个数据流进行重定向 ,

    &> 覆盖重定向 

    &>>  追加重定向 

[mmmm@localhost ~]$ find /etc -name "*.conf" &> find.all
[mmmm@localhost ~]$ cat find.all
/etc/resolv.conf
/etc/fonts/conf.d/31-cantarell.conf
/etc/fonts/conf.d/65-1-vlgothic-gothic.conf
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
/etc/libreport/events/report_Uploader.conf

此时需要注意的是, >> 是将正确结果输出,所以将错误结果也输出时需要进行转换,

1>&2  表示将正确结果转换为错误结果
2>&1  表示将错误结果转换为正确结果

 因为在用户的角度可以直观的看出结果的对与错,可是对计算机指令而言有的时候无法识别错误,进而无法继续

重定向,所以需要转换来重定向。

 

 

():合并多个程序的STDOUT

例如如下的命令,将2018,2019年日历定向输出到all.txt 文件里,下面代码行我只粘贴了部分结果,便于展示。

[mmmm@localhost ~]$ ( cal 2018 ; cal 2019 ) > all.txt
[mmmm@localhost ~]$ cat all.txt
                               2018                              
       January               February                 March      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                1  2  3
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    4  5  6  7  8  9 10
14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17
21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24
28 29 30 31            25 26 27 28            25 26 27 28 29 30 31
                            2019                              
       January               February                 March      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
       1  2  3  4  5                   1  2                   1  2
 6  7  8  9 10 11 12    3  4  5  6  7  8  9    3  4  5  6  7  8  9
13 14 15 16 17 18 19   10 11 12 13 14 15 16   10 11 12 13 14 15 16
20 21 22 23 24 25 26   17 18 19 20 21 22 23   17 18 19 20 21 22 23
27 28 29 30 31         24 25 26 27 28         24 25 26 27 28 29 30
                                              31

 

转载于:https://www.cnblogs.com/0715mmmm/p/9347450.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值