写点什么

Linux 数据流重定向

用户头像
王坤祥
关注
发布于: 2020 年 08 月 17 日
Linux数据流重定向

标准输出(standard output)指的是命令执行所回传的正确的信息,而标准错误输出(standard error output)可以理解为命令执行失败后,所回传的错误信息。 一般情况下,不管正确还是错误信息数据默认的是输出到屏幕上,所以屏幕上是很混乱的。可以通过数据流重定向将stdout和stderr分别传送到其他的文件或者设备去,而分别传送所用的特殊字符如下所示:



  1. 标准输入(stdin):代码为0,使用<或者<<

  2. 标准输出(stdout):代码为1,使用>或者>>

  3. 标准错误输出(stderr):代码为2,使用>或者>>

标准输出和标准错误输出

如果仅存在>,则代表默认代码为1。

  • 1>:以覆盖的方法将正确的数据输出到指定的文件或者设备上

  • 1>>:以累加的方法将正确的数据输出到指定的文件或者设备上

  • 2>:以覆盖的方法将错误的数据输出到指定的文件或者设备上

  • 2>>:以累加的方法将错误的数据输出到指定的文件或者设备上



示例1:将stdout和stderr分别存到不同的文件中去。

find /home -name .bashrc > list_right 2> list_error



示例2:将错误的数据丢弃,屏幕上显示正确的数据

find /home -name .bashrc 2> /dev/null

/dev/null垃圾黑洞设备



示例3:将正确和错误的数据全部写入一个文件

find /home -name .bashrc >list 2>&1
或者
find /home -name .bashrc &> list

标准输入

<意味着将原本需要由键盘输入的数据改由文件内容来替代。

示例1:利用cat命令来创建一个文件的简单流程,了解一下什么是键盘输入

cat > catfile
1
2
3
<==此处按下ctrl+c或者ctrl+d来离开

示例2:利用stdin替代键盘的输入来创建新文件的流程

cat > catfile < ~/.bashrc
--------------------------
ll catfile ~/.bashrc
-rw-r--r-- 1 root root 176 Sep 5 14:10 catfile
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc
# 注意到两个文件大小几一模一样,几乎是使用cp命令复制一份

理解了<后,再来看<<<<代表的是结束输入的意思。举例来讲,我要用cat直接将输入的信息输出到catfile中,且当由键盘输入eof时,本次输入就结束,可以按照如下方式进行:

cat > catfile << "eof"
>1
>2
>3
>eof <==输入该关键字后,立刻就结束输入而不需要输入ctrl + d/c

双向重定向tee

tee命令实现了手动跟踪命令的输出内容,同时又将输出的内容写入文件,确保之后可以用来参考。 例如:

last | tee last.list | cut -d ' ' -f1
# last: View the last logged in users.
# 该范例可以让我们将last的输出存一份到last.list文件中。
ls -l / | tee -a ~/homefile | more
# tee 后直接接文件会被覆盖,如果加以 -a 这个参数则能将信息累加

总结,tee可以让standard output转存一份到文件内并将同样的数据继续送到屏幕上去处理显示。这样,除了可以让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录只用。

另:tee在很多认证考试中有考察。



发布于: 2020 年 08 月 17 日阅读数: 770
用户头像

王坤祥

关注

日拱一卒,功不唐捐。 2017.10.17 加入

不懂热能的低温工程师不是好程序猿

评论 (1 条评论)

发布
用户头像
# 记住

总结,tee可以让standard output转存一份到文件内并将同样的数据继续送到屏幕上去处理显示。这样,除了可以让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录只用。 另:tee在很多认证考试中有考察。

2020 年 08 月 18 日 17:08
回复
没有更多了
Linux数据流重定向