2016-05-28 4 views
0

私はuniで 'operational Systems'試験を勉強しています。パイプの使用法(|)を理解するのに苦労しています。 インターネットで見つかった例を次に示します。使用法unix

ps -ax | grep Finder
psコマンドを使用して、システム上で実行中のプロセスのリストを取得し、grepにリストを渡して "Finder"を含む行を検索します。 (通常は、2見つける:ファインダー、ファインダーとgrepを実行するプロセスを。)

何私が最初ps -axを書いて、次の行grep finderであれば?それは同じ結果を持っていないでしょうか?なぜ私はそれらを一緒にパイプしなければならないのですか?

ps:UnixシェルコマンドでのBigginerとその動作方法。

+2

* "ps -axを書き、次のgrep finderに書き込むとどうなりますか?同じ結果が出るのはなぜですか?" *試してみませんか? – jDo

+0

私は環境のようなunixを持つために私のPCにパテを実行する、私はそれに接続することができない瞬間に、時々それを行います。いつでも私はそれを試してみることができます – Georgez

+0

クールクール。 VirtualBoxのようなVMでLinuxを動かすこともできます.Windowsを使わなければならない場合は、かなり便利です。 – jDo

答えて

3

入力と出力のリダイレクトはすべてです。

ps -ax > processesと入力する場合は、ファイルprocessesをすべてのプロセスのリストとともに作成します。これは出力をリダイレクトしています。代わりに画面に表示されるすべてのデータがファイルに書き込まれます。

grep Finder < processesと入力した場合は、ファイルprocessesでFinderという単語を検索します。これは入力をリダイレクトしています。

パイプは両方を行います。左側のコマンドの出力をリダイレクトし、右側のコマンドの入力をリダイレクトします。

$ ps -ax | grep Finder 

は、削除するなし一時ファイルで1行にすべてを除く

$ ps -ax > temp 
$ grep Finder < temp 

のようなものです。

+0

完璧な説明、ありがとうロットメイト。 – Georgez

1

Unixはファイルベースのシステムです。また、出力をリダイレクトする場所を指定しない限り、画面に表示されます。

ps axと入力すると、実行中のプロセスがすべて画面に表示されます。 ps axと入力してgrepと入力すると、すべての処理が完了し、grepには少なくとも2つのパラメータ、つまりkeywordfilenameが必要となるため、エラーが発生します。

したがって、2つのステップを実行する必要があります。

ps ax > filename 
grep finder filename 

これで結果が得られます。

パイプ|は、出力を左側のファイルから右側のコマンドにリダイレクトします。したがって、2つのステップをマージすることができます。

上記の代わりにps ax|grep finderと言うことができます。これはps axの出力をgrepコマンドに渡します。

このように、ファイル名をgrepに直接指定していないことに注意してください。代わりにps axの出力をファイルとして使用するように指示しています

1

いいえ、結果は上記の2つのケースで同じではありません。やってみて。

ps -axそれ自体がその結果を標準出力に送信します。単独で grep Finderは全て

pipeプロセス間通信のために使用することができる単方向データ・チャネルを作成するに動作しないであろう。したがって、ps -ax | grep finderは、本質的に入力ストリームとしてps -axの出力をgrep Finderコマンドにリダイレクトします。このコマンドは、そのストリーム内の文字列 'Finder'を検索します。

関連する問題