系统中输入输出管理
- 理解系统中的输入输出
shell中的指令—>CPU产生运算结果—>字符设备
(默认在/dev/pts)
输入输出系统是计算机系统中的主机与外部进行通信的系统。它由外围设备和输入输出控制系统两部分组成。在shell中输入指令,在cpu中运算产生结果,再将结果送到字符设备中进行显示。 - 管理输入输出的符号
输出重定向(改变程序的输入来源和输出地点)
主要的输入方法
> | 重定向正确的输出 |
---|---|
2> | 重定向错误的输出 |
&> | 重定向所有的输出 |
2>&1 | 把错误结果转换成正确结果然后输出 |
/dev/null | 字符特殊文件,它属于空设备用来清除文件中的内容 |
需要注意的是重定向会覆盖原文件的内容
示例
注意:以下实验必须在普通用户下完成(本实验以student用户为例)
find /etc/ -name passwd > file ###定向正确输出到file
find /etc/ -name passwd 2> file.err ###定向错误输出到file.err
find /etc/ -name passwd &> file.all ###定向全部输出到file.all
> file ###清空file
输出追加
>> | 追加正确输出到文件最后 |
---|---|
2>> | 追加错误输出到文件最后 |
&>> | 追加所有输出到文件最后 |
注意:追加不会覆盖源文件的内容,而是在下面重新输出
以下实验必须在student用户(普通用户)下完成
[student@localhost ~]$ date > file
[student@localhost ~]$ find /etc/ -name passwd >> file
[student@localhost ~]$ date > file.err
[student@localhost ~]$ find /etc/ -name passwd 2>> file.err
[student@localhost ~]$ date > file.all
[student@localhost ~]$ find /etc/ -name passwd &>> file.all
输入重定向
"<"单行输入
eg:
[student@localhost ~]$ vim
[student@localhost ~]$ vim hehe
[student@localhost ~]$ cat hehe
hello world
[student@localhost ~]$ tr 'a-z' 'A-Z' < hehe
HELLO WORLD
多行输入
<<EOF
内容
EOF(此处的EOF可以为任意组合,但需要前后相同)
eg:利用多行输入更改用户密码
[root@localhost ~]# vim passwd.sh
[root@localhost ~]# cat passwd.sh
passwd <<EOF
helloaht
helloaht
EOF
[root@localhost ~]# sh passwd.sh
Changing password for user root.
New password: Retype new password: passwd: all authentication tokens updated successfully.
- 管道符的作用
“|”管道符的作用是把一条指令输出变成后接指令的输入
注意:
#管道符只允许正确的输出通过
#通过管道的输入变成输出,而变成的这些输出或被第二次指令处理
#如果需要保存这些输出内容,那么需要复制一份输出,用到的命令是"tee"
注意:以下实验必须在student用户(普通用户)下完成
(1)find /etc/ -name passwd | wc -l ##看到的结果为2,因为错误输出不能通过管道符
[student@localhost ~]$ find /etc/ -name passwd | wc -l
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/selinux/targeted/modules/active’: 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/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
2
(2)find /etc/ -name passwd 2>&1 | wc -l ##看到的结果为19,因为2>&1将2转换成为1
[student@localhost ~]$ find /etc/ -name passwd 2>&1 | wc -l
19
find /etc/ -name passwd 2>&1 | tee file | wc -l ##保存一份输出到file,再统计行数
[student@localhost ~]$ find /etc/ -name passwd 2>&1 |tee file|wc -l
19
[student@localhost ~]$ cat file
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/audit’: Permission denied
/etc/passwd
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/selinux/targeted/modules/active’: Permission denied
/etc/pam.d/passwd
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/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied