команда yes в linux
Команда yes
Описание команды yes
Синтаксис
Без аргументов
Если выполнить команду yes без каких либо аргументов, то на экран бесконечно будет выводиться символ «y» (каждый символ на новой строке). Данное поведение используется для автоматического подтверждения запросов, при выполнении других команд (см. примеры ниже).
С указанием строки
Опции
У команды yes всего 2 опции:
Примеры использования команды yes
Обычно команда yes используется для того, чтобы при выполнении других команд или скриптов, которые выдают пользователю запросы, требующие ввести y (yes) или n (no), автоматически вводилось y (yes) на каждый запрос. То есть, чтобы избавить пользователя от необходимости самостоятельно отвечать y (Да) на каждый запрос.
Отвечаем Да на каждый запрос при восстановлении файловой системы
При проверке файловой системы командой fsck могут выдаваться запросы на исправление ошибок в файловой системе. Чтобы автоматически отвечать Да на каждый запрос, можно использовать следующую команду:
Отвечаем Да при удалении файлов
Данная команда эквивалентна команде:
Создание большого файла
Команда yes может использоваться для создания больших файлов, заполненных данными. Например, это может потребоваться при тестировании программ.
Команда YES
Описание команды yes
Синтаксис
Без аргументов
Если выполнить команду yes без каких либо аргументов, то на экран бесконечно будет выводиться символ «y» (каждый символ на новой строке). Данное поведение используется для автоматического подтверждения запросов, при выполнении других команд (см. примеры ниже).
С указанием строки
Опции
У команды yes всего 2 опции:
—helpВывести информацию о команде yes.—versionВывести версию утилиты yes.
Примеры использования команды yes
Обычно команда yes используется для того, чтобы при выполнении других команд или скриптов, которые выдают пользователю запросы, требующие ввести y (yes) или n (no), автоматически вводилось y (yes) на каждый запрос. То есть, чтобы избавить пользователя от необходимости самостоятельно отвечать y (Да) на каждый запрос.
Отвечаем Да на каждый запрос при восстановлении файловой системы
При проверке файловой системы командой fsck могут выдаваться запросы на исправление ошибок в файловой системе. Чтобы автоматически отвечать Да на каждый запрос, можно использовать следующую команду:
Отвечаем Да при удалении файлов
Данная команда эквивалентна команде:
Создание большого файла
Команда yes может использоваться для создания больших файлов, заполненных данными. Например, это может потребоваться при тестировании программ.
Небольшая история о команде `yes` в Unix
Хотя на первый взгляд команда кажется бессмысленной, но иногда она бывает полезной:
Когда-нибудь устанавливали программу, которая требует ввести «y» и нажать Enter для установки? Команда yes приходит на помощь! Она аккуратно выполнит эту задачу, так что можете не отвлекаться от просмотра Pootie Tang.
Пишем yes
Вот базовая версия на… хм… BASIC.
А вот то же самое на Python:
Кажется простым? Погодите!
Как выясняется, такая программа работает довольно медленно.
Сравните со встроенной версией на моём «маке»:
Так что я попытался написать более быструю версию на Rust. Вот моя первая попытка:
Упс, ничего особенно не улучшилось. Она даже медленнее, чем версия на Python! Это меня заинтересовало, так что я поискал исходники реализации на C.
Вот самая первая версия программы, которая вышла в составе Version 7 Unix за почётным авторством Кена Томпсона 10 января 1979 года:
Сравним со 128-строчной версией из комплекта GNU coreutils, зеркало которого есть на Github. После 25 лет программа всё ещё в активной разработке! Последнее изменение кода произошло около года назад. Она довольно быстрая:
Важная часть находится в конце:
Я расширил свою программу Rust:
Здесь важно, чтобы размер буфера делился на четыре, это гарантирует выравнивание в памяти.
Такая программа выдаёт 51,3 МиБ/с. Быстрее, чем версия, установленная в моей системе, но намного медленнее чем вариант от автора найденного мной поста на Reddit. Он говорит, что добился скорости 10,2 ГиБ/с.
Дополнение
Как обычно, сообщество Rust не подкачало. Как только эта статья попала в подреддит о Rust, пользователь nwydo указал на предыдущее обсуждение этой темы. Вот их оптимизированный код, который пробивает 3 ГБ/с на моей машине:
Так это же совсем другое дело!
Извлечённые уроки
Тривиальная программа yes на самом деле оказалась не такой простой. Для улучшения производительности в ней используется буферизация вывода и выравнивание памяти.
Переработка стандартных инструментов Unix — увлекательное занятие и оно заставляет ценить те изящные трюки, которые делают наши компьютеры быстрыми.
Как использовать команду yes в Linux
от sasza
Команда yes кажется слишком простой, чтобы иметь какое-либо практическое применение, но в этом руководстве мы покажем вам ее применение и то, как извлечь выгоду из ее отложенного положительного результата в Linux и macOS.
Команда yes
Но не списывайте это на простую маленькую команду. Его можно использовать несколькими интересными и полезными способами.
Что делает да?
При использовании без каких-либо параметров командной строки команда yes ведет себя так, как если бы вы вводили «y» и нажимали Enter, снова и снова (и снова и снова) снова. Очень быстро. И это будет продолжаться, пока вы не нажмете Ctrl + C, чтобы прервать его.
Фактически, yes можно использовать для многократной генерации любого сообщения по вашему выбору. Просто введите да, пробел, строку, которую вы хотите использовать, а затем нажмите Enter. Это часто используется, чтобы заставить yes генерировать выходной поток строк «да» или «нет».
Но что в этом толку?
Вывод yes может быть передан в другие программы или сценарии.
Звучит знакомо? Вы запускаете долгий процесс и уходите, оставляя его работать. Когда вы вернетесь к своему компьютеру, процесс вообще не завершится. В ваше отсутствие он задал вам вопрос и сидит в ожидании ответа «да» или «нет».
Если вы заранее знаете, что все ваши ответы будут положительными («да» или «y») или отрицательными («нет» или «n»), вы можете использовать «да», чтобы предоставить вам эти ответы. Затем ваш долгий процесс будет доведен до завершения без присмотра, и вы получите ответы на все вопросы, которые задает процесс.
Использование да со скриптами
Взгляните на следующий сценарий оболочки Bash. (Нам нужно представить, что это часть гораздо более крупного скрипта, выполнение которого займет значительное время.)
Этот сценарий задает вопрос и ожидает ответа. Логический поток в сценарии определяется вводом пользователя.
«Да» или «y» означает положительный ответ.
Любой другой ввод считается отрицательным ответом.
Нажатие Enter без ввода текста ничего не делает.
Чтобы проверить это, скопируйте сценарий в файл и сохраните его как long_script.sh. Используйте chmod, чтобы сделать его исполняемым.
Запустите сценарий с помощью следующей команды. Попробуйте ввести «yes», «y» и что-нибудь еще в качестве ввода, включая нажатие Enter без ввода текста.
Чтобы получить «да», чтобы предоставить наш ответ на вопрос сценария, направьте вывод «да» по конвейеру.
Некоторые сценарии более жесткие в своих требованиях и принимают только полное слово «да» как положительный ответ. Вы можете указать «да» в качестве параметра для «да» следующим образом:
Не говори «да», не задумываясь об этом
Вы должны быть уверены, что ввод, который вы собираетесь ввести в сценарий или программу, определенно даст вам ожидаемый результат. Чтобы принять это решение, вы должны знать вопросы и свои ответы.
Логика в сценарии, команде или программе может не соответствовать вашим ожиданиям. В нашем примере сценария вопрос мог быть таким: «Вы хотите остановиться? [y,n]. » Если бы это было так, отрицательный ответ позволил бы сценарию продолжить работу.
Вы должны быть знакомы со сценарием, командой или программой, прежде чем беспечно вставлять в них «да».
Использование yes с командами
В младенчестве да будет использоваться с другими командами Linux. С тех пор большинство этих других команд Linux работают по-своему, без вмешательства человека. Да больше не требуется для этого.
В качестве примера возьмем диспетчер пакетов Ubuntu apt-get. Чтобы установить приложение, не нажимая «y» в середине процесса установки, можно было бы использовать yes следующим образом:
Вы увидите, что apt-get даже не спрашивал своего обычного: «Вы хотите продолжить? [Y/n]»Вопрос. Он просто предполагал, что ответ будет «да».
В других дистрибутивах Linux ситуация такая же. В Fedora вы бы использовали этот тип команды диспетчера пакетов за один раз:
Неужели кажется, что yes было отнесено к работе только со скриптами? Не совсем. В старой собаке есть еще несколько уловок.
Некоторые дополнительные да хитрости
Вы можете использовать yes с последовательностью цифр, сгенерированной seq, чтобы управлять циклом повторяющихся действий.
Этот однострочник отображает сгенерированные цифры в окно терминала, а затем вызывает спящий режим на одну секунду.
Вместо того, чтобы просто выводить цифры в окно терминала, вы можете вызвать другую команду или сценарий. В этой команде или сценарии даже не нужно использовать цифры, и они нужны только для запуска каждого цикла цикла.
Иногда бывает полезно иметь большой файл для тестирования. Возможно, вы хотите попрактиковаться в использовании команды zip или иметь файл большого размера для тестирования загрузки по FTP.
Вы можете быстро создавать большие файлы с помощью yes. Все, что вам нужно сделать, это дать ему длинную строку текста для работы и перенаправить вывод в файл. Не ошибитесь; эти файлы будут быстро расти. Будьте готовы нажать Ctrl + C в течение нескольких секунд.
Сгенерированный здесь файл занял около пяти секунд на тестовой машине, использованной для исследования этой статьи. ls сообщает, что его размер составляет 557 Мб, а мы сообщаем, что в нем 12,4 миллиона строк.
Как только в файле test.txt будет 50 строк, процесс остановится. Вам не нужно использовать Ctrl + C. Он изящно останавливается по собственной воле.
wc сообщает, что в файле ровно 50 строк, 400 слов и его размер составляет 2350 байт.
Несмотря на то, что она по-прежнему полезна для подачи ответов в долго выполняющиеся скрипты (и несколько других приемов), команда yes не станет частью вашего повседневного набора команд. Но когда оно вам действительно понадобится, вы обнаружите, что это сама простота — и все это в шести строках золотого кода.
Как использовать команду yes в Linux
Команда yes кажется слишком простой, чтобы иметь какое-либо практическое применение, но в этом руководстве мы покажем вам ее приложение и как извлечь выгоду из положительного положительного эффекта в Linux и macOS.
Команда да
Но не списывайте это на то, чтобы быть простой маленькой командой. Это может быть использовано несколькими интересными и полезными способами.
Что да делает?
Используемая без каких-либо параметров командной строки, команда yes ведет себя так, как будто вы вводите «y» и снова нажимаете Enter, снова и снова (и снова, и снова). Очень быстро. И это будет продолжаться до тех пор, пока вы не нажмете Ctrl + C, чтобы прервать его.
Но что это значит?
Вывод yes может быть передан в другие программы или сценарии.
Это звучит знакомо? Вы запускаете длинный процесс и уходите, оставляя его работать. Когда вы вернетесь к компьютеру, процесс еще не завершен. В ваше отсутствие он задал вам вопрос и ждет ответа «да» или «нет».
Если вы заранее знаете, что все ваши ответы будут положительными («да» или «у») или отрицательными («нет» или «n»), вы можете использовать « yes чтобы предоставить эти ответы для вас. После этого ваш длительный процесс будет завершен без присмотра, если вы ответите « yes предоставив ответы на любые вопросы, которые задает процесс.
Использование yes со скриптами
Посмотрите на следующий скрипт оболочки Bash. (Нам нужно представить, что это часть гораздо большего скрипта, выполнение которого займет значительное время.)
Этот скрипт задает вопрос и ожидает ответа. Логический поток в скрипте определяется входом от пользователя.
Запустите скрипт с помощью следующей команды. Попробуйте ввести «yes», «y» и все остальное в качестве ввода, включая нажатие клавиши «Enter» без ввода текста.
Чтобы получить « yes чтобы предоставить наш ответ на вопрос сценария, направьте вывод « yes в сценарий.
Некоторые сценарии более жесткие в своих требованиях и принимают только полное слово «да» как положительный ответ. Вы можете указать «да» в качестве параметра « yes следующим образом:
Не говори да, не думая об этом
Вы должны быть уверены, что входные данные, которые вы собираетесь передать в сценарий или программу, определенно дадут вам ожидаемый результат. Чтобы принять это решение, вы должны знать вопросы и каковы ваши ответы.
Логика в сценарии, команде или программе может не соответствовать вашим ожиданиям. В нашем примере сценария вопрос мог звучать так: «Вы хотите остановиться? [y, n]. »Если бы это было так, отрицательный ответ позволил бы продолжить выполнение сценария.
Вы должны быть знакомы со сценарием, командой или программой, прежде чем беспечно направить « yes в нее.
Использование yes с командами
Вы увидите, что apt-get даже не спрашивает, как обычно: «Хотите продолжить? [Да / Нет] »вопрос. Предполагалось, что ответ будет «да».
На других дистрибутивах Linux ситуация такая же. В Fedora вы бы использовали команду такого типа сразу:
Таким образом, кажется, что yes было отнесено к работе только со сценариями? Не совсем. У старой собаки еще есть несколько уловок.
Некоторые Дальнейшие да Уловки
Вы можете использовать yes с последовательностью цифр, сгенерированной seq чтобы контролировать цикл повторяющихся действий.
Этот однострочник выводит сгенерированные цифры в окно терминала, а затем вызывает sleep течение одной секунды.
Вместо того, чтобы просто отображать цифры в окне терминала, вы можете вызвать другую команду или скрипт. Эта команда или сценарий даже не должны использовать цифры, и они только там, чтобы запустить каждый цикл цикла.
Как только в файле test.txt будет 50 строк, процесс остановится. Вам не нужно использовать Ctrl + C. Это происходит изящно по собственному желанию.
wc сообщает, что в файле содержится ровно 50 строк, 400 слов и его размер составляет 2350 байт.
Даже при том, что это все еще полезно для подачи ответов в длительные сценарии (и некоторые другие уловки), команда yes не будет частью вашего ежедневного набора команд команд. Но когда вам это нужно, вы обнаружите, что это сама простота — и все в шести строках золотого кода.