输入输出过程:运行一个程序时,需要从某个位置读取输入信息,然后 cpu 处理,最后将输出显示到屏幕或文件进程通过文件描述符的编号通道来获取输入并输出
编号 通道名称 描述 默认连接 用法
0 stdin 标准输入 键盘 仅读取
1 stdout 标准输出 显示屏 仅写入
2 stderr 标准错误 显示屏 仅写入
输入输出重定向原因:输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。
输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。
为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。
输入重定向
输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。
输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:
$ wc < /etc/passwd
20 23 726
要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题
默认条件下,标准输出和错误输出都是终端,可以把标准输出和错误内容进行重定向:
find /etc -name passwd 1> file ##重定向正确输出
find /etc -name passwd 2> file ##重定向错误输出
find /etc -name passwd &> file ##重定向所有输出&>把所有输出都写入同一个文件
注意: >,2>,&> 都会覆盖源文件内容
>file ##清空file
find /etc -name passwd >> file ##追加正确输出
find /etc -name passwd 2>> file ##追加错误输出
find /etc -name passwd &>> file ##追加所有输出
注意:>> 2>> &>> 不会覆盖源文件内容,会把相应的输出字符方到文件的最后
| 管道,管道的作用是将前一条命令的输出变成管道后命令的输入
ls /etc/passwd | wc -l ##统计ls /bin 命令输出的行数
2>&1:系统中错误的输出是无法通过管道的,用 2>&1 可以把错误的输出编号由2变成1 这样就统计了所有的输出
tee #复制输出到指定位置,即可表示为备份一份date | tee file |wc -l ###tee命令复制date命令的输出到file中,并统计输出行数