Unix / Linux - Shell入出力リダイレクション
こんにちは、未来のコマンドラインの達人たち!今日は、Unix/Linuxシェルの入出力リダイレクションの世界に興味深い旅に出発します。コードを書いたことがない人も心配しないでください - 私はこの冒険を一歩一歩ガイドします。これまでに多くの学生たちを指導してきた経験を活かしてです。では、仮想のヘルメットをかぶり、一緒に潜りましょう!
基礎を理解する
本題に入る前に、シンプルな類似点から始めましょう。シェルを助手的なアシスタントと考えてみてください。通常、このアシスタントはキーボードからコマンドを読み取り(標準入力)、結果を画面に表示(標準出力)、そしてエラーも画面に表示します。しかし、このデフォルトの動作を変更したい場合どうしますか?それがI/Oリダイレクションの便利なところです!
出力リダイレクション
'>'の魔法
まずは出力リダイレクションから始めましょう。'>'シンボルは私たちの最初の魔法の杖です。これにより、コマンドの出力を画面の代わりにファイルに送信することができます。
echo "Hello, World!" > greeting.txt
このコマンドを実行すると、画面には何も表示されません。代わりに、'greeting.txt'というファイルが作成され、「Hello, World!」が含まれます。ファイルが既に存在する場合は上書きされます。この力には注意してください!
'>>'で追加
では、既存のファイルに追加したい場合はどうしますか?'>>'が救世主的な存在です。
echo "How are you?" >> greeting.txt
このコマンドは「How are you?」を'greeting.txt'ファイルに追加します。ファイルを開くと、両方の行が表示されます。
入力リダイレクション
'<'でファイルから読み取る
出力をリダイレクトできるように、入力もリダイレクトできます。'<'シンボルはコマンドに対してファイルを入力として使用することを許可します。
sort < names.txt
このコマンドは'names.txt'の内容を読み取り、アルファベット順に並べ替えます。まるで「名前をタイプするのを待つ代わりに、このファイルから読んで」と'sort'コマンドに言っているようなものです!
ヒere ドキュメント
'<<'の魔法
複数行の入力をコマンドに渡したい場合、'<<'を使用するヒere ドキュメントが役立ちます。
cat << EOF
This is line 1
This is line 2
EOF
この便利な手は、シェルが'EOF'(End Of Fileの略で、他の単語でも使えます)に達するまで複数行の入力を許可します。
出力を破棄する
静かな'/dev/null'
コマンドを実行してその出力に興味がない場合、'/dev/null'が登場します。Unix/Linuxのデジタルブラックホールです。
ls non_existent_file 2> /dev/null
このコマンドは存在しないファイルをリストアップしようとしますが、エラーを表示せずに silently 破棄します。まるでコマンドの「ミュート」ボタンを持っているようなものです!
リダイレクションコマンド
学んだリダイレクションコマンドを便利な表にまとめます:
コマンド | 説明 |
---|---|
> | 出力をファイルにリダイレクト(上書き) |
>> | 出力をファイルに追加 |
< | ファイルから入力をリダイレクト |
<< | ヒere ドキュメント(複数行入力) |
2> | エラーオuputをリダイレクト |
&> | 標準出力とエラーをリダイレクト |
実用的な例
基本を学んだので、理解を固めるためにいくつかの実用的な例を見てみましょう。
入力と出力リダイレクションを組み合わせる
sort < unsorted_names.txt > sorted_names.txt
このコマンドは'unsorted_names.txt'から名前を読み取り、並べ替えた結果を'sorted_names.txt'に書き込みます。まるでファイルの個人的な整理係のようです!
出力とエラーをリダイレクト
ls /home /nonexistent 1> output.txt 2> error.txt
ここでは、2つのディレクトリをリストアップしています。標準出力('/home'のリストアップに成功した場合)は'output.txt'に、エラー(存在しないディレクトリのリストアップ)は'error.txt'にリダイレクトされます。
ヒere ドキュメントを使用してスクリプト入力
mysql -u username -p << EOF
USE mydatabase;
SELECT * FROM users;
EXIT
EOF
この例では、ヒere ドキュメントを使用して複数のMySQLコマンドを実行し、インタラクティブモードに入ることなく行います。まるでデータベースに「やることリスト」を渡しているようなものです!
結論
おめでとうございます!Unix/LinuxのI/Oリダイレクションの強力な世界への第一歩を踏み出しました。スキルをマスターするには練習が必要です。実験を恐れずに - それがすべての学びの始まりです!
私が教えた年月の中で、学生たちはこれらの概念に苦しみましたが、コマンドラインの達人になるまでに成長しました。ある学生は、I/Oリダイレクションを学んだ後、「ファイルの囁き上手」としてデータを自由に操れるようになったと冗談を言っていました。
ですから、探索を続け、練習を続け、すぐにプロのように入出力をリダイレクトできるようになるでしょう。あなたが次の「ファイルの囁き上手」になるかもしれません!
Credits: Image by storyset