このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:標準入力のリダイレクト
標準入力のリダイレクト
Linuxでは、多くのコマンドが標準入力からデータを受け取り、標準出力に結果を出力します。これにより、コマンド同士を柔軟に組み合わせて強力な機能を実現できます。ここでは、標準入力のリダイレクトについて解説し、コマンドの入力元を自由に変更する方法を紹介します。
標準入力の基本
通常、コマンドはキーボードからの入力を標準入力として受け取ります。例えば、cat
コマンドは、引数にファイルを指定しない場合、キーボードからの入力を待ち受けます。
例:cat
コマンドを引数なしで実行
user01@ubuntu:~$ cat
Hello # キーボードからHelloと入力
Hello # Helloと表示された
^D # Ctrl + Dで入力
user01@ubuntu:~$ # プロンプトに戻った
操作説明
cat
を実行すると、キーボードからの入力を待ちます。- “Hello”と入力すると、
cat
はそのまま”Hello”を表示します。 Ctrl + D
(^D
)を入力すると、EOF(ファイルの終わり)を示し、cat
は終了します。
この動作は、cat
コマンドが標準入力の内容をそのまま標準出力に出力するためです。
標準入力のリダイレクト
キーボードの代わりに、ファイルの内容を標準入力としてコマンドに渡すことができます。これを入力リダイレクトと呼び、<
記号を使用します。
【書式】[コマンド] < [ファイル名]
例:/etc/crontab
ファイルをcat
コマンドの標準入力として指定
user01@ubuntu:~$ cat < /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
...(以下省略)...
操作説明
< /etc/crontab
により、/etc/crontab
ファイルの内容がcat
コマンドの標準入力に渡されます。cat
は標準入力の内容をそのまま標準出力に出力するため、ファイルの内容が表示されます。
入力リダイレクトとファイル指定の違い
cat
コマンドは、引数にファイル名を指定すると、そのファイルの内容を表示します。そのため、入力リダイレクトを使用した場合と、ファイルを直接指定した場合で、出力結果は同じになります。
例:入力リダイレクトとファイル指定の比較
# 入力リダイレクトを使用
user01@ubuntu:~$ cat < /etc/crontab
# ファイルを直接指定
user01@ubuntu:~$ cat /etc/crontab
- 結果: どちらも
/etc/crontab
の内容が表示されます。
しかし、内部的な動作には違いがあります。
動作の違い
- 入力リダイレクトの場合
・cat
コマンドは標準入力(stdin
)からデータを読み取ります。
・<
によって、標準入力がキーボードからファイルに変更されます。
・cat
は本来の動作である「標準入力をそのまま標準出力に表示する」を行います。 - ファイル指定の場合
・cat
コマンドは引数で指定されたファイルを開き、その内容を表示します。
・これはcat
が利便性のために提供している機能です。
プログラム作成時のポイント
Linuxでプログラムを作成する際は、他のコマンドと同様に標準入力からデータを受け取るように設計すると、汎用性が高くなります。これにより、入力リダイレクトやパイプラインを使用して、他のコマンドとの連携が容易になります。
まとめ
- 標準入力のリダイレクトを使用すると、コマンドの入力元をファイルなどに変更できます。
cat
コマンドでは、入力リダイレクトとファイル指定の両方で同じ結果を得られますが、内部的な動作は異なります。- プログラムを作成する際は、標準入力からデータを受け取る設計にすると、他のコマンドとの連携がしやすくなります。
標準入力のリダイレクトを理解することで、コマンドの入力元を柔軟に変更でき、効率的なコマンド操作が可能になります。ぜひ活用してみてください。