当Linux执行一个程序的时候,会自动打开三个流,标准输入(standard input),标准输出(standard output),标准错误(standard error)。比如说你打开命令行的时候,默认情况下,命令行的标准输入连接到键盘,标准输出和标准错误都连接到屏幕。对于一个程序来说,尽管它总会打开这三个流,但它会根据需要使用,并不是一定要使用。
每个进程都会默认打开3个文件描述符,即0、1、2。其中0代表标准输入流、1代表标准输出流、2代表标准错误流。通常标准输入流对应着键盘的设备文件、标准输出流和错误流对应着显示器的设备文件。在编程中通常使用宏STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO分别来代表0,1,2。
假设说我们不想让文本流流到屏幕,而是流到另一个文件,我们可以采用重新定向(redirect)的机制。
标准输出(standard output)和 标准错误(standard error), 默认是连接至屏幕;
标准输入(standard input) 默认是连接至键盘;
可以使用IO重定向(redirection), 改变输入, 输出的发送位置;
1. 标准输出
标准输出重定向, 使用重定向操作符(“>”), 把程序输出至文件, 默认是从文件头部重写写入;
可以使用”> test.txt”,清空文本信息;
使用”>>”, 将文件添加至文本尾部;
2. 标准错误
标准错误重定向, 使用”2>”, 进行输出, 由于文件流包含三种, 即”输入, 输出, 错误”, 对应”0, 1, 2″;
即”>”, 即等于”1>”, 标准输出;
处理不想要的错误输出, 使用”2> /dev/null”, 隐藏一个命令的’错误信息.
同时显示输出和错误, 标准错误是后于标准输出产生, 即要先使用”>”, 再使用”2>&1″, 命令:”xxxx > xxxx 2>&1″;
也可以使用”&>”, 直接输出标准输出和错误, 命令:”xxxx &> xxxx”, 较新版bash提供.
如图:
3. 标准输入:
cat命令(ConcATenate), 本意是链接文件, cat xxxx[1] xxxx … > xxxx[end];
1. 如果只使用第一个参数, 即把信息输出至屏幕, 可以输出短的文件, 不会换行;
2. 如果只使用cat, 则从键盘获取信息, 输出至屏幕;
3. 如果只使用最后一个参数, 即cat > xxxx, 即从键盘输入, 存储入文件;
4. 如果都使用, 则是连接文件, 把文件顺次连接, 并存入结尾文件;
5. 可以使用”<“, 即”cat < xxxx”, 则是重定向, 把输入的源, 变为文件, 和直接输入文件意义相同.