ホームページ  >  記事  >  運用・保守  >  Linux のパイプ文字は何をするのでしょうか?

Linux のパイプ文字は何をするのでしょうか?

青灯夜游
青灯夜游オリジナル
2023-04-14 11:36:574403ブラウズ

Linux では、パイプ文字「|」は複数の命令を接続する役割を果たします。前の命令の出力ストリームは、後続の命令の操作対象として使用されます。コマンドの形式は「命令 1」です。 | 命令 2 | ...」の場合、このコマンドの後続の命令は、実行する前に標準入力ストリーム コマンドを受信できる必要があります。パイプ文字は主に複数のコマンドの処理に使用され、前のコマンドの出力結果が後続のコマンドの入力として使用されます。

Linux のパイプ文字は何をするのでしょうか?

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

パイプラインは Linux における非常に重要な通信方法であり、あるプログラムの出力を別のプログラムの入力に直接接続します。パイプは、多くの場合、名前のないパイプを指します。名前のないパイプは、関連するプロセス間でのみ使用できます。これが、名前付きパイプとの最大の違いです。

有名なパイプは名前付きパイプまたは FIFO (先入れ先出し) と呼ばれ、関数 mkfifo() で作成できます。

Linux の |パイプライン文字

| パイプ文字は複数の命令を接続するために使用され、前の命令の出力ストリームは命令の操作対象は「命令 1 | 命令 2 | ...」のコマンド形式となっており、このコマンドの後続の命令は標準入力ストリームコマンドを受信できる状態でなければ実行できません。

パイプライン コマンドの演算子は「|」です。これは、前の命令によって送信された正しい出力情報のみを処理でき、エラー情報を直接処理する機能はありません。そして、操作対象として次の命令に渡されます。

構文:

指令1 | 指令2 | …

パイプ文字は主に複数のコマンドの処理に使用され、前のコマンドの出力結果が後続のコマンドの入力として使用されます。簡単に言うと、工場の組立ラインのようなもので、一つの工程が完了すると、次の工程に送られていきます...

例: hello.sh ファイルを並べ替えて、 「better」を含む行を取り出します。

コマンドは次のとおりです: cat hello.sh | sort | uniq | grep 'better'

  • ##テキストを表示
  • 並べ替え
  • ##重複排除
  • フィルター

  • ##【1 】最初のプロセス - テキストの表示
最初に cat コマンドを使用してテキストを表示します。画面に表示される内容は cat コマンドの出力結果です

[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]#
Linux のパイプ文字は何をするのでしょうか?[ 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 のコマンド ライン パラメーターが空の場合、デフォルトでは前者が使用されます コマンドの出力結果がこのコマンドの入力として使用されます

コマンドを実行します: cat a.txt | sort b.txt

[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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。