連載
» 2016年03月24日 05時00分 UPDATE

“応用力”をつけるためのLinux再入門(6):パイプとリダイレクトでコマンドを組み合わせて実行しよう (1/4)

今回のテーマは「パイプ」と「リダイレクト」です。それぞれ、コマンドの出力を別のコマンドに渡したり、ファイルに保存したりすることができます。コマンドを組み合わせて実行する際にもよく使われるテクニックです。

[西村めぐみ,@IT]
「“応用力”をつけるためのLinux再入門」のインデックス

連載目次

「パイプ」と「リダイレクト」を使うとどんなことができるのか?

 Linuxのコマンドラインを使いこなす上でポイントとなるのは、「パイプ(パイプライン)」と「リダイレクト」の活用です。

 例えば、「dmesg」は起動時のシステムのメッセージを再表示するコマンドですが、起動時のメッセージはかなりの量があり、1画面で一度に見ることはできません。そこで、「more」というコマンドを使って1画面ずつ停止しながらメッセージを表示するのであれば、パイプを使って「dmesg | more」のようにコマンドを実行します(画面1)。

画面1 画面1 「dmesg | more」でdmesgの出力をmoreで表示している

 また、dmesgコマンドで表示されるメッセージの中で“video”を含むものだけを絞り込むなら、「grep」コマンドで「dmesg | grep -i video」のように実行します(画面2)。なお、grepコマンドの「-i」は大小文字の区別をしないという意味のオプションです。

画面2 画面2 「dmesg | grep -i video」でdmesgの出力をgrepで絞り込んでいる

 さらに、dmesgコマンドのメッセージを「systemlog.txt」という名前でファイルに保存したいのであれば、リダイレクトを使って「dmesg > systemlog.txt」のように実行します(画面3)。

画面3 画面3 「dmesg > systemlog.txt」でdmesgの出力を「systemlog.txt」というファイルに保存している

リダイレクトで既存ファイルに追加したい場合

 「> ファイル名」でリダイレクトすると、ファイルは常に新規作成されます。つまり、既存のファイルを指定した場合は、新しい内容でファイルが上書きされることになります。

 既存のファイルに追加したい場合は「>> ファイル名」のように「>>」で指定します。指定したファイルが存在しない場合は新規作成となります(画面4)。

videoで絞り込んでsavelog.txtに保存(savelog.txtがあっても上書きされる)

dmesg | grep -i video > savelog.txt


consoleで絞り込んでsavelog.txtに追加保存(savelog.txtがない場合は新規作成)

dmesg | grep -i console >> savelog.txt


画面4 画面4 dmesgの出力を“videoが含まれる行”だけを「savelog.txt」に保存し、さらに、“consoleが含まれる行”を追記して保存している

※シェル変数「noclobber」がセットされていると、リダイレクト時のファイルの上書きを禁止することができます。常に「noclobber」をセットしておくには、bashではホームディレクトリの「.bashrc」ファイルに「set -o noclobber」を、tcshではホームディレクトリの「.tcshrc」に「set noclobber」を追記しておきます。シェルの設定ファイルについては、今後本連載で取り上げる予定です。



       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。