一、系统输入输出的理解
- 运行一个程序时,需要从某个位置读取输入信息,然后CPU处理,最后将输出
显示在屏幕或文件中;其中,某个位置相当于输入设备,屏幕或文件为输出设备。
- 标准输入:stdin,默认是键盘,只能进行读取操作
- 标准输出:stdout,默认是显示屏,只能进行写入操作
- 标准错误:stderr,默认连接是显示屏,只能进行写入操作
二、系统输入输出的管理
1、输出重定向
> ## 重定向正确输出
2> ## 重定向错误输出 &> ## 重定向所有输出注意:重定向会覆盖源文件内容;一般错误会被重定向到/dev/null中
实例:(以下实验必须在student用户下完成)
- 使用命令*** find /ect/ -name passwd > file *** 定向正确输出到file,并使用cat命令查看:
- 使用命令*** find /etc/ -name passwd 2>file.err *** 定向错误输出到file.err
- 命令*** find /etc/ -name passwd &>file.all ***定向所有输出到file中
- 使用命令*** >file *** 进行清空file文件
2、输出追加
>> ##追加正确输出到文件最后
2>> ##追加错误输出到文件最后 &>> ##追加所有输出到文件最后注意:追加不会覆盖源文件,内容会加在源文件末尾
实例:此实例在普通用户下操作
- 使用***find /etc/ -name passwd >> file***命令,把正确结果追加在file文件末尾
- 使用*** find /etc/ -name passwd 2>> file1 ***命令,把错误结果追加在file1中:
- 使用*** find /etc/ -name passwd &>> file2***命令,把所有输出追加在文件file2中:
3、管道符
- 管道的作用:’|’是把前一条命令的输出变成后一条命令的输入
- 注意:
管道只允许正确输出通过;
通过管道的输入将变成输出,而变成输入的这些输出会被第二条命令处理的; 如果需要保存输出内容,那么要复制一份输出,用到的命令是”tee“;使用2>&1可以把stderr转换成stdout。
- 实例:(在普通用户下进行操作)
使用***find /etc/ -name passwd | wc -l ***命令时,则会显示出错误结果,正确结果
通过管道后执行wc -l,同时显示行数,结果如下:
使用*** find /etc/ -name passwd 2>&1 | wc -l ***命令,是错误结果通过管道后,在第
二条命令执行,最终显示结果为6:
使用***find /etc/ -name passwd 2>&1 | tee file | wc -l***命令,先保存一份输出在file
文件中,并输出行数6,结果如下:(使用tee命令会使file中的内容被覆盖):
4、输入重定向
<< ## 重定向输入
实例:重定向输入到文件file中,结果如下:
练习二:
1、显示当前时间,显示格式为hh:mm:ss,并保存到文件time.txt中;
命令:date +%T | tee time.txt
2、显示/etc/passwd 文件的第15-18行内容
命令:head -n 18 /etc/passed | tail -n 4
3、显示/bin中文件包含大写字母的文件,保存在bin_westos_file.txt文件中,并统计个数显示到
屏幕上;
命令:find /bin/ -name *[[:upper:]]* | tee bin_westos_filetxt | wc -l
命令:find /etc/ -name passwd 2>> /dev/null
5、在student用户下查找/etc下passwd文件,正确输出保存到/tem/westos.out,错误输出保存
到/tem/westos.err;
find /etc/ -name passwd > /tem/westos.out 1>/tem/westos.err
6、在student用户下查找/etc下passed文件,显示命令输出,并保存输出到/tem/westos.all中
命令:find /etc/ -name passwd | tee /tem/westos.all