Команда yes в терминале — что она делает и как её безопасно использовать

Быстрые ссылки
Что делает yes?
Когда использовать yes?
Как заменить yes безопасно
Команда
yesпоявилась в BSD 4.0 и по сей день входит в состав Unix-подобных систем, таких как macOS и Linux. Это простая утилита с понятным поведением, но её применение требует внимательности.
Что делает yes?
Запуск без аргументов:
yesбудет бесконечно печатать букву «y», каждую строку новой, отправляя вывод в стандартный вывод. Это непрерывный процесс, который быстро загружает CPU до ~100% на одном потоке и не завершится, пока вы его не остановите (Ctrl+C) или не убьёте процесс.
Команда полезна в паре с пайпами. Частый шаблон:
yes | <команда>В этом случае yes подаёт символы в stdin команды справа от пайпа, автоматически отвечая “y” на все запросы подтверждения. Пример:
yes | fsck /dev/sdXвместо того, чтобы вручную подтверждать каждое исправление ошибок в файловой системе.
Важно: yes по умолчанию выдаёт строку “y” с переводом строки. Вы можете указать другой текст:
yes n # будет печатать "n" постоянноили
yes ""для отправки пустых строк.

Когда использовать yes?
Используйте yes, когда:
- нужно автоматически подтвердить серию однотипных запросов у команды, которая ожидает ввода пользователя;
- вы запускаете сценарий обслуживания и заранее уверены в безопасности операций;
- вы хотите быстро создать нагрузку на CPU для тестирования охлаждения или мониторинга.
Не используйте yes, когда:
- команда выполняет удаление или изменение данных без дополнительной проверки;
- вы не уверены в последствиях массового подтверждения;
- команда поддерживает флаг для немедленного подтверждения (см. раздел альтернатив).
Пример: автоподтверждение удаления (ОПАСНО)
Вместо ручного ответа на множество запросов rm -r некоторые пользователи запускают:
yes | rm -r папкаЭто даст автоматическое “y” на все запросы. Однако это опасно: rm и подобные утилиты часто имеют флаги, которые безопаснее использовать:
rm -rf папка # комбинация: рекурсивно и без подтвержденийГораздо лучше заранее понять поведение команды и использовать официальные флаги.
Альтернативы и лучшие практики
- Ищите флаги автоматического подтверждения у целевой команды:
--yes,-y,-fи т. п. Они обычно безопаснее и понятнее. - Для интерактивных скриптов используйте инструмент
expectдля контролируемого диалога с программой. - Для массовых изменений сначала протестируйте команду на копии данных или в изолированной среде.
- Логируйте вывод при массовых операциях: перенаправьте stdout/stderr в файл, чтобы иметь запись.
Примеры:
apt-get -y upgrade # Debian/Ubuntu: флаг -y
pacman --noconfirm -Syu # Arch: флаг --noconfirmКогда yes не работает или вводит в заблуждение
- Если команда не читает stdin, пайп с
yesне поможет. - Некоторые программы делают валидацию ответа, ожидая конкретные строки — в этом случае простой “y” может быть недостаточен.
- Интерактивные утилиты с графическим интерфейсом не получат ответы через stdin.
Методика для безопасного применения
- Прочитайте manual:
man <команда>. - Попробуйте команду в тестовой папке.
- Найдите флаги для бездиалоговой работы.
- Если используете
yes, укажите точный ответ:yes "y" | команда. - Логируйте результат:
yes | команда > /tmp/log 2>&1. - После запуска следите за нагрузкой и завершите при отклонениях.
Рольовые чек-листы
Для системного администратора:
- Проверить бэкапы перед массовыми изменениями.
- Использовать флаги без подтверждения, если они существуют.
- Ограничить доступ к скриптам, использующим
yes.
Для разработчика/автотеста:
- Использовать
expectили библиотеки для автоматизации ввода. - Тестировать сценарии на контейнерах или виртуальных машинах.
Для тестировщика нагрузки:
- Применять
yesна тестовой машине, а не в проде. - Отслеживать метрики CPU/температуры и таймауты.
Быстрая проверка и отладка
Остановить процесс: нажмите Ctrl+C в окне терминала или найдите PID и завершите:
ps aux | grep '^yes' # найти процесс (пример)
kill Используйте Activity Monitor или top/htop для контроля нагрузки.
Ментальные модели и эвристики
- Если операция изменяет данные — относись к автоматическому подтверждению как к потенциально опасному действию.
- Предпочитай встроенные флаги команды
-y/--yes/--forceпередyes. - Для нагрузки на CPU
yesэквивалентен запуску нескольких простых бесконечных циклов, это быстрый, но грубый тест.
Критерии приёмки
- Операция выполняется без ручного ввода и без нежелательных побочных эффектов.
- Логи операции сохраняются и проверены.
- При необходимости есть откатный план (бэкапы, снимки).
Краткое руководство по безопасности
- Никогда не запускайте
yes |с командами, которые вы не полностью понимаете. - Всегда проверяйте, можно ли использовать флаг для немедленного подтверждения.
- Выполняйте пробную прогонку на изолированной среде.
Сводка
Команда yes полезна для автоматизации однотипных подтверждений и для генерации нагрузки, но она не заменяет понимание целевой команды и её флагов. Применяйте её только после тестирования и при наличии плана отката.
Краткий глоссарий:
- stdin — стандартный ввод; место, откуда программа читает данные.
- stdout — стандартный вывод; место, куда программа пишет результаты.
- pipe (|) — перенаправление вывода одной команды во вход другой.
flowchart TD
A[Нужна автоматизация подтверждений?] -->|Да| B{Команда имеет флаг авто-подтверждения?}
B -->|Да| C[Использовать флаг '-y/--yes/--force']
B -->|Нет| D{Команда читает stdin?}
D -->|Да| E[Использовать yes | команда]
D -->|Нет| F[Использовать expect или тестовый скрипт]
A -->|Нет| G[Ручная работа — не автоматизировать]Похожие материалы
Dynamic Theme — обои Bing и Windows Spotlight
Как удалить историю Bing AI Chat
2FA в Vivaldi: как включить и настроить
Bing AI в Edge: руководство по панели
Vivaldi 6.0: рабочие пространства и кастомные иконки