标准输入(stdin)
标准输出 (stdout)
标准错误输出 (stderr)

Centos
什么是重定向?

重定向是指输入输出设备使用其他文件代替,改变原来的默认输入输出设备。

Centos
什么是标准的输出,举个例子:

~]# ls / \\能返回正确的结果,这叫标准的输出

Centos
什么是标准的错误输出,再举个例子:

~]# lss / \\返回一个错误的结果,这叫标准的错误输出。

Centos
运行某个命令时,系统会为该命令创建进程,进程对应就是系统的服务,表现为某些文件。当运行某个命令时,会在/proc/1234/fd/目录下,创建输出的代码,0、1、2、3 (文件描述符) \1234为系统为命令创建的进程好。
创建的输出代码,0、1、2、3 (文件描述符) 可以输出到显示器,也可以输出到某个文件,这些可以定义的。默认情况下,0为输入设备,1为标准输出,2为标准错误输出。

一切皆文件,无论是键盘还是显示器,对应的也是设备文件。

下面举个例子,如何查看进程号。

~]# tail -f etc\passwd 注意,要加上-f的参数,不然命令马上运行完毕,查看不了进程。

Centos
然后按ctrl+z,让该进程转到后台运行。然后使用PS命令查看进程。

Centos
接着,可以使用 ~]# ls /proc命令查看有没有12239

Centos

然后,进入进程的文件夹查看当前进程的输入输出设备。

~]#cd /proc/12239/fd/

Centos
可以看到,该进程的0,1,2代码 (文件描述符) 输入输出设备均为tty1, 代码3为操作的硬盘文件。

如果同一个命令操作多个文件,也会显示为多个进程。

(文件描述符) 0,1,2系统已经定义好了,可以使用~]# ls -l /dev/std* 进行查看

Centos
重定向标准输出

将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上。

例子 :~]# date >xwz \\将命令输出到xwz的文件上,后执行的命令会覆盖该文件的内容。
上面的正确写法应该是 ~]#date 1>xwz \\这是将标准输出重定向到xwz这个文件上。
重定向标准错误输出
如果是标准错误输出重定向,则使用~]#dateee 2>xyz \将标准错误输出重定向xyz这个文件上。
如果执行的命令,同时有标准的输出和标准的错误输出,可以使用~]#commnd 1>xwz 2>xyz \将标准输出和标准错误输出分别重定向到两个文件中去。

~]# commnd &>abc \\将标准输出和标准错误输出重定向到同一个文件中去。
也可以将两个文件同时重定向到同一个文件:
~]# echo 12345 >a
~]# echo abcde >b
~]# cat a b>c

将命令执行的结果追加输出到指定的文件上。 例子:~]# date >>xwz \将命令输出追加到xwz的文件上,后执行的命令会不会覆盖该文件的内容。

重定向标准输入
< 将命令中接收输入途径由默认的键盘更改为指定文件。

set -C禁止重定向覆盖。此时如果想强制覆盖,可以加上| ,例如:~]#echo 123456>| a
set +C关闭禁止重定向覆盖。