一、输入输出使用到的系统资源
1、字符设备(Character Devices)
什么是字符设备
字符设备是 Linux 中的一类设备,支持以字符为单位进行数据传输。与块设备不同,字符设备不需要缓 冲区,即数据是逐字节直接传递的。典型的字符设备包括串口、键盘、鼠标、伪终端等。
字符设备的用途与典型应用场景
字符设备的主要用途是与硬件直接交互,比如读取传感器数据或控制某些外设。典型场景包括
- 提供用户空间与硬件交互的接口。
- 模拟设备,用于调试或测试。
- 创建自定义的和应用层通信的方法。
常见的字符设备文件
终端设备
/dev/tty #当前终端
/dev/tty0、/dev/tty1、/dev/tty2 #系统的虚拟控制台
输入输出设备
/dev/sda、/dev/sdb #硬盘设备
/dev/sr0、/dev/scd0 #光驱和CD-ROM
/dev/null #空设备,相当于黑洞,写入的数据都会被丢弃
/dev/zero #零设备,读取时会返回无限多的零字节
/dev/random和/dev/urandom #随机数生成器。
伪终端
/dev/pts/* #伪终端设备,用于终端仿真
2、程序的输入输出
程序的输入输出包含的信息有:
stdio | 标准输入,编号为0 |
stdout | 标准正确输出,编号为1 |
stderr | 标准错误输出 |
程序在开启后会在/proc/pid/fd/这个目录中利用系统中的输入输出设备文件在此目录中建立用于处理输 入输出字符的设备文件
二、管理系统中的输入输出
1.什么是重定向?
将原本要输出到屏幕上的内容,重新输入到其他设备中或文件中
重定向类型包括
- 输入重定向
- 输出重定向
2.输入重定向
指定设备(通常是文件或命令的执行结果)来代替键盘作为新的输入设备
tr 'a-z' 'A-Z' < test
将test中的所有字母输入给tr命令,将其中的小写字母转换为大写字母
在test1.sh文件中写入以下
tr 'a-z' 'A-Z' <<EOF
test
test1
EOF
注意:其中的EOF可更换成任意字符,其作用为标志输入的开始,结尾的EOF标志输入的结束。
相关例题:Linux第二章第三章练习-CSDN博客
3.输出重定向
将原本要输出在屏幕上的结果放到指定的设备(通常是文件)
重定向作用
- 当屏幕输出的信息很重要,而且希望保存重要的信息备份
- 不干扰屏幕的使用,例如ping baidu
- 储存错误/报错日志
- 定时任务的运行结果
- 执行一个命令,把报错信息丢弃到/dev/null
- 执行一个命令,可能报错和正确的输出并存,类似错误日志与标准正确日志需要分别输出至不同的文件
输出重定向的类型
类型符号 | 作用 |
> | 重定向正确输出 |
2> | 重定向错误输出 |
&> | 重定向所有输出 |
重定向正确输出
find /etc -name passwd > test.out
重定向错误输出
find /etc -name passwd 2> test.err
注意因为这里没有错误输出,所以test.err文档中没有内容
重定向所有输出
find /etc -name passwd &> test.all
注意:
输出重定向会覆盖源文件内容
追加定向类型
追加定向类型符号 | 作用 |
>> | 追加正确输出到文件 |
2>> | 追加错误输出到文件 |
&>> | 追加所有输出到文件 |
还是由于没有错误输出,所以文档中未能显示追加效果
三、管道 |
管道在Linux中是一种特殊的文件类型,它在内存中创建一个缓冲区,用于存储一个命令的输出和另一个 命令的输入。当使用管道连接命令时,前一个命令的标准输出(stdout)会被重定向到管道的写端,而 后一个命令的标准输入(stdin)会被连接到管道的读端。
统计/bin 目录中有多少文件
ls /bin/ | wc -l
可以让我们快捷的统计bin目录下的文件数量
2>&1
当使用管道时,只有正确输出会被管道处理,错误输出是无法通过管道的,如果想让管道处理错误输出,需要把错误输出放到正确输出的设备中,2>&1就是用来完成此操作的。
统计find命令输出结果的行数
find /etc/ -name passwd 2>&1 | wc -l
注:find /etc/ -name passwd 正确输出两条,没有错误输出,所以wc输出行数为2。
注意:管道只能让正确输出通过
tee
当输出通管道后,内容就被管道处理了,如果行看到输出内容需要对输出内容进行复制然后在通过管道处理
find /etc -name passwd 2>&1 | tee test.all | wc -l
相关练习:Linux第二章第三章练习-CSDN博客