“是”命令的意义是什么?


39

yes在unix / linux中有一个命令,基本上可以无限地打印ystdout。它的目的是什么,它有什么用?


这里还有一些额外的可能性。

1
可能重复`yes'命令的意义是什么?...(将此标记为重复项是因为更好地提出了另一个较新的问题,并为之提供了更好的答案)。
Aditya


Answers:


41

yes可以用于对任何原本要求一个命令的命令发送肯定(或否定;例如yes)响应,从而使该命令以非交互方式运行。

yes命令和head命令一起可用于生成大容量文件以进行测试。

它还可以用于测试系统处理高负载的能力,因为对于单个处理器的系统,使用yes会导致100%的处理器使用率(对于多处理器系统,必须为每个处理器运行一个进程)。例如,这对于调查当处理器以100%运行时系统的冷却系统是否有效将很有用。

在2006年,yes命令得到宣传,因为它可以测试用户的MacBook是否受到间歇性关机综合征的影响。通过在Mac OS X下通过终端运行两次yes命令,用户可以最大化其计算机的CPU,从而查看故障是否与热量有关

通过维基百科:http : //en.wikipedia.org/wiki/是(Unix)


9
对于额外的损坏,请尝试yes `yes yes`
sendmoreinfo

3
@sendmoreinfo Evil
Tobias Kienzler 2013年

哦,那是一个不错的压力测试。刚尝试过,然后跑到我的同事那里寻求新的vm xD
Toastgeraet

17

这可能是一个有争议的观点,但是在我看来,这是对命令行工具中错误的用户界面的丑陋修复

一些命令行工具会提示用户询问问题,并且没有非交互式运行的选项。想像例如

$ frobnicate *
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
...

由于问题的答案来自标准输入,因此快速解决此问题的方法是使应用程序y\n连续输出字符串,这正是这样yes做的结果。Unix 管道可用于将此输出作为输入发送到给定命令。

$ yes | frobnicate

这种方法的问题之一是yes无法检查它正在回答的问题:

frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
format device /dev/sda1? (y/n) y
frobnicate file c.txt? (y/n) y

更好的解决方案(如果可用)是一种非交互运行的特定选项,例如rm -fapt-get -y。这允许在应用程序中编码更明智的行为。


1
我阅读了所有其他答案。我完全同意您的修正,尽管它确实可以有效地测试计算机对高CPU负载的响应。
2015年

6
当然,您可以使用专有软件“ Microsoft Windows”来测试计算机对高CPU负载的响应,但是“是”是开放源代码。
2015年

1
它是最美丽的丑陋修复方法之一
-Jezzamon,

4

yes当我解压缩多个包含相同名称的同一个文件的多个.zip文件时,我会喜欢使用,并且询问每种情况下该怎么做(例如许可协议)。

yes | for z in *.zip; do unzip "$z"; done 

2

只是碰到了另一种用途:喜欢用除零以外的其他模式擦除硬盘(例如:dd if = / dev / zero of = / dev / sdd bs = 1M)并使用“ yes”:

yes UUUUUUUUUUUUU > /dev/sdd


1

同事以新颖的方式使用它输入密码

yes password | passwd

passwd如果用户不是root用户超级用户,将首先询问旧密码,并且除非输入正确的密码,否则它将不会继续。因此,无论用户是root用户还是password旧密码,都不会更改。
2013年

确实是@MichaelKonietzka。但是根据您提到的条件,它仍然是一个有用的用例。
frogstarr78

3
除非这会以明文形式保留在历史中。Crazeyyy。
Gleno 2014年

3
bash中的@Gleno,您可以在其前面加上一个空格以防止其被记录(如stackoverflow.com/q/640403/118153所示
Iiridayn 2014年

2
另外,这会将密码泄漏给进程列表中的所有本地用户(pstop在适当的时候)。
Federico Poloni
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.