yes 命令简介
yes 是一个在 Linux 和 Unix-like 系统中非常简单但又极其有用的命令行工具,它的核心功能非常单一:持续不断地输出指定的字符串,直到被手动中断。

如果不带任何参数运行 yes,它会默认无限循环输出 y 后跟一个换行符。
$ yes y y y y y ...
你可以通过按下 Ctrl + C 来停止这个无限循环。
基本语法
yes [OPTION]... [STRING]...
[OPTION]...:可选的命令行选项。[STRING]...:要重复输出的字符串,如果省略,则默认为y。
常用选项
yes 命令的选项很少,最常用的就是:
| 选项 | 全称 | 描述 |
|---|---|---|
--help |
显示帮助信息并退出。 | |
--version |
显示版本信息并退出。 |
实际应用场景
yes 命令本身看起来很简单,但它在很多自动化场景中扮演着“大显身手”的角色,它的主要用途是自动回答交互式程序的“是/否”问题。

场景1:自动化安装(最常见的用途)
很多软件的安装脚本在执行过程中会询问用户是否继续,"Do you want to continue? [y/N]"。
假设你有一个名为 install.sh 的脚本,它会询问你是否确认安装:
#!/bin/bash echo "This will install the software. Are you sure? [y/N]" read answer # ... 安装逻辑 ...
你可以使用 yes 命令来自动回答 y,从而实现无人值守的自动化安装。
# yes 命令会持续不断地向 install.sh 输入 "y",直到安装完成或脚本退出 yes | ./install.sh
工作原理:

yes命令产生一个持续的y\n流。- 管道符 将这个流作为
./install.sh的标准输入。 - 当
install.sh询问问题时,它会从标准输入读取,并自动得到y作为答案,从而继续执行。
场景2:删除大量文件
rm 命令在尝试删除只读文件时,可能会询问是否要强制删除。
# 删除一个目录及其下所有内容,包括只读文件 rm -r my_directory/
系统可能会输出类似 rm: remove write-protected regular file 'some_file'? 的提示并等待你的输入。
你可以用 yes 来自动回答 y:
yes | rm -r my_directory/
场景3:格式化磁盘或分区
mkfs 或 fdisk 等命令在执行危险操作(如格式化)时,通常会要求用户确认,以防止误操作。
# 格式化一个磁盘分区,会要求确认 mkfs.ext4 /dev/sdb1
你会看到类似 This will destroy any data on /dev/sdb1. Proceed? (y/n) 的提示。
使用 yes 可以自动确认:
yes | mkfs.ext4 /dev/sdb1
场景4:回答非“是/否”的问题
yes 并不局限于回答 y,你可以指定任何字符串来回答问题。
一个程序可能会问 "Do you want to save changes? (yes/no)"。
# 自动回答 "yes" yes yes | ./my_program
或者,一个程序可能要求你输入一个默认值,"Enter your name [John Doe]:"。
# 自动输入 "John Doe" yes "John Doe" | ./my_program
场景5:生成测试数据
虽然这不是其主要设计目的,但你可以利用 yes 快速生成大量重复的文本数据。
# 生成一个包含 1000 行 "test data" 的文件 yes "test data" | head -n 1000 > test_file.txt
yes "test data":持续输出 "test data"。| head -n 1000:从管道中只取前 1000 行。> test_file.txt:将结果输出到文件中。
使用注意事项
- 危险性:
yes是一个“无脑确认”工具,在执行yes | rm -rf /这样的命令时要极度小心,因为它会自动确认所有危险操作,一旦执行,数据将无法恢复。 - 滥用:不要在不需要确认的命令上使用
yes,这会产生不必要的输出和资源消耗。 - 替代方案:很多现代的安装脚本和工具提供了命令行选项(如
-y,--yes,--non-interactive)来跳过交互式提示,这通常是比使用yes更清晰、更安全的选择。apt-get有-y选项。
# 推荐方式:使用工具自带的 -y 选项 sudo apt-get install -y some_package # 不推荐方式:使用 yes yes | sudo apt-get install some_package
| 特性 | 描述 |
|---|---|
| 功能 | 持续输出指定字符串,默认为 y。 |
| 核心用途 | 自动化交互式程序的“是/否”确认。 |
| 优点 | 简单、轻量、强大,适用于各种脚本和自动化任务。 |
| 缺点 | 危险性高,容易误操作,应优先考虑使用程序自带的非交互式选项(如 -y)。 |
| 常用组合 | yes | <some_command> |
| 停止方式 | Ctrl + C |
yes 是 Linux 工具箱中一个看似简单但功能强大的“胶水”命令,是构建自动化脚本时不可或缺的一员。
