GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコマンドラインでのパイプの操作

申し訳ありませんが、コマンドラインは恐竜で消滅することも、ドードーや伝書鳩で消滅することもありませんでした。 Linuxのコマンドラインは健在で、今もなお強力です。これは、情報をすばやく収集して処理し、新しいスクリプトを作成し、システムを構成するための効率的な方法です。

最も強力なシェル演算子の1つは、パイプ( | )。パイプは、あるコマンドから出力を受け取り、それを別のコマンドの入力として使用します。また、パイプコマンドは1つに限定されません。何度でもスタックしたり、出力記述子やファイル記述子がなくなるまでスタックしたりできます。

配管の主な目的の1つは、フィルタリングです。パイピングを使用して、大きなファイルの内容をフィルタリングします。たとえば、特定の文字列や単語を検索します。この目的が、パイプの最も一般的な使用法にコマンド grepが含まれる理由です。 およびsort 。しかし、あなたはそれらの場合に限定されません。ストリーム入力を受け入れる任意のコマンドに出力をパイプできます。このプロセスがどのように機能するかを示す例として、理論的な例を見てみましょう。

$cmd1 | cmd2

両方のcmd1 およびcmd2 結果を画面に出力するコマンドラインユーティリティです( stdout )。ただし、あるコマンドの出力を別のコマンドにパイプする場合、 cmd1からの情報 画面への出力は生成されません。パイプは、その出力を入力として cmd2にリダイレクトします 。

注: パイプを混同しないでください( | )ファイルリダイレクトを使用したリダイレクト(> )および( < )。 (ファイルリダイレクトの例: cmd1> file またはcmd1 。)ファイルリダイレクトは、画面ではなくファイルに出力を送信するか、ファイルから入力をプルします。

配管がどのように機能するかの実際の例をいくつか見てみましょう。

NICの確認

ネットワークインターフェイスカード(NIC)の1つが192で始まるIPアドレスを持っているかどうかを知る必要があるとしましょう:

$ifconfig | grep 192

inet 192.168.1.96 netmask 255.255.255.0 broadcast 192.168.1.255

grepへの簡単なパイプを使用してシステム上にあるライブNICを確認することもできます。 :

$ifconfig | grep UP

enp0s3:flags =4163 mtu 1500
lo:flags =73 mtu 65536

「RUNNING」または「RUN」をgrepして、同じ情報を表示することもできます。

権限の調査

/ etcの下にあるディレクトリの数を知りたいかもしれません。 ルートで書き込み可能:

$sudo ls -lR | grep drwx

結果はここにリストするには長すぎますが、表示されたリストからわかるように、結果はたくさんあります。あなたはまだいくつあるかを知る必要があり、視覚的なカウントには長い時間がかかります。簡単なオプションは、 lsの結果をパイプすることです wcへのコマンド (単語数)コマンド:

$sudo ls -lR | grep drwx | wc -l <​​/ code>

285

-l <​​/ code> スイッチは行数を表示します。あなたの数は異なるかもしれません。このリストは、「RHEL 8servernoGUI」の新規インストールからのものです。

[Red Hat Enterprise Linuxを試してみませんか?今すぐ無料でダウンロードしてください。]

ファイルのカウント

grepを使用する必要はありません いつも。たとえば、 / etc内のファイルの数を一覧表示できます これを含むディレクトリ:

$ls | wc -l <​​/ code>

229

繰り返しになりますが、結果は異なって見えるかもしれませんが、コマンドが少数のファイルを返す場合は何かが間違っていることがわかります。

プロセスの特定

パイプを使用して複雑なタスクを実行することもできます。すべてのsystemdのプロセスID(PID)を一覧表示します 関連するプロセス:

$ps -ef | grep systemd | awk'{print $ 2}'

1
471
500
608
631
7449
7494
17242

awk コマンドの$2 出力は、2番目の(PID)列を psから分離します 指図。最後のエントリPID17242に注意してください は、実際には grepのPIDです。 ここの完全なリスト結果からわかるように、この情報を表示するコマンド:

khess 17242 7502 0 09:40 pts / 0 00:00:00 grep --color =auto systemd

結果からこのエントリを削除するには、パイプ演算子をもう一度使用します。

$ps -ef | grep systemd | awk'{print $ 2}' | grep -v grep

-v スイッチはgrepに通知します 次の文字列を含む行を反転または無視するコマンド。この場合は、「grep」という単語を含む行です。

結果の並べ替え

パイプ演算子のもう1つの一般的な使用法は、 sortにパイプして結果を並べ替えることです。 指図。 contacts.txtの名前のリストを並べ替えるとします 。まず、並べ替える前に、ファイル内の内容を確認してみましょう。

$ catcontacts.txt

Bob Jones
Leslie Smith
Dana David
Susan Gee
Leonard Schmidt
Linda Grey
Terry Jones
Colin Doe
ジェニーケース

次に、リストを並べ替えます:

$catcontacts.txt |並べ替え

Bob Jones
Colin Doe
Dana David
Jenny Case
Leonard Schmidt
Leslie Smith
Linda Grey
Susan Gee
テリージョーンズ

-r を使用すると、並べ替え順序を逆にすることができます スイッチ:

$catcontacts.txt | sort -r

Terry Jones
Susan Gee
Linda Grey
Leslie Smith
Leonard Schmidt
Jenny Case
Dana David
Colin Doe
ボブジョーンズ

これらのいずれかの出力は、期待したものでしたか?デフォルトでは、 sort コマンドは最初の単語または列で辞書の並べ替えを実行します。そのため、 Bob Jones およびTerryJones 次々にリストされていません。

-kを使用して2番目の列で並べ替えることができます 並べ替える列を指定して切り替えます。リストでは2列目です:

$catcontacts.txt | sort -k2

Jenny Case
Dana David
Colin Doe
Susan Gee
Linda Grey
Bob Jones
Terry Jones
Leonard Schmidt
レスリー・スミス

連絡先リストが長く、このリストに重複するエントリが含まれていると思われる場合は、リストをパイプして sortに送ることができます。 次に、 uniq それらの重複を削除するには:

$catcontacts.txt |並べ替え| uniq

このコマンドは一意のエントリのみを表示しますが、結果は保存されません。ファイルを並べ替え、一意のエントリをフィルタリングしてから、新しいファイルを保存するには、次のコマンドを使用します。

$catcontacts.txt |並べ替え-k2| uniq> contact_list.txt

パイプ演算子とファイルリダイレクト演算子は異なることを行うことに注意してください。

まとめ

コマンドラインのパワーを味わったので、責任を果たせると思いますか?コマンドラインユーティリティは、グラフィカルなユーティリティよりも柔軟性があります。また、一部のタスクでは、グラフィカルに同等のものはありません。

コマンドラインの動作を学ぶ最良の方法は、実験することです。たとえば、 sort コマンドは、さらに探索するまで、思ったとおりに動作しませんでした。マニュアルの力を使うことを忘れないでください( man )コマンドラインのフラストレーションをコマンドラインの成功に変える「隠された」秘密のスイッチとオプションを見つけるためのページ。


Linux
  1. Linuxコマンドラインで牛を飼う

  2. Linuxコマンドラインにアクセスしてください

  3. Linuxコマンドラインでのデータストリームの操作

  1. Linuxgrepコマンドの使用方法

  2. Linuxコマンドラインに関する8つのヒント

  3. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  1. Linuxコマンドラインを使用してWordleを解決します

  2. Linuxコマンドラインでnudokuを使ってパズルを解く

  3. Linuxgrepコマンドを使用する