パイプライン機能は Linux 哲学の背後にある原動力の 1 つであり、その 1 つの特徴が作業方法のすべてを変えます。あるコマンドの出力を別のコマンドの入力に接続すると、小さなプログラムを連鎖させて、各部分の合計よりもはるかに優れたツールを作成できます。
パイプの価値を理解するのに苦労している場合、またはパイプの実際の使用法をもう少しよく理解したい場合は、これらの一般的で効果的な例より始めるのに適した場所はありません。
グレップ |少ない
データをフィルタリングし、結果をページングする
一般的な grep コマンドは、特に試行錯誤を使用して正規表現を調整している場合、多くの結果を返す可能性があります。のようなコマンド grep '(Qq)' /usr/share/dict/words 複数の出力画面が生成されます。
結果の最後のページ以外を表示するには、ポケットベルを使用する必要があります。 grep コマンドはこれを直接サポートしていませんが、任意の出力セットをページャにパイプして、ページごとに表示できます。
grep '(Qq)' /usr/share/dict/words | less
尻尾 | grep
tail コマンドは、ファイル (ほとんどの場合はログ ファイル) の最後の行を調べたい場合に便利です。その -f オプションは、ファイル (または標準入力) のライブ ビューを提供し、ファイルに追加された行を出力し続けます。 Apache アクセス ログなどのログ ファイルの監視に最適です。
ただし、このようなログ行をフィルタリングして、URL、特定のメッセージ、応答コードなどに一致する特定のデータを探したい場合があります。 grep ツールはこれに最適で、次のようなパイプラインの tail と完全に連携します。 tail -f ファイル | grepパターン。
これらのコマンドの順序を忘れて、逆の動作を期待するかもしれません。ただし、grep を tail -f にパイプすると、入力がパイプの場合は tail が -f を無視するため、パイプラインがすぐに終了します。
歴史 | grep
以前に実行したコマンドへのクイックアクセス
History コマンドは非常に便利で、以前に実行したコマンドにアクセスできます。しかし、あなたの歴史には多くの詳細が含まれています。 bash のデフォルトでは、これは最後の 500 個のコマンドです。特に無制限の履歴を設定している場合は、さらに多くなる可能性があります。
これは、本当に関心のある行のみを grep でフィルタリングするもう 1 つの絶好の機会です。
history | grep ls
並べ替え |ユニークな
構造化データからの簡単な概要情報
sort フィルターと uniq フィルターは、他のコマンドと組み合わせると非常に便利なので、パイプラインで何度も使用されることになります。 uniq は「unique」の略で、どちらのコマンドも名前から想像されるとおりの動作をします。
以下は、どの IP アドレスが Web サイトにアクセスしたか、および各 IP アドレスがリクエストを送信した回数を示すパイプラインの例です。
This pipeline involves three commands, the first of which—cut—extracts the IP address field from a standard Apache access log. sort will order all the lines of input that are piped to it, while uniq removes duplicates and, with the -c option, counts the total number. You’ll end up with a nice summary:
df | tee
Get disk space reports on screen and in a file
The tee command was made for the pipeline; its core operation is to copy its standard input to standard output. That might seem useless, except for the one extra feature it provides: saving that same input to one or more files.
Normally, to save the output of a command, you can use redirection:
echo "Hello world" > myfile.txt
ただし、その出力をリダイレクトすると、画面上で表示したり、他の場所にパイプしたりすることができなくなります。
tee コマンドを使用すると、出力をファイルに保存しながら、さらに処理したり画面に出力したりするためにパイプラインに保持したままにすることができます。
echo "Hello world" | tee myfile.txt
出力を一度に複数のファイルに保存したい場合は、tee に複数の引数を指定することもできます。
tee は、コマンドの出力を確認しながら同時に記録も残しておきたい場合に最適です。たとえば、df コマンドを使用してディスク使用量をレポートできます。
df -h | tee diskusage.txt
出力を tee にパイプすると、出力は引き続き画面に表示されますが、ファイルに保存された永続的なレコードも取得されます。
エコー | xargs
ファイルを複数のディレクトリにコピーする
xargs コマンドは tee に少し似ています。これは、コマンド ライン自体の動作を変更する「メタ コマンド」です。 xargs を使用すると、その入力を別のコマンドの引数に挿入できるため、より複雑なパイプラインの一部としてよく使用されます。
デフォルトでは、xargs はスペースで区切られた各値を引数に変換し、渡されたコマンドに追加します。次の例のように、 -n オプションを使用してコマンドを複数回呼び出し、毎回引数のスライスを渡すこともできます。
echo "dir1 dir2" | xargs -n 1 cp -v myfile.md
cp コマンドはファイルを複数のディレクトリにコピーしないため、このパイプラインは xargs に一度に 1 つの引数を指定するように指示し、次のように展開します。
cp -v myfile.md dir1
cp -v myfile.md dir2
カール | jq
Web APIから取得したプロセスデータ
コマンドラインから Web API にアクセスするためにcurlを使用したことがある場合は、さらに処理する必要があるJSONを含む長い応答に直面したことがあるでしょう。
curl コマンドはあらゆる種類の Web リクエストの処理に優れていますが、さらに処理するには、この場合はコマンドライン JSON プロセッサである jq などの他のコマンドが必要です。 jq を使用すると、JSON データをより読みやすい形式または適切な形式に変換するフィルターを作成できます。たとえば、最も簡単な方法は、アイデンティティ演算子 (.) を使用して入力をコピーし、それを検証してフォーマットすることです。
curl -s https://catfact.ninja/fact | jq '.'
あらゆる種類のフィルターを作成して、必要に応じてデータをスライスすることができます。上の例は、fact プロパティと length プロパティを持つ単一のオブジェクトを返します。これは、単純なフィルターで抽出できます。
curl -s https://catfact.ninja/fact | jq -r '.fact'
du -sh * |ソート -h
最大のファイルとディレクトリを見つける
du プログラムは、渡されたファイルとディレクトリの合計サイズを報告します。
これは素晴らしいことですが、おそらく最も多くのディスク領域を占有しているファイルを探していることでしょう。残念ながら、du には出力を並べ替える組み込みの方法がありません。幸いなことに、古き良きsortコマンドがあります。
sort は、入力を順序付けして出力として出力するフィルター コマンドです。これを使用して、du の標準出力を並べ替えることができます。
du -s * | sort
これは問題ありませんが、出力はブロック単位になるため、あまり読みにくくなります。より読みやすいサイズで同じことを行うには、両方のコマンドで -h オプションを使用します。
du -sh * | sort -h
出力が自然にソートされない場合でも、ソートは形式を認識してメガバイトの前にキロバイトをソートするなど、十分賢い機能を備えています。
日付 | md5sum
適切なパスワードを生成する最も簡単な方法
私はパスワードを生成するときにいつもこれに手を伸ばします。迅速かつ効果的で、覚えやすいです。 md5sum は、MD5 アルゴリズムを使用して入力をハッシュし、結果を出力します。
16 進文字のランダムなセットが必要な場合は、これが頼りになります。ランダムな CSS カラーの生成など、さまざまな目的に使用できますが、パスワードの生成にも非常に便利です。
これは、パスワードを選択する最も安全な方法ではない可能性があります。特にリスクの高い用途の場合は、パスワードを選択する前にセキュリティに関するアドバイスを参照してください。
実践すれば、共通のパイプラインが自然になるでしょう
これまで使用したことのないパイプラインがある場合、慣れるまでに時間がかかることがあります。役に立ちそうなことをどれでも実践してみると、しばらくすると、grep やsort を頻繁に行うようになるので、それらなしでどうやって生きていたのかと不思議に思うでしょう。
このテーマについてさらに詳しく知りたい方は以下をご覧ください