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

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

zdl.im

相关推荐
雪落漂泊9 小时前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
文丑颜不良啊9 小时前
LeetCode2741~2760题目解析
java·leetcode
俊俊几年的10 小时前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
星恒随风19 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
金銀銅鐵19 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
吴名氏.20 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent
.痞老板.21 小时前
java ee--多线程(进阶)
java·java-ee
可乐ea1 天前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
深入云栈1 天前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
唐墨1231 天前
linux kernel 比较数据大小的宏定义
linux·算法