CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさんこんにちは。株式会社パイプラインの濱田です。前回はviエディタでのテキストファイル編集を取り上げましたが、コマンド出力結果をファイル出力したり、テキストファイルの内容をコマンドの入力として活用したりする方法についても取り上げてみたいと思います。
Linuxのシェルにおけるリダイレクトは以下2つの方向があることをまず覚えてください。
方向 |
記号 |
コマンド例 |
コマンドの出力結果をテキストファイルへ出力する (上書きモード) |
> |
crontab -l > crontab.txt |
テキストファイルの内容をコマンド実行の入力とする |
< |
crontab < crontab.txt |
コマンド例にあるように、リダイレクト記号の左辺がコマンド、右辺がテキストファイルです。また、リダイレクトによる出力は上記のように上書きモードで実行すると、常に最後に出力した内容のみがテキストファイルに記録されます。上書きではなくコマンド実行のたびに追記したい場合はリダイレクト記号を「>」から「>>」に変更します。以下表では上書きモードと追記モードの違いについてまとめました。
やりたいこと |
記号 |
コマンド例 |
結果 |
コマンドの出力結果をテキストファイルへ出力する (上書きモード) |
> |
crontab -l > crontab.txt |
crontab -l コマンドを1回実行した内容のみがテキストファイルに書き出される |
コマンドの出力結果をテキストファイルへ出力する (追記モード) |
>> |
crontab -l >> crontab.txt |
crontab -l コマンドを実行するたびにテキストファイルへ追記される |
テキストファイルをコマンドの入力として扱う場合よく間違えやすいのは以下の例です。
間違い |
output.txt > command |
正解 |
command < output.txt |
テキストファイルはコマンドラインではありませんので、1例目を実行しようとすると「output.txt: command not found」とエラーが出力されてしまいます(テキストファイルに偽装された実行ファイルであれば意図しない実行結果となります)。ですので、リダイレクト記号の左辺はコマンド、右辺は出力先テキストファイル、というように覚えてしまってもよいでしょう。
パイプラインとは、あるコマンドの標準出力を次のコマンドの入力とする仕組みです。「|」の記号で表現されます。
やりたいこと |
記号 |
コマンド例 |
psコマンドの出力のうち、文字列「httpd」を含む行のみを出力する |
| |
ps -aef | grep httpd |
psコマンドの出力のうち、文字列「httpd」を含む行のみを出力するが、grepコマンドの出力を除外する |
| |
ps -aef | grep httpd | grep -v grep |
上記の例ではpsコマンドの出力結果をgrepコマンドの入力としています。また、パイプラインは直列に複数使って受け渡すことが可能です。これを多段パイプまたは多段パイプライン処理と呼びます。
リダイレクトとパイプラインの違いがイメージしにくいかと思いますが、リダイレクトはコマンドラインからテキストファイルへの出力(またはその逆)を目的に、パイプラインはコマンドラインの直列実行を目的にしている、という違いであると考えれば、リダイレクトとパイプラインの違いが体感できるのではないかと思います。
以下のように、パイプラインとリダイレクトを組み合わせて使用することも可能です。
やりたいこと |
コマンド例 |
解説 |
psコマンドの出力のうち、文字列「httpd」を含む行のみをファイルに出力する |
ps -aef | grep httpd | grep -v grep > output.txt |
psコマンドの結果がgrepコマンド(1つ目)に引き渡され、httpd を含む行のみが抽出され、grepコマンド(2つ目)ではgrepコマンドを含む行が除外され、最終的な標準出力がoutput.txtに書き込まれる。 |
このように、リダイレクトを使用することで、標準出力の内容をマウスで選択してクリップボードにコピーしてviでテキストファイルに貼り付けるといった煩雑な作業をすることなく、スマートにテキスト出力することが可能になります。また、パイプライン処理においてテキストを途中で加工して最終的に整形されたテキストのみをテキストファイルに書き込むことが可能になります。シェルのパイプライン処理については、シェルスクリプト記述やワンライナーオペレーションに有用ですので、回を改めて取り上げます。
次回もviを使わないテキストファイル作成とテキスト置換について取り上げます。
CTC教育サービスではLinuxをはじめ多数の研修コースが用意されています。ご自身の興味や業務の必要性にあったコースを受講してみてはいかがでしょうか。
https://www.school.ctc-g.co.jp/category/
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes