首页 / Linux 命令行入门教程 / 24. 标准流与重定向

Linux 命令行入门教程

24. 标准流与重定向

本教程共 90 篇 · 第 24 篇

24. 标准流与重定向

命令运行时,数据在三条”流”里流动。理解它们,重定向就通透了。

标准输入(stdin)是命令吃进来的数据,默认来自键盘。标准输出(stdout)是正常结果,默认打到屏幕。标准错误(stderr)是报错信息,也默认打到屏幕。

重定向就是改变这些流的去处。最常见的是 >:把 stdout 写进文件,而不是屏幕。

ls > list.txt

这条命令屏幕上什么都不显示,结果全进了 list.txt

Warning

> 会清空目标文件再写入。 如果 list.txt 原来有内容,一条 > 就全没了。要保留原内容追加,用 >>

追加 >>

>> 把输出接到文件末尾,不破坏已有内容:

echo "新的一行" >> list.txt

重定向错误 2>

想单独捕获报错,用 2>(2 是 stderr 的编号):

ls nope 2> error.log

屏幕上看不到错误了,它们都进 error.log。把正常和错误都存下来:

command > out.log 2>&1

输入重定向 <

< 让命令从文件读,而不是键盘:

sort < list.txt

多行输入 <<

here-doc 一次喂入多行,常用来写配置文件:

cat > config.txt <<EOF
name = app
port = 8080
EOF

EOF 是结束标记,遇到它单独成行就停止。标记名随便起。

小结:stdin/stdout/stderr 是三条流。> 覆盖、>> 追加、2> 抓错误、< 喂输入。