申し訳ありませんが、コマンドラインは恐竜で消滅することも、ドードーや伝書鳩で消滅することもありませんでした。 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
lo:flags =73
「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
)コマンドラインのフラストレーションをコマンドラインの成功に変える「隠された」秘密のスイッチとオプションを見つけるためのページ。