管理Linux中的输入输出
1.Linux系统中输入输出的定义
1.1 输入:
Stdin[标准输入流],指系统外接向系统中传递的消息,如键盘、鼠标、输入命令
1.2 输出:
stdout[标准正确输出],指命令顺利执行完成之后产生的字符串,stdout在Linux中的输出编号为1
stderr[标准错误输出],指命令失败执行完成之后产生的字符串,stderr在Linux中的输出编号为2
注意:不是所有指令都有输出 (比如:rm -f)
实验1:显示输出 find /etc -name passwd
说明:输出结果包含正确输出和错误输出
说明:1是正确输出,2是错误输出
1.3 字符设备
字符设备,是指在I/O传输过程中以字符为单位进行传输的设备,如键盘、打印机等。字符设备是内存中开启的虚拟设备并真实存在。
2.重定向输出
2.1 重定向的输出
符号 | 用途 |
---|---|
> | 重定向正确输出 |
2> | 重定向错误输出 |
&> | 重定向所有输出 |
命令 | 用途 |
---|---|
find /etc/ -name passwd > westos.out |
重定向正确输出命令 |
find /etc/ -name passwd 2> westos.err |
重定向错误输出命令 |
find /etc/ -name passwd &>westos.all |
重定向所有输出命令 |
实验环境:普通用户。因为普通用户权限低,检索报错会出现错误输出
实验一:重定向正确输出到文件westos.outfind /etc/ -name passwd > westos.out
实验结果:(westos.out文件包含内容)
正确输出被导出,shell界面只显示错误输出
实验二:重定向错误输出到文件westos.errfind /etc/ -name passwd 2> westos.err
实验结果:(westos.err文件包含内容)
错误输出被导出,shell界面只显示正确输出
实验三:重定向全部输出到文件westos.allfind /etc/ -name passwd &>westos.all
实验结果:(westos.all文件包含内容)
全部输出内容导出,shell界面不显示
2.2 重定向对文件的覆盖和清空
(1).重定向会覆盖原文件内容find /etc/ -name passwd > file
实验环境:普通用户
1.生成一个有内容的文件
2.重定向正确输出到文件
实验结果:原文件内容被覆盖
(2).重定向可以用来清空原文件内容> file
实验环境:普通用户
说明:原文件内容被清空
3.追加输出
注意:追加动作是不会覆盖原文件内容
追加动作会把定向的内容放原文件最后find /etc -name passwd > westos
##执行重定向(覆盖)find /etc -name passwd >> westos
##执行追加(不覆盖原文件内容)
3.1 对比重定向和追加
实验:(普通用户环境)
重定向实验:生成一个有内容的文件
[staaa@qq.com Desktop]$ echo hello westos > westos
[aaa@qq.com Desktop]$ cat westos
hello westos
执行重定向
[aaa@qq.com Desktop]$ find /etc -name passwd > westos
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
实验结果:原文件内容被覆盖
[aaa@qq.com Desktop]$ cat westos
/etc/pam.d/passwd
/etc/passwd
追加实验:
生成一个有内容的文件
[aaa@qq.com Desktop]$ echo hello westos > westos
[aaa@qq.com Desktop]$ cat westos
hello westos
执行追加
[aaa@qq.com Desktop]$ find /etc -name passwd >> westos
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
实验结果:查看结果文件内容未被覆盖
[aaa@qq.com Desktop]$ cat westos
hello westos
/etc/pam.d/passwd
/etc/passwd
3.2追加
符号 | 用途 |
---|---|
>> | 追加正确输出 |
2>> | 追加错误输出 |
&>> | 追加全部输出 |
find /etc -name passwd >> westos
##追加正确输出find /etc -name passwd 2>> westos
##追加错误输出find /etc -name passwd &>> westos
##追加所有输出
[aaa@qq.com Desktop]$ rm -fr * ##清空实验环境
[aaa@qq.com Desktop]$ echo hello 2020 > westos ##生成一个有内容的文件
[aaa@qq.com Desktop]$ cat westos
hello 2020
[aaa@qq.com Desktop]$ wc westos ##查看文件行数
1 2 11 westos
[aaa@qq.com Desktop]$ find /etc/ -name passwd >> westos ##追加正确输出
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
[aaa@qq.com Desktop]$ wc westos
3 4 41 westos ##追加正确输出后文件行数发生改变
[aaa@qq.com Desktop]$ find /etc/ -name passwd 2>> westos ##追加错误输出
/etc/pam.d/passwd
/etc/passwd
[aaa@qq.com Desktop]$ wc westos
17 60 691 westos
[aaa@qq.com Desktop]$ find /etc/ -name passwd &>> westos ## ##追加全部输出
[aaa@qq.com Desktop]$ wc westos
33 118 1371 westos ##追加错误输出后文件行数发生改变
实验结果:
原文件内容为1行
追加正确输出后变成3行(包括原内容1行,正确输出2行)
追加错误输出后变成17行(包括原内容1行,正确输出2行,错误输出14行)
追加全部输出后变成33行(包括原内容1行,正确输出2行,错误输出14行,全部输出16行)
4.管道输出
管道:把上一条命令的输出变成后一条命令的输入
符号 | 用途 |
---|---|
I | 管道符 |
2.>&1 | 把编号为1的输出转换为2 |
tee | 复制输出到指定位置 |
find /etc/ -name passwd | wc -l
##默认只有正确输出可以通过管道find /etc/ -name passwd 2>&1 | wc -l
##将错误输出定向到正确输出存放位置,再统计find /etc/ -name passwd 2>&1 | tee file | wc -l
##复制输出到file文件,再通过管道统计
实验1.统计/bin有多少文件:
[aaa@qq.com Desktop]$ ls /bin |wc -l
1612
实验2.统计正确输出:
[aaa@qq.com 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
实验3.错误输出定向到正确输出存放位置,再统计
[aaa@qq.com Desktop]$ find /etc/ -name passwd 2>&1 |wc -l
16
test4.复制输出到file文件,再通过管道统计
[aaa@qq.com Desktop]$ find /etc/ -name passwd 2>&1 |tee file | wc -l
16
[aaa@qq.com Desktop]$ cat file
find: ‘/etc/pki/rsyslog’: Permission denied
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
5.输入重定向(非交互式生成)
实验环境:超级用户
普通用户切换超级用户的方法
(1)界面退出
(2)gnome-session-quit(会询问,用–force不询问)
符号 | 用途 |
---|---|
< | 单次输入重定向 |
<< | 多行输入重定向 |
实验一:一次输入重定向
echo hello westos > westos ##生成一个有内容的文件
tr 'a-z' 'A-Z' < westos.sh ##把小写转换成大写
HELLO WESTOS ##显示结果
其他实验截图:
实验二:多行录入(记录系统重复的过程)
vim westos.sh
passwd
:wq
sh westos.sh
Changing password for user root.
New password: ##因为passwd命令执行时需要输入密码
##可以用多行输入解决此问题
vim westos.sh
passwd << EOF ##多行录入起始
lee
lee
EOF ##当起始字符再次出现表示录入结束
:wq