|
|
LinuxOSの使いこなし術
|
LinuxOSを使いこなすクライアントOSとの違い絶対パスと相対パス"パスが通っている"とは?"/"と"."と".."の意味"."(ドット)ファイルについてワイルドカードと正規表現コマンドの強制終了コマンド操作の補完機能コマンド操作の履歴機能リダイレクトとパイプ属性とパーミッション〜その1属性とパーミッション〜その2アカウント情報ファイルの操作ランレベルについてシステムが起動しないときはハードディスクの増設アプリケーションの導入法 |
リダイレクト処理とパイプ処理の意味リダイレクト処理とは、 「 コマンド と、ファイルや デバイス との間を標準入出力で繋いで処理すること。」 を指します。 これだけでは何のことかわからないと思いますので、簡単な例を挙げて説明しましょう。 コマンドの多くは、実行した結果を画面に表示するのが普通です。中には ls や、 printenv のように、単純にシステムの状態を表示するだけのコマンドもたくさんあります。 このような、画面上に表示される「結果」をそのままファイルに書き込み、保存するには、次のように行います。
↓
リダイレクト処理で作成した"env_var.dat"ファイル このように、 標準出力 を、ファイルや デバイス (プリンタなど)に書き出したり、あるいはその逆にファイルやデバイス(キーボードなど)を出力として、コマンドなどに入力として送る作業をリダイレクト処理といいます。 |
|||||||||
|
|
一般に、「コマンド→ファイルやデバイス」を 出力のリダイレクト 、「コマンド←ファイルやデバイス」を 入力のリダイレクト と呼びます。 一方のパイプ処理は、 「コマンドの実行結果を次のコマンドに受け渡して実行させる手段。」 です。 コマンドの書式は一般的に、 コマンド [オプション] [引数] Enter です。 これだけでは、一つのコマンドラインに対しては一つの命令しか適用することができませんが、 "|" 記号を使って複数のコマンドラインを繋ぐことで、 「左側のコマンドの処理結果を右のコマンドで再処理する」 ということが可能になる訳です。
|
|||||||||
出力のリダイレクトコマンド 操作で比較的良く用いられるのは出力のリダイレクトです。上のパートで行ったのは、代表的な出力のリダイレクトの例です。 出力のリダイレクトは、 ">" または ">>" を記号として使います。 一般的な使用方法は、 [コマンド] >または>> [ファイル名または デバイス名] となります。 ">"、と">>"の違いは、">"が「出力先の元の内容を破棄して新しい出力に置き換える」のに対し、">>"は「出力先の元の内容に新しい出力を追記する」というところにあります。 例えば、現在の日付を画面出力する date コマンドと、 df コマンドを利用して、
と実行すれば、"home_df.log"は次のように作成されます。
しかし、もう一度
を実行してしまうと、"date > home_df.log"という「出力先の元の内容を破棄して新しい出力に置き換えるリダイレクト処理」によって、前回の出力結果は消去されてしまいます。 |
||||||||||
|
|
そこで二度目からは次のように、すべて">>"で「追記のリダイレクト処理」を行うように命令を変更します。
すると以下のように、"home_df.log"には過去のデータがずっと残るようになります。
出力のリダイレクトは cat コマンドと組み合わせるととても便利です。 例えば、 Postfix の設定がおかしくなって、設定ファイルである "/etc/postfix/main.cf" を完全にデフォルト状態に戻したい場合、当たり前に考えると、 1."/etc/postfix/main.cf"の パーミッション を確認する。 2."/etc/postfix/main.cf"を削除する。
3.予めとっておいたバックアップファイルである
"/etc/postfix/main.cf.org"
という手順をとってしまいがちですが、出力のリダイレクトとcatコマンドを使うと同様の操作が、
と、たったこれだけで行うことができます。
|
|||||||||
入力のリダイレクト入力のリダイレクトは、 "<" または "<<" を記号として使います。 一般的な使用方法は [コマンド] <または<< [ファイル名または デバイス名] となります。 処理の方向としては出力のリダイレクトと逆ですから、 |
||||||||||
|
|
「[ファイル名またはデバイス名]の内容を[コマンド]で処理する。」 という意味になります。 例えば、 WBEL や CentOS の起動時に ハードウェア の動作チェックを行った結果を記録した、 "/var/log/dmesg/" というテキストファイルがあります。
"/var/log/dmesg/"の例 システムによっては数百行にも及ぶこのファイルから、目的の行を探し出すのは大変な作業ですが、ここで grep コマンド と「入力のリダイレクト」を組み合わせて、目的の行だけを簡単に抽出することができます。
更に、これに「出力のリダイレクト」を組み合わせれば、処理の結果をファイルに書き出すことができます。
↓
この「入力のリダイレクト」という処理は、実はコマンド入力操作では「出力のリダイレクト」のような有用性はあまりありません。 実際のところ、入力元のデータが テキスト ファイルである場合には、以下のパートで示す パイプ処理 で代用できるケースが多く、そのほうが「入力のリダイレクト」よりも直感的に解りやすいと思います。 ただし、例えば対話型のコマンドに対して連続的に引数を渡したりする場合などは必須ですから、「そういう使い方がある」程度に覚えておけばよいと思います。
|
|||||||||
パイプ処理本来 「一行に1コマンド」 である コマンド シェル の命令を、実行結果を次に渡しながら連続して実行する手段が パイプ処理 です。書式は、 コマンド1 | コマンド2 | コマンド3 .... Enter となります。もちろん、それぞれのコマンドにはそれぞれのオプションと引数を用いることができます。 つまり、コマンド1の実行結果をそのままコマンド2に渡して実行し、更にコマンド3に渡して...、という処理を行うことになります。 例えば、上の「入力のリダイレクト」で例として示した、
は、パイプ処理を用いると、 cat コマンドを使って全く同じことを次のようにして実行できます。
このコマンドラインの意味は、 「catコマンドで表示する"/var/log/dmesg"の内容を、 grepコマンドに送って"CPU"を含む行だけ抽出し、"dmesg_cpu.txt"に書き出す。」 となります。 |
||||||||||
|
|
「入力のリダイレクト」は、入力元としてファイルやデバイスしか扱うことができませんから、処理対象は例えば"/var/log/dmesg"のようにファイルになっていなければなりません。しかも、それに対して実行可能なコマンドは一つだけ(この例ではgrep)です。 しかし、パイプ処理は複数のコマンドを連続して繋ぐことができますから、コマンドの実行結果をいちいちファイルに書き出す必要はありません。 例えば、 df 、 grep 、 sort 、 mail の四つのコマンドをパイプで繋げば、以下のコマンドライン一つで 「 ハードディスク の使用状態を デバイス 名順に並べた一覧ファイルをメールで"tanaka"に送る。」 という処理を行うことができます。
↓
"tanaka"宛てに送られたメールの内容 もしパイプ処理を使わずに、リダイレクト処理だけで同じことをしようとすると、次のようになります。
パイプ処理はこのように、複雑な処理を一気に行うにはとても有用な手段です。 特に、膨大な容量になる サーバー アプリケーション のログファイルの解析などには威力を発揮しますので、活用することをお勧めします。
|
|
|
| このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。 |
| ”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。 |