Linux 写内容到文件的几种方式

1. 引言

在 Linux 日常使用和脚本编写中,把内容写入文件是最基础也最高频的操作之一。无论是记录日志、保存配置,还是生成数据文件,掌握多种写入方式能让你在不同场景下选择最顺手、最安全的方法。本文整理了几种常用的写文件方式,从最简单的重定向到进阶的 teedd,并附上对比与注意事项。

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 是结束标记,可以换成任意字符串(如 ENDEOF123),只要首尾一致即可。

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 写入

printfecho 更擅长格式化输出,适合写入带格式的文本。

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 则用于特殊场景。掌握这些方法,能让你在命令行操作和脚本编写中更加得心应手。建议在实际使用中多练习,根据场景选择最合适的方式。

zdl.im

相关推荐
音草1 小时前
Linux 基础指令入门:常用命令、Shell 原理与权限管理
linux
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之邮件验证码发送(SMTP与API方式)
java·数据库·spring
吴声子夜歌2 小时前
Shell编程——函数
linux·运维·shell
电子制造自留地2 小时前
AI服务器PCB的超低损耗材料选型逻辑
运维·服务器·人工智能·科技·制造·科普·pcb工艺
砚底藏山河2 小时前
容错重试与指数退避:网络抖动手抖不再丢数据(魔码量化实战 #04)
java·数据库·python·金融
一技安身2 小时前
【信创】Ollama 手动提取 deepseek-r1:1.5b模型迁移到内网机器
服务器·docker·语言模型
码少女3 小时前
Linux——多路复用之poll模型
linux·服务器·网络
2501_930472443 小时前
云安全自查清单:用腾讯云助手 30 分钟完成一次权限与密钥体检
java·腾讯云
PatrickYao04223 小时前
Linux安装UV
linux·运维·uv