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> 抓错误、< 喂输入。