Linux yes 命令详解:自动应答与压力测试的实用技巧

Linux 内置命令 yes 可无限输出字符串,常用于自动应答交互提示与 CPU 压力测试。
`yes` 是 GNU Core Utils 中的极简命令,默认持续向终端输出字母 `Y`,也可输出任意自定义字符串。其最主要的实用价值在于通过管道(`yes | command`)自动应答 pacman、apt 等包管理器的 yes/no 确认提示,省去手动逐次输入的繁琐。此外,将其输出重定向至 `/dev/null` 并后台运行,可制造持续的 CPU 负载,用于简单的压力测试。`yes ''` 则可输出连续空行,应对需要反复按回车才能推进的交互式脚本。尽管功能单一,这个小工具在自动化脚本和系统运维场景中颇为实用,但全自动应答所有提示在生产环境中存在误操作风险,需谨慎使用。
yes 命令是什么
yes 是 GNU Core Utils 标准工具包的一部分,功能看似简单到有点滑稽:它会不停地向终端输出一个字符串,直到你手动终止进程。
直接在终端输入 yes 而不带任何参数,它就会一行接一行地打印字母 Y,永无休止。按下 Ctrl+C 即可终止这个进程。这样一个「无限刷屏」的命令看似毫无意义,但它恰恰是 Unix 哲学中「小工具组合完成大任务」的经典体现。
核心用途:自动应答交互式提示
很多终端命令、脚本乃至程序在执行过程中会向用户抛出确认提示,最典型的就是 yes/no 问题——Y 代表确认,N 代表取消。yes 命令的真正价值,就在于把这些提示统统自动应答为 Y。
以 Arch Linux 上的包管理为例,运行 sudo pacman -Syu 更新系统时,有时会遇到软件包冲突、某个程序已从仓库移除、或某个包需要覆盖另一个包等情况,此时 pacman 会询问你是否继续。如果你不想逐个手动回答,可以把 yes 通过管道传给命令:
yes | sudo pacman -Syu
这样所有 yes/no 提问都会被自动回答为 Y。

同样的思路适用于所有包管理器。在 Ubuntu 或 Debian 上,用 apt-get install 安装软件时如果弹出确认提示,也可以用 yes | 前置来自动确认。

需要提醒的是:无脑对所有提示回答「是」存在风险,可能导致误删或误装。作者本人也明确表示并不推荐在生产环境随意这么做。
配合 rm -i 批量删除
作者分享了一个自己最常用的场景。他把 rm 命令做了别名,默认带上交互标志 -i,也就是每次删除文件前都会提示确认。当执行 rm file1 file2 file3 时,系统会依次弹出三次 yes/no 询问。如果他已经确定这三个文件都要删,就可以用 yes 一次性回答所有删除提示,省去逐个敲键盘的麻烦。
管道(pipe)是 Unix/Linux 中连接多个命令的机制,用 | 符号表示。它将左侧命令的标准输出(stdout)直接接入右侧命令的标准输入(stdin)。yes | sudo pacman -Syu 能生效,正是因为 pacman 在等待用户输入时从 stdin 读取字符——而此时 stdin 已被 yes 源源不断输送来的 Y 占据,程序便「以为」用户在反复按下 Y 键并回车确认。这一机制同样是 cat、grep、awk 等工具组合使用的基础,也是 Unix 哲学「每个程序只做一件事、并通过管道协作」的具体体现。
用 yes 做 CPU 压力测试
yes 还有一个不那么直观但很有意思的用途——测试机器的 CPU 负载。因为它会毫不停歇地生成输出,本身就是个持续占用 CPU 的进程。
yes > /dev/null &
这条命令把 yes 的输出重定向到 /dev/null(系统里专门「吞掉」数据的黑洞),末尾的 & 让它在后台运行。这样你既看不到刷屏,又能让这个进程持续吃 CPU,从而观察机器在负载下的表现。

要结束这个后台进程,可以用 pkill yes,终端会提示 job 1 的 yes 进程已被终止,并显示完整命令。另一种方式是用 kill PID,前提是你知道该进程的 PID。
/dev/null 是 Linux 中的一个特殊字符设备文件,常被称为「黑洞」或「位桶」(bit bucket)。任何写入它的数据都会被系统立即丢弃,读取它则立刻返回 EOF(文件结束符)。将 yes 的输出重定向至此,可以避免终端被大量文本刷屏,同时让进程保持全速运行,使 CPU 持续处于高负载状态。这种方法虽然简单,但只能给单个核心施压;若要对多核处理器进行全负载测试,通常需要并行启动多个 yes > /dev/null & 实例,或使用 stress、stress-ng 等专用压测工具。
自定义输出字符串
yes 并不局限于输出字母 Y,你可以指定任意字符串让它重复打印。例如 yes string 会不断输出单词 string。这在面对非 yes/no 类型的提示时很有用——只要提示的确认答案是固定的某个词,就能用它自动应对。

自动应答「回车确认」
有些程序或 shell 脚本的确认方式不是输入 Y,而是直接按回车。此时单纯的 yes 无法奏效,因为它输出的是 Y 而非换行符。解决办法是让 yes 输出空字符串:
yes ''
用两个中间不含任何内容的单引号,yes 就会不断打印空行,相当于反复按回车键。这对于那些需要连续按回车才能推进的安装程序或脚本来说非常实用。
小结
yes 是一个极简的命令,几乎没有什么标志或选项,但它在自动化脚本、批量确认操作和 CPU 压力测试中都能派上用场。想了解更多细节,在终端输入 man yes 即可查看它的手册页。掌握这类看似不起眼的 Core Utils 小工具,往往能显著提升命令行工作效率。
相关推荐

Meta或推无摄像头智能眼镜Luna 回应隐私争议
据The Information报道,Meta或将推出代号Luna的无摄像头智能眼镜,以回应旗舰款因视频录制功能引发的隐私争议。本文解析这一产品策略及其对可穿戴行业的启示。

vLLM 发布 proto-v0.2.0:内部协议模块迭代
vLLM 项目发布 proto-v0.2.0 标签(vllm-proto 0.2.0),经 verified signature 签名并通过 PR #56538 CI 验证。本文解读该组件级版本发布的工程意义与安全实践。

MCP 2.0深度解析:无状态协议如何重塑AI Agent通信标准
MCP 2.0(Model Context Protocol)深度解析:从有状态到无状态的重大变革、extensions扩展机制、治理成熟化及未来agentic消息原语路线图。了解这一AI Agent通信标准如何演进。