Linux コマンドとシェル スキル
grep: プロのような Linux の検索
grep は、ジョブが決して変更されないため、ツールチェーンが更新されるたびに存続します。誰がクリーンアップするよりも速く増加するテキスト内で重要な行を見つけます。その真の力は、検索を答えに変えるフラグ語彙です。つまり、周囲のコンテキスト、ファイル名のリスト、逆一致、シェル スクリプトが分岐できる終了コードなどです。サーバーが不正な動作をした場合、調査は grep から始まりますが、誰もが認めているよりも多くの場合、調査もそこで終わります。
要点
- 目的を持って再帰的に検索します。 grep -rni 'fail2ban' /var/log --include='*.log' はバイナリと圧縮アーカイブを独自にスキップします。 /var/log に対する裸の grep -r は、ゆっくりとした方法でその教訓を教えてくれます。
- コンテキストにより一致が読みやすくなります。 -A 3 は後の行、-B 3 の前、-C 5 は両方を表示します。 -l はファイル名のみをリストし、-c はファイルごとに一致をカウントし、-L はリストを欠落しているものに反転します。
- 終了コードはコントラクトの一部です。0 は一致を意味し、1 は一致しないことを意味し、2 はエラーを意味します。 grep -q を実行するスクリプトは、その区別を無視して、成功と沈黙を同一に扱います。
- チェーン ファイル リストを null 安全に実行します: grep -rlZ 'ssl_protocols' /etc/nginx --include='*.conf' | xargs -0 -r ls -l; Z と -0 のペアを削除すると、最初のファイル名にスペースが含まれるとパイプラインが中断されます。
- 読み取り可能な代替のデフォルトの正規表現レベルとして -E を使用し、BSD grep がサポートしない GNU 拡張機能であることを受け入れる場合にのみ -P (ルックアラウンド、\d クラス) に到達します。
- -F はパターンをリテラル テキストとして扱います。高速で、チケットから直接貼り付けられた変数から侵入する正規表現メタ文字の影響を受けません。
- --exclude-dir=.git および --exclude-dir=node_modules は、速度を低下させるためだけに存在するディレクトリからの再帰検索を禁止します。中括弧の展開は bash の便利な機能であり、grep 機能ではないため、スクリプト内で名前を明示的に記述してください。
- 習慣を分けてください: --color=auto をインタラクティブに快適にし、スクリプトに色を付けません (エスケープ シーケンスによりログが破損します)。次に貼り付けた場所を次の人が見つけられるように -n (行番号) をオンにします。
現場ノート
私はかつて、午前 2 時にクライアントのログ ファーム全体に対して裸の grep -r を実行したところ、トラブルに対して 40 分間の沈黙を得ることができました。 --include='*.log' と -l を追加すると、チケットはその場で終了しました。インクルードコードと終了コードの習慣は、パターンが実行される前に実行されるようになりました。
よくある質問
grep が時々私の行ではなく「バイナリ ファイルの一致」を出力するのはなぜですか?
一致に近い NUL バイトにより、GNU grep はファイルをバイナリとして扱います。 -a を追加してテキスト モードを強制するか、-I を追加してバイナリを完全にスキップします。これは、混合ログ ディレクトリの正しいデフォルトです。
代わりに ripgrep を使用する必要がありますか?
ripgrep はより高速で、デフォルトでバイナリ ファイルや隠しファイルをスキップしますが、grep はレスキュー イメージを含め、SSH 接続するすべてのボックスに存在します。まず grep を学習してください。たまたまインストールされている rg に手を伸ばします。
ローテーションされ圧縮されたログを検索するにはどうすればよいですか?
zgrep は .gz ファイルを透過的に検索し、zstdgrep は切り替えられた新しいコンプレッサーのローテーションをカバーします。昨日使用した針は通常、これらのいずれかの中に保管されているため、ツールは基本的な衛生状態としてカウントされます。
単語は一致するが、それを含む長い単語は一致しないようにするにはどうすればよいですか?
単語全体の一致には -w を使用し、全行一致には -x を使用します。パターンに単語の一部が必要な場合、[Ss]erver のような文字クラスを使用すると、大文字と小文字を区別することなく正確に制御できます。
linux コマンドとシェル スキル に対するKinetikatechの支援
これは何百回と対応してきたケースです:管理者がサーバーを操作するかサーバーと戦うかを決定するコマンドとスクリプトの習慣。すべての基本インストールに存在するツールを使用して、テキストとプロセスを検索、変換、転送、監視します。 Linuxサーバーセキュリティとサーバー管理で、評価、実装、24時間体制の監視、そして重要な時に30分以内の対応という、完全なサイクルを提供します。