一切皆是文件

•Unix/Linux的基本思想
-普通文件、目录、键盘、鼠标、……都是以文件的形式存在
-要访问硬件设备,必须找对应的设备文件

I/O交互设备

•标准输入:从此设备接收用户输入的数据
•标准输出:通过此设备向用户报告正常的命令输出结果
•标准错误:通过此设备报告执行中的出错信息
类型 设备文件 文件描述号 默认设备
标准输入 /dev/stdin 口 键盘
标准输出 /dev/stdout 曰 显示器
标准错误输出 /dev/stderr 回 显示器

stdout与stderr

•关于命令的执行结果
-运行成功(正常),其屏幕信息报告给 stdout 设备
-运行失败(异常),其屏幕信息报告给 stderr 设备
[root@svr5~]# Is -Id /rootx /root
ls:无法访问/rootx:没有那个文件或目录 //标准错误(stderr)信息
dr-xr-X— 35 root root 4096 1月 20 15:36 /root //标准输出(stdout)信息

什么是重定向

•重新指定命令执行时I/O设备的方向
-不使用默认的键盘、显示器
-改用指定的文本文件

重定向的类型

image.png

重定向输入

•键盘输入–>文件输入
-比如,使用 mail 命令发电子邮件时
[root@svr5~]# vim /root/mail.txt //提前写好邮件内容
Dear Jerry,
Hello:.
[root@svr5 ^]# mail -s’A Test Mail’ root@localhost </root/mail.txt
//读取邮件并发送

重定向输出

•输出到显示器–>输出到文件
一比如,需要保存某个命令输出的结果时
[root@svr5~]# echo ‘search example.com’>/etc/resolv.conf //覆盖目标文件
[root@svr5~]# cat /etc/resolv.conf
search example.com
[root@svr5~]# echo ‘nameserver 8.8.8.8’>> /etc/resolv.conf //追加到目标文件

[root@svr5~]# cat /etc/resolv.conf
search example.com
nameserver 8.8.8.8

重定向错误

•输出到显示器–>输出到文件
一比如,需要记录某个命令的报错信息时
[root@svr5 ~]#Is -ld /rootx /root 2 > /root/err.log //只记录出错信息
dr-xr-x—.36 root root 4096 1月2 17:05/root
[root@svr5~]# cat /root/err.log
ls:无法访问/rootx:没有那个文件或目录

混合重定向

•将正常、错误输出分别/合并重定向
-比如,需要区分命令输出,或合并输出的信息时
[root@svr5~]# Is -ld /roltx /root >/root/ls.log 2>/root/err.log //分别记入不同文件
[root@svr5~]# cat /root/ls.log
dr-xr-x—. 36 root root 4096 1月 2017:10 /root
[root@svr5~]# cat /root/err.log
ls:无法访问/rootx:没有那个文件或目录
[root@svr5~]# Is -ld /rootx /root &>/dev/null //忽略所有输出
等同于>/dev/null 2>&1 (2>&1错误输出合并到标准输出里面然后标准输出又重定向到null文件里面)