Unixで利用可能な「フィルタコマンド」について知りたいです。私はこれについて混乱しています:
- 「フィルタコマンド」の目的は何ですか?
- Unixではどのフィルタリングコマンドを使用できますか?
私はオンラインでいくつかの本/記事を読んで、いくつかの本ではフィルタコマンドを見つけ、いくつかの本では別のコマンドを見つけました。
答え1
文脈がないので、質問した内容が何なのかよくわかりません。 「従来の」Unixツールは標準入力から読み取って標準出力に書き込むので、パイプ(つまり|コマンド)を使用して一緒に接続できます。
ls | grep "banana" | more
標準入力から読み出し、標準出力に書き込むのはフィルタです。
答え2
実際、フィルタコマンドはUNIXのほとんどすべてのコマンドラインプログラムです。
STDIN
読み書きできるプログラムはすべてSTDOUT
フィルタとして使用できます。
しかし例外があります。 1つの例外は、出力時にアーカイブを生成するcpio
ためにファイルのリストを取得することです。STDIN
読み取れないように見えるいくつかのコマンドがありますが、これらのコマンドが読み取りまたは書き込みのためのファイル引数としてSTDIN
使用されることを確認する必要があります。たとえば、次のようになります。-
STDIN
STDOUT
cat
$ cat f - g
fの内容を印刷してから、標準入力、gの内容を印刷します。
ただし、プログラムでこれを使用しなくても、次のことができます。まだプログラムがフィルタとして機能するように強制するのが一般的です。
たとえばwget
、プログラムを次に出力したいとしますSTDOUT
。
$ wget -O /dev/stdout http://stackoverflow.com/ | less
つまり:/dev/stdin
、および/dev/stdout
を/dev/stderr
ファイルとして使用して、プログラムに標準IO記述子を読み書きすることができます。
もう1つの注意:パイプはランダムに長くなる可能性があるため、あるプログラムから別のプログラムにパイプしてデフォルトで長いフィルタリストを作成できます。
$ cat file | xz | ccrypt &>/dev/null