一、系统中输入输出的管理
1. 理解系统的输入输出
- 系统运行一个程序时,需要从某个位置读取输入信息,然后经过cpu处理最后将输出显示到字符设备上,进程通过文件描述的编号通道来获取输入并输出(字符设备所在的目录是 / dev / pts)
- 输入设备: 就是键盘、鼠标和一些硬件设备在系统输入的字符
- 输出设备: 就是系统接收到我们想要实现的命令后,经过进程的处理产生字符并且输出到屏幕上
如图:
- date字符存储在内存
- 存储在字符显示设备文件
测试硬盘运行速度:
dd if=/dev/zero of=/mnt/file bs=1M count=1000
测试内存运行速度:
dd if=/dev/zero of=/dev/shm/file bs=1M count=1000
- 字符显示设备(/dev/pts/文件)
- 【root@××××× ×××~】#date > /dev/pts/1 |将显示的内容重定向显示到1字符显示设备
2. 管理输入输出的符号
2.1 shell输出种类
正确输出1
错误输出2
普通用户下:
符号 | 用法 |
---|---|
< | 单行输入 |
<<EOF | 多行输入<<EOF开始录入直到再次出现EOF结束 |
2.2 输出重定向
符号 | 用法 |
---|---|
> | 定向正确输出 |
2> | 定向错误输出 |
&> | 定向所有输出 |
> file | 清空文件 |
>> | 追加 |
* 注:重定向会覆盖原来文件内容,此实验必须在普通用户模式下进行
例子:
find /etc/ -name passwd > file.out
find /etc/ -name passwd 2> file.err
find /etc/ -name passwd &> file.all
于是:
建立文件的方式:
touch file{1…100} 建立100个文件
vim file2
gedit file3
>> file4
添加内容 echo:
[root@foundation8 ~]# echo hahahah
hahahah
(1) find /etc/ -name passwd > file 定向正确输出到file
- su - 用户 可以高级用户切换到低级用户,但是要退出exit
(2) find /etc/ -name passwd 2> file 定向错误输出到 file
(3) find /etc/ -name passwd &> file 定向所有输出到file
2.3 输出追加
符号 | 用法 |
---|---|
>> | 追加正确输出到文件最后 |
2>> | 追加错误输出到文件最后 |
&>> | 追加所有输出到文件最后 |
- 注意:原文件不会被覆盖
(1) ==find /etc/ -name passwd &>> file==追加所有输出到file
3.管道的应用
管道: 把前一条命令的输出变成后一条命令的输入
- 管道只允许正确输出通过
- 通过管道的输出将会变成输入,而变成输入的这些输出是会被第二条命令处理的
- 如果需要保存输出内容,那么需要复制一份输出,用到的命令是“tee”
(1)find /etc/ -name passwd | wc -l 结果为2,因为错误输出不能通过管道
(2) find /etc -name passwd 2>&1 | wc -l 结果为19,因为编号为2的输出被“2>&1”转换为编号1
- 注意:“2>&1” 将一个标准错误输出重定向到标准输出 注释:1代表标准输出 2代表错误输出
(3) find /etc -name passwd 2>&1 | tee file | wc -l 保存一份输出到file再统计行数
- wc -l 行数
- wc -w 单词数
- wc -c 字节数
- wc -m 字符数
4. 输入重定向
- 此模式必须在root超级用户模式下才能成,且以EOF结束才可以
单行输入重定向:
tr ‘a-z’ ‘A-Z’ < file 将文件里的小写字母转成大写
多行重定向(脚本):
[root@xxxx xxx~]# cat westos.sh
date ##日期
cal ##月日历
passwd << EOF
hahah
hahah
EOF
[root@xxxx xxx~]#
练习题::
显示文件 /etc/passwd 的15到18行
cat -n /etc/passwd awk ‘NR>=15&&NR<=18{print}’
sed -n 15,18p /etc/passwd