1. 引言
在 Linux 日常使用和脚本编写中,把内容写入文件是最基础也最高频的操作之一。无论是记录日志、保存配置,还是生成数据文件,掌握多种写入方式能让你在不同场景下选择最顺手、最安全的方法。本文整理了几种常用的写文件方式,从最简单的重定向到进阶的 tee 和 dd,并附上对比与注意事项。
2. 使用重定向符写入
重定向是 Shell 中最直观的写文件方式,适合把命令输出或一段文本直接写入文件。
2.1 覆盖写入(>)
使用 > 会把内容写入文件,如果文件已存在则清空后覆盖。
bash
echo "hello world" > test.txt
也可以把任意命令的输出写入文件:
bash
ls -l > file_list.txt
2.2 追加写入(>>)
使用 >> 会在文件末尾追加内容,不会清空原有内容。
bash
echo "append line" >> test.txt
2.3 多行文本写入
使用 cat 配合 heredoc(<<EOF)可以一次性写入多行内容:
bash
cat > test.txt <<EOF
第一行
第二行
第三行
EOF
如果希望追加多行,把 > 换成 >> 即可:
bash
cat >> test.txt <<EOF
追加的一行
追加的另一行
EOF
注意:
EOF是结束标记,可以换成任意字符串(如END、EOF123),只要首尾一致即可。
3. 使用 tee 命令
tee 的特点是同时输出到屏幕和文件,适合在终端操作时既想看到结果又想保存到文件的场景。
bash
echo "hello" | tee test.txt
默认 tee 会覆盖文件,使用 -a 参数追加:
bash
echo "hello again" | tee -a test.txt
tee 也支持一次写入多个文件:
bash
echo "hello" | tee file1.txt file2.txt
4. 使用 printf 写入
printf 比 echo 更擅长格式化输出,适合写入带格式的文本。
bash
printf "姓名: %s\n年龄: %d\n" "张三" 25 > info.txt
追加写入同样使用 >>:
bash
printf "城市: %s\n" "北京" >> info.txt
5. 使用 dd 命令
dd 通常用于复制和转换数据,也可以用来写入内容,适合处理二进制数据或需要精确控制字节数的场景。
bash
echo "hello" | dd of=test.txt
追加写入使用 oflag=append:
bash
echo "world" | dd of=test.txt oflag=append conv=notrunc
注意:
dd写文件时默认会截断文件,追加时必须加上oflag=append conv=notrunc。
6. 使用编辑器写入
在交互式场景下,也可以直接用文本编辑器创建或修改文件:
bash
vim test.txt
# 或
nano test.txt
这种方式适合手动编辑,不适合脚本自动化。
7. 方式对比与选择建议
| 方式 | 适用场景 | 覆盖/追加 | 是否显示到屏幕 |
|---|---|---|---|
> / >> |
简单文本、命令输出 | 都支持 | 否 |
tee |
需要同时看输出并保存 | 都支持 | 是 |
printf |
格式化文本 | 都支持 | 否 |
dd |
二进制、精确字节控制 | 都支持 | 否 |
| 编辑器 | 手动编辑 | 手动控制 | 是 |
选择建议:
- 日常写简单文本,优先用
echo+ 重定向; - 需要格式化输出,用
printf; - 想在终端看到结果同时保存,用
tee; - 处理二进制或需要精确控制写入长度,用
dd。
8. 注意事项
- 使用
>覆盖写入前,务必确认文件内容不再需要,避免误删数据; - heredoc 的结束标记必须顶格写,不能有前导空格;
- 写入系统关键文件(如
/etc下的配置)前,建议先备份; - 涉及权限不足时,可使用
sudo,但要注意安全风险。
9. 总结
Linux 写文件的方式灵活多样,重定向适合日常快速写入,tee 适合边看边存,printf 擅长格式化,dd 则用于特殊场景。掌握这些方法,能让你在命令行操作和脚本编写中更加得心应手。建议在实际使用中多练习,根据场景选择最合适的方式。