パイプは、Linux の非常に強力なコア機能です。プログラムを連鎖させることにより、少数のツール セットを使用して複雑なタスクを実行できます。しかし、配管が常に最良の解決策であるとは限りません。必要がない場合は、複雑さが増し、オプションの効率が低下する可能性があります。
多くの Linux コマンドには、別のコマンドのジョブを実行できるオプションがあります。たとえば、sort コマンドが存在する場合でも、ls は独自の出力を並べ替えることができます。どの一般的なパイプラインにより優れた代替手段があるのか、またそれらのロックを解除する方法を見つけてください。
グレップ |トイレ
パイプラインは共通ですが、grep には独自のカウンターがあります
このパターンは非常に一般的ですが、その理由の 1 つは、これがトイレの優れたデモンストレーションであるためです。行や文字をカウントできる「ワード カウンター」ツールは、実際の結果よりも結果の数を気にすることが多いため、多くのパイプラインによく適合します。
grep -E "^.+() {$" funcs.sh | wc -l
wc は結果の数をカウントする完璧な仕事をしますが、grep は -c または –count オプションを使用してそれ自体を行うことができます。
grep --count -E "^.+() {$" funcs.sh
-c オプションは、明らかに初期の頃から grep の機能であったため、このパターンが定着する言い訳はありませんでした。
猫ファイル |何でも
簡単に避けられる猫の無駄な使い方
もう 1 つ、避けられるパイプの非常に一般的な使用方法です。 cat コマンドは「連結」を意味しますが、何かを結合する必要がないので便利です。デフォルトでは、それ自体が 1 つのファイルであっても、ファイルは標準出力に書き込まれます。
これは、ファイルの内容を別のコマンドへの入力として渡したいときに、cat に手を伸ばしたくなることがよくあることを意味します。
cat file > wc -l
ただし、wc のようなコマンドは、渡された各ファイル引数から入力を読み取るため、cat からのパイプは必要ありません。
wc -l file
しかし、コマンドがファイル引数をサポートしていない場合はどうなるでしょうか?それなら猫を使うしかないですよね? Linux にはファイル リダイレクト オペレーターが組み込まれているため、このような場合でも cat は不要です。
tr ' ' '\n'
特に猫のパイピングが筋肉の記憶に残っている場合は、少し慣れる必要がありますが、効果的にリダイレクトする方法を学ぶことで、コマンドラインの機会がたくさん広がります。
ls |選別
組み込みの並べ替えにより新たなメリットがもたらされる
sort コマンドもパイプに最適なコマンドです。これは、ご想像のとおり、受信したすべての入力を並べ替えて標準出力に送信するフィルターです。
したがって、表に近い形式で出力を生成できる ls のようなコマンドの場合、非常に便利です。実際、sort の -k プロパティは、並べ替えるフィールドの番号を指定するため、この目的に非常に汎用的です。
それでも、少なくとも ls の場合は、実際にこれを使用する必要はありません。ls は、ファイル サイズに基づいて並べ替える独自のオプションをサポートしています。
ls -lrS
-r オプションを使用すると、ソートの方向が逆になり、最大のファイルが一番下に表示されます。これはおそらく希望どおりです。
ls に組み込まれているソートを使用すると、小さいながらも重要な利点がもう 1 つあります。 ls の出力をパイプ処理して sort に渡すと、色の書式設定は失われますが、ls に組み込まれたsort によって色書式設定が維持されます。
頭 |しっぽ
単一のコマンドで行範囲を抽出する
head コマンドと tail コマンドは、それぞれ入力の最初または最後の n 行を抽出するのに最適です。これらを組み合わせると、ファイルから特定の範囲の行を抽出するための巧妙なトリックになります。
これは賢いですが、ストリーム エディターである sed でも同じことができます。
sed -n '102,105p'
このコマンドと前のパイプラインは両方ともファイルから行 102 ~ 105 をフェッチしますが、sed バージョンでは必要な計算が少なくなることに注意してください。
グレップ |頭
大きな結果セットを管理しやすくし、grep による余分な作業を節約します。
grep の結果が 1 つである場合もあれば、数百以上の結果がある場合もあります。処理する grep 出力が大量にある場合は、自然にもう一度 head コマンドに手を伸ばし、特定の数の後で停止します。
grep firefox access_log | head -n 10
ただし、これは grep の -m (–max-count) オプションのおかげで不要であり、まったく同じことを行います。
grep --max-count=10 firefox access_log
並べ替え |ユニークな
コマンドが 1 つ少ない従来のパイプライン
ここに、よく見かけるパイプラインがもう 1 つあります。これがデータ行の並べ替えと重複排除に最適な方法 (おそらく唯一の方法) であると思われるかもしれません。
sort
しかし、厄介な名前の uniq をまったく使用せずに別の方法があります。 sort コマンドには、-u (–unique) を使用するオプションとして一意性が組み込まれています。
sort --unique
常に代替案を検討する
Linux は柔軟なシステムであり、さまざまなタスクを実行するために組み合わせられる小さなツールが多数あります。これによりかなりの柔軟性が得られるため、必ず他の方法を試し、違いを理解し、新しいアプローチを学ぶ準備をしてください。
このテーマについてさらに詳しく知りたい方は以下をご覧ください