RH124-Linux中的输入输出管理

Linux中的输入输出管理


首先是对于本次实验的环境配置,本次实验不采用root用户而是选用普通用户,在登录普通用户后打开shell并输入命令行,我选择的用户是系统自带的普通用户westos:

find /etc/ -name passwd

执行命令行截图如下:
在这里插入图片描述
在上图中,普通用户的找文件时,因为文件权限的问题,在找文件时有的地方进不去,会出现报错,因此在执行命令行后共产生了两类的输出,一类是红色框,一类是蓝色框,红色框所框定的是错误输出,蓝色框所框定的是正确输出,基于实验现象,对输入输出展开讨论。

一.理解输入输出的定义:

1.字符设备:

字符设备是指在I/O传输中以字符为单位进行传输的设备,例如:键盘,打印机,也可以说是显示字符到屏幕上的设备文件。并且字符设备是内存中开启的一个虚拟设备。

2.stdin[标准输入流]:

输入是指系统外界向系统中传递的信息,其中系统外界向系统中传递数据的方式有三种:
[1]键盘
[2]鼠标
[3]输入命令
stdin在Linux中标号为0

3.stdout[标准正确输出]:

在命令顺利执行完成后产生的字符串,且stdout在Linux中输出标号为1

4.stderr[标准错误输出]:

在命令失败执行完成后产生的字符串,且stderr在Linux中输出标号为2

二.如何管理输入:

输入的定义:外界传递到程序中的信息

1. < 输入重定向:

采用命令 < :

tr 'a-z' 'A-Z' < test

把test文件中的内容定向到tr程序中,上述命令行指将test中所有小写字母替换成大写字母
在这里插入图片描述
同样可以用tr ‘A-Z’ ‘a-z’ < file将file中文本小写转换成大写。

2. << 多行录入:

tr 'a-z' 'A-Z' << EOF ##(字符任意)
test ##此处的test不能表示文件名称,只表示test字符
test1
EOF##当首字母再次出现表示录入结束

在这里插入图片描述

三.如何管理系统输出:

1.输出重定向:

采用文章刚开始时的命令作为例子帮助理解:

命令 效果
find /etc -name passwd > westos.out 重定向正确输出
find /etc -name passwd 2> westos.out 重定向错误输出
find /etc -name passwd &> westos.out 重定向所有输出(包括正确与错误)

[1]" > “重定向正确输出:
在这里插入图片描述
由实验现象可知:重定向正确输出后在shell中显示的是错误输出,但是在westos.out中保留的就是正确的输出。
[2]” 2> " 重定向错误输出:
在这里插入图片描述
由实验现象可知:重定向错误输出后在shell中显示的是正确输出,但是在westos.out中保留的就是错误的输出。
[3]" &> " 重定向所有输出:
在这里插入图片描述
由实验现象可知:重定向错误输出后在shell中不显示,但是在westos.out中保留的就是所有的输出,包括错误的和正确的。
[4]在使用 > 时,输出重定向会覆盖掉之前文件中的内容:在这里插入图片描述
清空文件内容:
在这里插入图片描述
在“ > ”前不加任何字符可以理解为不存在输出,因此覆盖后文件就是空白的。

2.追加:

追加与重定向不同,追加不会覆盖文件内容,依旧用文章刚开始时的命令作为例子帮助理解:

命令 效果
find /etc -name passwd >> westos.out 追加正确输出
find /etc -name passwd 2>> westos.out 追加错误输出
find /etc -name passwd &>> westos.out 追加所有输出

[1]" >> " 追加正确输出:
在这里插入图片描述
由实验现象可知:追加正确输出后在shell中显示的是错误输出,在westos.out中保留的就是原文件中的内容和正确的输出。
[2]" 2>> " 追加错误输出:
在这里插入图片描述
由实验现象可知:追加错误输出后在shell中显示的是正确输出,在westos.out中保留的就是原文件中的内容和错误的输出。
[3]" &>> " 追加所有输出:
在这里插入图片描述
由实验现象可知:追加所有输出后在shell中无显示,在westos.out中保留的是原文件中的内容和所有的输出(包括正确的输出和错误的输出)。
[4]使用" << " 追加时有补充添加效果,而不是像重定向时的覆盖:
在这里插入图片描述
由实验现象可得:红色框为原文件内容,蓝色框为第一次进行追加,追加正确输出后的结果,绿色框为第二次追加,追加所有输出后的结果,发现红蓝绿框所示文件内容在文件中共存,而不是相互覆盖,这一点与重定向不同,因此说明追加只是在添加内容。

echo命令可以用于文本的重定向以及追加,并且在执行时会直接生成文件:

命令 效果
echo test > westos 将test重定向至westos
echo test >> westos 将test追加至westos

在这里插入图片描述
红色框内为使用echo追加以及重定向生成的文件。

3.管道“|”:

把前一条命令的输出变成输入传递到下一条命令进行操作
注:
[1]管道只处理正确输出
[2]2>&1把编号为2的输入转换到编号为1的输出中
[3]tee 复制输出到指定位置
[4]管道在一条命令中可以使用多次

[1]管道只处理正确输出
在这里插入图片描述
实验中find命令执行后shell中显示的是错误的输出(红框所示内容),而正确的输出(2行正确输出)被管道提取后用于运行后面的wc -l的统计(蓝框所示为wc -l的运行结果),所以结果为2
[2]2>&1把编号为2的输入转换到编号为1的输出中,即把错误输出转换成正确输出,并通过管道执行:
在这里插入图片描述
实验现象知,将错误输出转换成正确输出后通过管道执行后结果与所有输出执行后的相同,下方是对比不转换的结果。
[3]tee 复制输出到指定位置:
在这里插入图片描述
tee用于将前一个由管道得到的执行结果复制到file中,后再通过管道执行wc -l的统计。
[4]管道在一条命令中可以使用多次:
在这里插入图片描述
由实验现象得:第一次用wc -l统计行数时与使用管道统计结果均为1626,其效果相同,后面再接管道用wc -l统计时统计的是文本1626,仅占一行所以结果为1,下一个wc -l与前一个相同,也是只有一行,所以统计结果为1,因此说明多个管道符可以按顺序排列使用。

四.TEST:

Q:

在普通用户下完成以下操作:
1.查找/etc/下的passwd文件屏蔽错误输出
2.查找/etc/下的passwd文件正确输出保存到/tmp目录中的westos.out中,错误输出保存到/tmp/目录中的westos.err中
3.查找/etc/下的passwd文件保存所有输出到/tmp目录中的westos.all中并统计输入的行数
4.查找/etc/下的passwd文件统计输出行数并显示输出内容
5.转换/etc/目录中passwd文件中所有字母为大写并统计文件行数
6.请用非脚本交互模式编写文件westos.file内容为:
hello linux
hello westos
hello linux
westos linux is very nice !!

A:

#1:
find /etc -name passwd
#2:
find /etc -name passwd > /tmp/westos.out
find /etc -name passwd 2> /tmp/westos.err
#3:
find /etc -name passwd &> /tmp/westos.all
#4:
find /etc -name passwd | wc -l
#5:
find /etc -name passwd &> task
tr 'a-z' 'A-Z' < task
find /etc -name passwd 2>&1 | wc -l
#6:
cat > westos.file << EOF
hello linux
hello westos
hello linux
westos linux is very nice !! 
EOF

猜你喜欢

转载自blog.csdn.net/weixin_46702804/article/details/112690148