Linux では、パイプ文字「|」は複数の命令を接続する役割を果たします。前の命令の出力ストリームは、後続の命令の操作対象として使用されます。コマンドの形式は「命令 1」です。 | 命令 2 | ...」の場合、このコマンドの後続の命令は、実行する前に標準入力ストリーム コマンドを受信できる必要があります。パイプ文字は主に複数のコマンドの処理に使用され、前のコマンドの出力結果が後続のコマンドの入力として使用されます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
パイプラインは Linux における非常に重要な通信方法であり、あるプログラムの出力を別のプログラムの入力に直接接続します。パイプは、多くの場合、名前のないパイプを指します。名前のないパイプは、関連するプロセス間でのみ使用できます。これが、名前付きパイプとの最大の違いです。
有名なパイプは名前付きパイプまたは FIFO (先入れ先出し) と呼ばれ、関数 mkfifo() で作成できます。
|
パイプ文字は複数の命令を接続するために使用され、前の命令の出力ストリームは命令の操作対象は「命令 1 | 命令 2 | ...」のコマンド形式となっており、このコマンドの後続の命令は標準入力ストリームコマンドを受信できる状態でなければ実行できません。
パイプライン コマンドの演算子は「|
」です。これは、前の命令によって送信された正しい出力情報のみを処理でき、エラー情報を直接処理する機能はありません。そして、操作対象として次の命令に渡されます。
構文:
指令1 | 指令2 | …
パイプ文字は主に複数のコマンドの処理に使用され、前のコマンドの出力結果が後続のコマンドの入力として使用されます。簡単に言うと、工場の組立ラインのようなもので、一つの工程が完了すると、次の工程に送られていきます...
例: hello.sh ファイルを並べ替えて、 「better」を含む行を取り出します。
コマンドは次のとおりです: cat hello.sh | sort | uniq | grep 'better'
[root@linuxforliuhj test]# cat hello.sh hello this is linux be better be better i am lhj hello this is linux i am lhj i am lhj be better i am lhj have a nice day have a nice day hello this is linux hello this is linux have a nice day zzzzzzzzzzzzzz dddddddd gggggggggggggggggggg[root@linuxforliuhj test]#[ 2] 2 番目のプロセス — 並べ替え
前の cat コマンドによって出力された結果をパイプライン経由で sort コマンドにスローします。これにより、sort コマンドは前の cat コマンドによって出力されたテキストを並べ替えます
[root@linuxforliuhj test]# cat hello.sh | sortbe better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz[root@linuxforliuhj test]#
[3] 3 番目のプロセス — 重複排除
以前の uniq 紹介記事で、sort と uniq を組み合わせて使用する場合にのみ効果的な重複排除が達成できると述べました。パイプラインを介して処理するために uniq に変換するため、uniq は並べ替えられたデータを処理します。テキストは効果的に重複排除が可能です。
[root@linuxforliuhj test]# cat hello.sh | sort | uniqbe better dddddddd gggggggggggggggggggg have a nice day hello this is linux i am lhj zzzzzzzzzzzzzz[root@linuxforliuhj test]#
[4]4 番目のステップ - フィルタリング
フィルタリングの最後のステップもフィルタリングです。前のコマンド、uniq コマンドを処理した後のテキスト出力
[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better'be better[root@linuxforliuhj test]#ここがポイントです! ここがポイントです !
上記の cat、sort、uniq、grep およびその他のコマンドはすべてパイプ文字をサポートしています。標準入力から処理対象のテキストを読み取ります (つまり、コマンドからパラメータを読み取ります)。rm、kill、その他のコマンドなどの一部のコマンドでは、標準入力からのパラメータの読み取りはサポートされていませんが、コマンド ラインからのパラメーターの読み取りをサポートします (つまり、削除するファイルまたはディレクトリは rm コマンドの後に指定する必要があります。kill コマンドの後には、強制終了するプロセス番号を指定する必要があります。など)
それでは、どのようなコマンドがパイプをサポートしており、どのようなコマンドがパイプをサポートしていないのでしょうか?
一般に、sort、uniq、grep、awk、sed などのテキストを処理するコマンドはすべてパイプをサポートしますが、テキストを処理しないコマンド (rm や ls など) はパイプをサポートしません。
[root@linuxforliuhj test]# cat hello.sh | sortbe better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz[root@linuxforliuhj test]#ソート後にパラメータがない場合、パイプ文字によってスローされた前のコマンドの出力が処理されます (つまり、前のコマンドの標準出力がこのコマンドの標準入力として使用されます) )
[root@linuxforliuhj test]# lsbeifen.txt hello.sh mk read.ln read.sh read.txt sub.sh[root@linuxforliuhj test]# ls | grep read.shread.sh[root@linuxforliuhj test]# ls | grep read.sh | rmrm: missing operand Try 'rm --help' for more information.[root@linuxforliuhj test]#
When 削除されたファイルが rm の後に指定されていない場合、パラメーターが欠落しているとしてエラーが報告されます。そのため、rm などのコマンドは、標準入力からのパラメーターの読み取りをサポートしません。これらは、標準入力からのパラメーターの指定のみをサポートします。コマンドライン、つまり削除されたファイルを指定します。
標準入力とコマンドラインパラメータではどちらが優先されますか?
次の 2 つのファイルがあります[root@linuxforliuhj test]# cat a.txt aaaa dddd cccc bbbb[root@linuxforliuhj test]# cat b.txt 1111333344442222[root@linuxforliuhj test]#コマンドを実行します: cat a.txt | sort
[root@linuxforliuhj test]# cat a.txt | sortaaaa bbbb cccc dddd[root@linuxforliuhj test]#sort のコマンド ライン パラメーターが空の場合、デフォルトでは前者が使用されます コマンドの出力結果がこのコマンドの入力として使用されます
[root@linuxforliuhj test]# cat a.txt | sort b.txt 1111222233334444[root@linuxforliuhj test]#sort のコマンド ライン パラメーター (ここでは b.txt) が空でない場合、sort は標準入力のパラメーターを読み取りませんが、コマンド ライン パラメーターを読み取ります。 コマンドを実行します: cat a.txt | sort b.txt -
[root@linuxforliuhj test]# cat a.txt | sort b.txt -1111222233334444aaaa bbbb cccc dddd[root@linuxforliuhj test]#" - "は、標準入力、つまりコマンド cat a.txt の出力を意味します。これは、ファイル b.txt と標準入力を一緒に並べ替えることと同じです。 a.txt b.txt
の並べ替えと同等
[root@linuxforliuhj test]# sort a.txt b.txt1111222233334444aaaa bbbb cccc dddd[root@linuxforliuhj test]#
思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!
相关推荐:《Linux视频教程》
以上がLinux のパイプ文字は何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。