一、核心概念:I/O 重定向
Linux 系统默认会打开 3 个标准文件流:
-
stdin (标准输入,文件描述符 0 ):默认从键盘读取
-
stdout (标准输出,文件描述符 1 ):默认输出到显示器
-
stderr (标准错误,文件描述符 2 ):默认输出到显示器
系统默认打开这 3 个流,是为了让程序能直接和用户交互,不需要手动打开/关闭基础设备。
二、输出重定向( > / >> )
bash
echo "helloworld"
默认向显示器文件里面输出helloworld
而通过重定向,可以往任意普通文件里面输入
- 覆盖重定向 >
bash
echo "helloworld" > hello.txt
-
如果 hello.txt 不存在 → 自动新建文件
-
如果文件已存在 → 先清空原有内容,再写入新内容
-
效果:原本要输出到显示器的内容,被改写到文件里。
- 追加重定向 >>
bash
echo "helloworld" >> hello.txt
-
文件不存在 → 自动新建
-
文件已存在 → 在文件末尾追加内容,不清空原有内容
-
效果:多次执行会在文件里累积多行内容。
三、输入重定向( < / << )
bash
cat
会阻塞,然后你输入什么,它立刻打印什么。
cat 本来的作用是:把文件内容打印到屏幕。
但不加文件名 时:cat 会默认从「键盘输入」读取内容,然后直接原样输出
1.输入重定向 (<): 从文件读取内容作为命令的输入,而非键盘。
bash
cat < hello.txt
用 < 后,改为从 hello.txt 读取数据
效果:等价于 cat hello.txt ,直接把文件内容打印到屏幕。
2.Here Document (<<): 直接在命令行中指定一个结束符,将两个结束符之间的多行文本作为输入。
bash
cat > note.txt << EOF
第一行内容
第二行内容
EOF
# 将 EOF 标记之间的两行文本写入 note.txt