目录
一、Linux系统中输入输出的定义
1、输入
输入是指系统外接向系统中传递的信息。(eg:键盘、鼠标、输入命令)
Stdin 是标准输入流。
2、输出
输出分为标准正确输出和标准错误输出:
Stdout 标准正确输出:在命令顺利执行完成后产生的字符串。(在Linux中的输出编号为1)
Stderr 标准错误输出:在命令失败执行完成后产生的字符串。(在Linux中的输出编号为2)
3、字符设备
字符设备是指在I/O传输过程中以字符为单位进行传输的设备。(eg: 键盘,打印机)
字符设备是内存中开启的虚拟设备,并不真实存在。
二、重定向
重定向输出的方法:
符号 | 用途 |
---|---|
> | 重定向正确输出 |
2> | 重定向错误输出 |
&> | 重定向所有输出 |
1、> 重定向正确输出
在目录/etc下寻找叫passwd的文件,因为登陆的用户是“test”,所以有的文件没有权限查看。
[test@localhost Desktop]$ find /etc -name passwd ##在目录/etc下寻找叫passwd的文件
find: ‘/etc/pki/rsyslog’: Permission denied ##因为登陆的用户是“test”,所以有的文件没有权限查看
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
把搜索结果中正确的输出重定向到test.out文件中:
[test@localhost Desktop]$ find /etc -name passwd > test.out ##把搜索结果中正确的输出重定向到test.out文件中
find: ‘/etc/pki/rsyslog’: Permission denied ##错误的结果输出
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
2、2> 重定向错误输出
把错误的结果重定向到文件test.err中:
[test@localhost Desktop]$ find /etc -name passwd 2> test.err ##把错误的结果重定向到文件test.err中
/etc/pam.d/passwd ##正确的结果输出
/etc/passwd
扫描二维码关注公众号,回复:
9672283 查看本文章
3、&> 重定向所有输出
把所有的结果重定向到test.all中:
[test@localhost Desktop]$ find /etc -name passwd &> test.all ##把所有的结果重定向到test.all中
##没有结果输出
注意:重定向会覆盖原文件内容!
[test@localhost Desktop]$ cat yang
hello yang
[test@localhost Desktop]$ echo yang > yang
[test@localhost Desktop]$ cat yang
yang
原文件件中的内容“hello yang”被“yang”所覆盖
三、追加
追加符号:
符号 | 用途 |
---|---|
>> | 追加正确输出 |
2>> | 追加错误输出 |
&>> | 追加所有输出 |
1、>> 追加正确输出
[test@localhost Desktop]$ cat yang
yang
[test@localhost Desktop]$ find /etc -name passwd >> yang ##把正确结果追加到文件yang中
find: ‘/etc/pki/rsyslog’: Permission denied ##错误结果显示
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
[test@localhost Desktop]$ cat yang ##查看文件yang中内容
yang
/etc/pam.d/passwd ##正确输出追加到原文件内容之后
/etc/passwd
2、2>> 追加错误输出
[test@localhost Desktop]$ echo yang > yang
[test@localhost Desktop]$ cat yang
yang
[test@localhost Desktop]$ find /etc -name passwd 2>> yang ##把错误结果追加到文件yang
/etc/pam.d/passwd ##正确结果显示
/etc/passwd
[test@localhost Desktop]$ cat yang
yang
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
3、&>> 追加所有输出
[test@localhost Desktop]$ echo yang > yang ##生成一个含有“yang”的文件yang
[test@localhost Desktop]$ cat yang ##查看文件yang中内容
yang
[test@localhost Desktop]$ find /etc -name passwd &>> yang ##把所有结果追加到文件yang中
[test@localhost Desktop]$ cat yang
yang
find: ‘/etc/pki/rsyslog’: Permission denied ##所有结果追加到了文件yang中原有内容之后
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
注意:追加不会覆盖原文件内容,是追加到原文件的最后。
四、管道
定义:把输出变成后一条命令的输入
1、| 管道符
[test@localhost Desktop]$ ls /bin | wc -l ##统计bin中有多少文件
1612
[test@localhost Desktop]$ find /etc -name passwd | wc -l ##默认只有正确输出可以通过管道,进入后续处理
find: ‘/etc/pki/rsyslog’: Permission denied ##错误结果显示
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
2 ##有两个正确输出
2、2>&1
2>&1:将编号为1的输出转换为2
[test@localhost Desktop]$ find /etc -name passwd 2>&1 | wc -l ##把错误输出定向到正确输出存放位置,再通过管道统计
16 ##总共有16个输出
3、tee
tee:复制输出到指定位置
[test@localhost Desktop]$ find /etc -name passwd 2>&1 | tee file | wc -l ##把所有输出复制一份存在文件file中,再通过管道统计
16
[test@localhost Desktop]$ cat file
find: ‘/etc/pki/rsyslog’: Permission denied ##所有的输出都保存在了文件file中
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
五、输入重定向
输入重定向:用符号从文件中获取输入
1、一次输入重定向
[test@localhost Desktop]$ > yang ##清空文件yang中内容
[test@localhost Desktop]$ cat yang
[test@localhost Desktop]$ echo yang lulu > yang ##在文件yang中写入“yang lulu”
[test@localhost Desktop]$ cat yang
yang lulu
[test@localhost Desktop]$ tr 'a-z' 'A-Z' < yang ##输入重定向,把yang中小写全部变成大写
YANG LULU
2、多行输入重定向
编写yang.sh文件:
[root@localhost Desktop]# vim yang.sh
内容为:
passwd <<EOF ##多行录入起始,起始符为“EOF”
yang ##修改密码有设置新密码,再次输入两步
yang
EOF ##当起始符再次出现表示录入结束
调用yang.sh文件,来修改密码:
[root@localhost Desktop]# bash yang.sh
Changing password for user root.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.
注意:多行输入重定向可以用来批量修改密码。