欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

管理Linux中的输入输出

程序员文章站 2024-03-23 22:14:34
...

1.Linux系统中输入输出的定义

1.1 输入:

Stdin[标准输入流],指系统外接向系统中传递的消息,如键盘、鼠标、输入命令

1.2 输出:

stdout[标准正确输出],指命令顺利执行完成之后产生的字符串,stdout在Linux中的输出编号为1
stderr[标准错误输出],指命令失败执行完成之后产生的字符串,stderr在Linux中的输出编号为2

注意:不是所有指令都有输出 (比如:rm -f)

实验1:显示输出 find /etc -name passwd
管理Linux中的输入输出说明:输出结果包含正确输出和错误输出
管理Linux中的输入输出说明: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.out
find /etc/ -name passwd > westos.out
管理Linux中的输入输出实验结果:(westos.out文件包含内容)
正确输出被导出,shell界面只显示错误输出
管理Linux中的输入输出
实验二:重定向错误输出到文件westos.err
find /etc/ -name passwd 2> westos.err
管理Linux中的输入输出实验结果:(westos.err文件包含内容)
错误输出被导出,shell界面只显示正确输出
管理Linux中的输入输出实验三:重定向全部输出到文件westos.all
find /etc/ -name passwd &>westos.all
管理Linux中的输入输出管理Linux中的输入输出实验结果:(westos.all文件包含内容)
全部输出内容导出,shell界面不显示

2.2 重定向对文件的覆盖和清空

(1).重定向会覆盖原文件内容
find /etc/ -name passwd > file
实验环境:普通用户
1.生成一个有内容的文件
管理Linux中的输入输出2.重定向正确输出到文件
管理Linux中的输入输出实验结果:原文件内容被覆盖
管理Linux中的输入输出
(2).重定向可以用来清空原文件内容
> file
实验环境:普通用户
管理Linux中的输入输出
说明:原文件内容被清空

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行
管理Linux中的输入输出追加正确输出后变成3行(包括原内容1行,正确输出2行)
管理Linux中的输入输出追加错误输出后变成17行(包括原内容1行,正确输出2行,错误输出14行)
管理Linux中的输入输出追加全部输出后变成33行(包括原内容1行,正确输出2行,错误输出14行,全部输出16行)
管理Linux中的输入输出

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)界面退出管理Linux中的输入输出
(2)gnome-session-quit(会询问,用–force不询问)
管理Linux中的输入输出

符号 用途
< 单次输入重定向
<< 多行输入重定向

实验一:一次输入重定向

echo hello westos > westos  ##生成一个有内容的文件
tr 'a-z' 'A-Z' < westos.sh   ##把小写转换成大写
HELLO WESTOS                 ##显示结果

其他实验截图:
管理Linux中的输入输出
实验二:多行录入(记录系统重复的过程)

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

管理Linux中的输入输出管理Linux中的输入输出

相关标签: linux