输入输出重定向、双向重定向tee
简单一句话概括:"使用输入重定向能把文件导入到命令中,而输出重定向则是能够把原本要输出到屏幕的数据信息写入到指定文件中"
重定向 详解 :<https://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html>
Linux启动后,会默认打开3个文件描述符(通过分配的一个数字,实现对文件的读写操作),分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2
Linux命令执行过程的数据传输情况:
standard intput:默认从键盘输入,为0时表示从其他文件或命令的输入
standard output:默认输出到屏幕,为1时表示输出到文件
standard error output:默认输出到屏幕,为2时表示输出到文件
标准输入(stdin):代码为0,使用<或<< |
标准输出(stdout):代码为1,使用>或>> |
标准错误输出(stderr):代码为2,使用2>或2>> |
系统默认存在/etc/crontab文件,却无/etc/crontab/vbird这个文件,执行"cat /etc/crontab /etc/crontab/vbird"这个命令,cart会进行:
①标准输出:读取/etc/crontab后,将该文件内容显示到屏幕上
②标准错误输出:因为无法找到/etc/crontab/vbird,因此在屏幕上显示错误信息
通过数据流重定向分别将
标准输出("正确"的输出数据)输出/存放到ist1_right文件中(通过>),
标准错误输出("错误的"输出信息)输出/存放到list2_error文件中(通过2>)
对于输出重定向符有这些情况:
符号 |
作用 |
命令 > 文件 |
将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 |
将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 |
将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 |
将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1 或命令 &>> 文件 |
将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
2>&1的含义:
<http://blog.csdn.net/ggxiaobai/article/details/53507530>
<https://www.cnblogs.com/zhenghongxin/p/7029173.html>
错误输出重定向:命令 2> 文件(若该文件不存在,系统会自动创建)
标准输出重定向:命令 > 文件
linuxprobe这个文件是真实存在的,即使用标准输出即可将数据写入到文件中,而错误输出的重定向则不行,依然会把信息输出到了屏幕上
将标准输出与错误输出共同写入到文件中(原文件信息保留,追加到后面)
(&>可实现清空后再写入)
将错误信息直接忽略(不显示、不存储):黑洞设备/dev/null可以"吃掉"任何导向这个设备的信息
追加写入:命令 >> 文件
对于输入重定向有这些情况:
符号 |
作用 |
命令 < 文件 |
将文件作为命令的标准输入 |
命令 << 分界符 |
从标准输入中读入,直到遇见"分界符"才停止(内联输入重定向) |
命令 < 文件1 > 文件2 |
将文件1作为命令的标准输入并将标准输出到文件2 |
|
|
命令 < 文件:将/etc/passwd文件作为wc命令的标准输入,相当于命令"cat /etc/passwd | wc -l"统计行数(统计用户个数)
用stdin替代键盘的输入以创建新文件(将.bashrc文件作为cat命令的标准输入并输出到创建的catfile文件中(类似cp命令复制的一般)):命令 < 文件1 > 文件2
命令 << 分界符:用cat命令直接将输入的信息输出到catfile中,且当由键盘输入"eof"分界符(ctrl+d)时输入才停止
双向重定向:tee(T,T型水管接口)命令
tee会同时将数据流送往文件与屏幕。
而输出到屏幕的,是stdout,且可以让下个命令继续处理
选项:
-a:以累加(append)的方式,将数据加入文件中(tee命令默认清空覆盖)
参考资料:
一个优秀的linux博客: <http://www.cnblogs.com/chengmo/>