Linux中的输入输出重定向

Table of Contents

 

1.重定向

2.追加

3.管道

4.输入重定向


1.重定向


1>        正确输出重定向(这里因为默认是正确输出,所以这里可以将1省略,写成>)
2>       错误输出存放位置
&>       存放所有

首先以下面的有输出的命令为例,输出结果如下:

[dw@localhost Desktop]$ find /etc/ -name passwd
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
[dw@localhost Desktop]$ 

我们可以看到输出结果有正确的(2条)和错误(14条)的。

现在将正确的结果重定向到file文件中

[dw@localhost Desktop]$ find /etc/ -name passwd >file
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
[dw@localhost Desktop]$ cat file 
/etc/pam.d/passwd
/etc/passwd

可以看到只输出错误的,而正确的结果就重定向到了file文件中。

我们再将错误的结果进行重定向:

[dw@localhost Desktop]$ find /etc/ -name passwd 2>file
/etc/pam.d/passwd
/etc/passwd
[dw@localhost Desktop]$ cat file 
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied

可以看到只输出正确的结果,而错误的结果重定向到了file 文件中。

最后将所有结果进行重定向:

[dw@localhost Desktop]$ find /etc/ -name passwd &>file
[dw@localhost Desktop]$ cat file 
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied

可见所有结果都重定向到了file文件中。

2.追加


>>        追加正确的
2>>       追加错误的
&>>       追加所有
 经过上面的例子,我们可以看到每次重定向之后新的结果都会覆盖原来文件里的内容,要想不被覆盖,就要用到追加。

这里用法和重定向的用法一样。

我们这里举例说明:

[dw@localhost Desktop]$ echo hello would > file2
[dw@localhost Desktop]$ cat file2
hello would
[dw@localhost Desktop]$ find /etc/ -name passwd >>file2
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
[dw@localhost Desktop]$ cat file2
hello would
/etc/pam.d/passwd
/etc/passwd

可以看到,追加以后不会覆盖源文件的内容。


3.管道

我们称  |  为管道符,用来将前面的命令的输出作为后面的命令的输入。
首先我们用ls /bin | wc -l 来查看/bin有多少文件

[dw@localhost Desktop]$ ls /bin | wc -l 
1506

可以看到用wc -l 命令统计了ls 命令的结果。

我们知道输出有两种,正确的和错误的,管道中默认之处理正确的,例如:

[dw@localhost Desktop]$ find /etc -name passwd | wc -l  
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
2

可以看到最后只统计了正确的,错误的正常显示。

如果要统计所有的,我们需要将错误的也进行处理,将正确的和错误的放到一起,可以用2>&1做到,举例:

[dw@localhost Desktop]$ find /etc -name passwd 2>&1 | wc -l  
16
[dw@localhost Desktop]$ 

可以看出结果为所有输出结果的统计。

如果我们还想再继续保存一份的话,可以配合tee 命令,举例:

[dw@localhost Desktop]$ find /etc -name passwd 2>&1 | tee file | wc -l
16
[dw@localhost Desktop]$ cat file
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied

可以看到结果,先是复制一份输出到file文件再通过管道统计。


4.输入重定向

前面说的都是输出重定向,还有输入重定向,例如:

[dw@localhost Desktop]$ echo westos WESTOS > test2 
[dw@localhost Desktop]$ cat test2 
westos WESTOS

我们新建一个文件,里面分别输入大写和小写的两个单词以便查看结果。

我们用输入重定向来将文件里的内容交给tr命令作为其输入。

[dw@localhost Desktop]$ echo westos WESTOS > test
[dw@localhost Desktop]$  tr 'a-z' 'A-Z' < test
WESTOS WESTOS
[dw@localhost Desktop]$ 

可以看到,文件里的内容作了修改。

上面是单行重定向,还可以进行多行重定向,也叫多行录入,例如:

我们用vim test 命令创建一个多行录入脚本,在里面输入以下内容:
passwd <<EOF                                                      多行录入起始
lee
lee
EOF                                                                         当起始符再次出现表示录入结束
:wq                                                                           最后退出保存

最后使用命令bash test3 执行多行录入脚本,将两行lee分别作为更改用户密码时的两次录入采集,就实现了多行录入。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值