LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネル環境でサーバーの構築やソフトウェアのインストールを行っている際、何度も「y/n」の確認プロンプトが表示されて手を止めてしまった経験はないでしょうか。シェルスクリプトの自動化を進めたいのに、対話入力を求められて処理がストップしてしまうと困ってしまいますよね。
この記事では、Linuxの標準コマンドである yes コマンドの基本的な使い方から、無限に文字列を出力する方法、そしてインストールの自動応答(yes/noプロンプトのスキップ)に活用する実践的なテクニックまで、インフラエンジニア向けにわかりやすく解説します。
この記事を読むことで、対話型コマンドをバッチ処理に組み込んだり、テスト用のダミーデータを効率的に作成したりできるようになり、日々の運用作業を大きく効率化できます。
確認した環境
本記事で紹介するコマンドおよび手順は、以下の環境で動作を確認しています。
- OSOS [オーエス]Operating System。基本ソフトウェア: UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 22.04 LTS / AlmaLinux 9
- シェル: Bash / Zsh
- コアユーティリティ: GNU coreutils (
yesコマンドを含むパッケージ)
環境による違いについて
本記事ではLinux(GNU coreutils)のyesコマンドを前提としています。macOSmacOS [マックオーエス]Appleが開発するMac用のオペレーティングシステムなどのBSD系OSにもyesコマンドは存在しますが、内部実装やパフォーマンス特性が異なる場合があります。クロスプラットフォームでシェルスクリプトを共有する際は、動作環境ごとに挙動を確認することをおすすめします。
yesコマンドとは?
yes コマンドは、指定した文字列(デフォルトでは y)を改行区切りで無限に標準出力へ吐き出し続ける、非常にシンプルながら強力なコマンドです。GNU coreutilsに含まれており、ほとんどのLinuxディストリビューションで標準利用できます。
yesコマンドの基本動作と仕組み
yes コマンドの最大の特徴は、ユーザーが明示的に停止するまで処理を止めない「無限ループ」です。単体で実行すると、端末の画面が文字で埋め尽くされます。
デフォルトでの出力内容
オプションを指定せずに yes コマンドを実行した場合の動作を見てみましょう。
yes実行すると、以下のように y という文字が無限に出力され続けます。
yyyy...(無限に続く)yesコマンドの基本的な使い方
yes コマンドは、単に文字をループさせるだけでなく、任意の文字列を出力させたり、パイプラインと組み合わせて他のコマンドに値を渡し続けたりする用途で真価を発揮します。
任意の文字列を無限に出力する
yes コマンドの引数に任意の文字列を指定すると、その文字列を無限に出力させることができます。
yes "Hello Linux"実行例:
Hello LinuxHello LinuxHello Linux...(無限に続く)このように、テスト用のメッセージを大量に生成したい場合などに便利です。
出力結果を停止する方法(Ctrl + C)
yes コマンドは無限ループで動作するため、そのままでは自然に終了しません。出力を停止するには、キーボードで以下のショートカットキーを入力します。
- 終了ショートカット:
Ctrl + C
この操作により、シグナル(SIGINT)が送信され、コマンドが強制終了します。万が一、大量の出力でターミナルがフリーズしたように見えても、慌てずに Ctrl + C を押下してください。
実務で使える活用テクニック
インフラエンジニアの実務において、yes コマンドは単なるおもちゃではなく、自動化のための強力な武器となります。ここでは具体的な活用シーンを2つ紹介します。
コマンドの対話プロンプト(yes/no)を自動応答させる
ソフトウェアのインストールや、古いファイルの削除 (rm -i など) では、安全のために「本当に実行しますか? (y/n)」という確認プロンプトが表示されます。シェルスクリプトでこれを完全に自動化したい場合に yes コマンドが役立ちます。
パイプ(|)を使って、yes の出力を対象のコマンドに流し込みます。
yes | sudo apt-get upgradeあるいは、特定の文字(no や y 以外の文字列)を自動回答させたい場合は、引数にその文字を指定します。
yes no | rm -i *.logyesコマンドをパイプで使用する際のリスク
yes コマンドは文字列を高速かつ無限に送り出し続けるため、すべての確認プロンプトに同じ回答を返してしまいます。apt-get upgrade などでは「本当にアップグレードしますか? [Y/n]」以外にも、「設定ファイルを上書きしますか?」「古いバージョンを保持しますか?」といった別の確認プロンプトが表示されることがあります。この場合、意図しない選択肢が自動で選ばれてしまい、システムの設定ファイルが勝手に書き換わるなどの重大な問題を引き起こす危険性があります。
そのため、可能な限り各コマンドの専用オプション(apt-get -y upgrade や yum update -y など)を使用してください。専用オプションは対象の確認プロンプトのみをスキップし、予期しないプロンプトには安全なデフォルト値で応答するよう設計されています。yes コマンドのパイプは、専用オプションが用意されていない古いコマンドや独自の対話型スクリプトに対してのみ使用するのがベストプラクティスです。
headコマンドと組み合わせて容量の大きいダミーファイルを作る
ディスクI/Oのテストや、容量制限の挙動を確認するために「特定のサイズを持つダミーファイル」を手早く作成したい場合があります。yes コマンドと head コマンドを組み合わせることで、指定したサイズ・行数のファイルを一瞬で生成できます。
例えば、100万行のデータを持つテキストファイルを作成する場合は以下のように実行します。
yes "Test Data Line" | head -n 1000000 > dummy.txt各コマンドの役割:
yes "Test Data Line": 指定した文字列を無限に生成し続けるhead -n 1000000: 先頭から100万行を取得した時点で入力を締め切り、プロセスを終了させる> dummy.txt: 出力をファイルにリダイレクトする
このテクニックを活用すれば、巨大なログファイルの模擬データなどを数秒で準備することができます。
用途に応じたダミーファイルの作り分け
上記の方法は行数ベースでファイルを生成するため、テキスト形式のログ模擬データなどに適しています。一方、ディスク容量(バイト数)を正確に指定したテストを行いたい場合は、head --bytes(例: yes "Test Data Line" | head --bytes 100M > dummy.txt)や dd コマンド(例: dd if=/dev/zero of=dummy.dat bs=1M count=100)を使うほうが、目的のファイルサイズを正確にコントロールできます。用途に応じて使い分けましょう。
まとめ:yesコマンドで作業を効率化しよう
今回は、Linuxの yes コマンドの基本から、実務で役立つ自動化テクニックまで解説しました。
記事のポイントを以下にまとめます。
yesコマンドは指定した文字列をデフォルトで無限に出力するツールである- 停止するには
Ctrl + Cを使用する - 引数を指定することで、任意の文字列を無限にループさせることができる
- パイプラインと組み合わせることで、インストールの確認プロンプト(yes/no)を自動応答させることができる
headコマンド等と組み合わせることで、テスト用のダミーファイルを効率よく作成できる
yes コマンドはシンプルな構造ながら、シェルスクリプトの自動化やテスト環境の構築において非常に頼りになる存在です。ぜひ日々のインフラ運用や開発作業に取り入れてみてください。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。