IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のサーバー運用入門

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  OpenStack  システムトラブルシュート 

第8回 クラウド時代の障害対応術 (7) シェルコマンドのパイプライン、リダイレクトとプロセス置換に慣れよう (濱田康貴) 2018年5月

シェルコマンドのパイプラインとリダイレクトとは

みなさんこんにちは。これまで、本コラムでbashのシェルコマンドをいくつかご紹介しましたが、複数のコマンドをつなげて実行するパイプラインや、コマンドの出力をファイルへ吐き出すリダイレクトについてきちんと説明する機会がなかったので、今回はbashのシェルコマンドにおけるパイプラインとリダイレクトについて取り上げてみたいと思います。

パイプラインとは

パイプラインは、「|」の記号を用いて、|の左辺にあるコマンドを|の右辺に渡します。例えは、カレントディレクトリ上で「ls」コマンドを実行し、アルファベット順にソートしたい場合

$ ls | sort

と実行します。また、パイプラインは何段にも渡すことができますので、上記コマンドの実行結果に行番号をつけたい、という場合は

$ ls | sort | cat -n

というように実行します。

リダイレクトとは

リダイレクトとは、コマンドとファイルやデバイスとの間を標準入出力でつないで処理することを指します。と言ってもこの説明だけでは何のことやら、ですよね。まず、実例から示します。

● lsコマンドの結果を 1. txt へ出力する

$ ls > 1.txt

こうすることで、lsコマンドの出力結果が、カレントディレクトリの1.txtへ出力されました。もう1度実行すると、先ほどの1.txtに上書きされてしまいます。

● lsコマンドの結果を 1. txt へ追記モードで出力する

$ ls >> 1.txt

上記コマンドを実行するたび、1.txtにその内容が追記されます。

● temp.log から今月の日付を含む行をgrepで抜き出す

$ grep 2018/04 < temp.log

● temp.logから今月の日付を含む行をgrepで抜き出し、その結果をout.logへ出力する

$ grep 2018/04 < temp.log > out.log

このように、前のコマンドと次のコマンドラインへ渡す役割をパイプラインが、コマンドからファイルやデバイスへ出力したり、逆にファイルやデバイスの内容を読み取る役割をリダイレクトが受け持ったりすることがおわかりいただけましたでしょうか。

特に、サーバー運用エンジニアはログの確認でコマンドを実行することが多いかと思います。grepやcut、head、tail、sed、awkなどをパイプラインで繋げて、業務の正確性を上げ、効率化することができるとよいでしょう。

あると便利なプロセス置換

シェルのプロセス置換を使うことで、数値や文字列の決め打ちを減らし、コマンド実行やシェルスクリプトのメンテナンス頻度を下げることが可能になります。先ほど例示した、あるファイルから今月の日付を含む行をgrepで抜き出すといったケースですと、

● プロセス置換を使わない場合

$ grep 2018/04 < temp.log

●プロセス置換を使った場合

$ grep `date +%Y/%m` < temp.log

または

$ grep $(date +%Y/%m) < temp.log

このように、「``(バッククォート)」または「$()」で囲われたコマンドの実行結果を引数として与えることが可能になります。先ほどの例ですと、プロセス置換を使うことにより、月またぎのたびに実行するコマンドの引数を変えずに済みます。

まとめ

さて、本連載の第1回目で、「障害対象ホストへコマンドラインで調査を行うにあたり、私の場合以下のコマンドを使うことが多いです。」と書きました。

curl df dig du fuser ip last lsof nc ping ps ss telnet top vmstat w whois

これらコマンドを1回1回出力するだけでなく、出力結果を加工してファイルに書き出したり、grepに渡した後の終了ステータスを捕まえ、その条件によってメッセージを飛ばしたりなど、シェルコマンドだけでも応用範囲が広がります。

このような工夫で、より楽に精度を上げたオペレーションが可能になりますので、パイプラインとリダイレクト、プロセス置換は是非覚えておきたいものです。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  OpenStack  システムトラブルシュート