NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
JA

Linux コマンドとシェル スキル

awk: 列がプログラムになるとき

awk は、列が作業単位になるときに到達するものです: nginx アクセス ログ、/etc/passwd、df 出力、フィールドに存在するものすべて。これはワンライナーの皮をかぶった完全な言語 (変数、配列、算術、パターン アクション ルール) であり、まさにログ フォレンジックに最適な偽装です。正直な境界線: awk が快適に実行できるものはすべてワンライナーであり、ブロックのページを必要とするものはすべて、まだそれ自体を認めていない Python スクリプトです。

要点

  1. フィールド分割が重要なトリックです。 awk -F: '$3 >= 1000 {print $1}' /etc/passwd は実際のユーザーをリストし、-F'[,|]' は、cut がすでにあきらめている場合に複数文字の区切り文字を処理します。
  2. 連想配列によるカウント: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure は、任意のログを 1 行の頻度テーブルに変換します。
  3. NR および NF 応答ファイルの質問: 'NR==1' はヘッダー行、'{print NF}' は行ごとの列数をカウントし、NR を別のファイルの保存値と比較すると重複とギャップが見つかります。
  4. 一致と抽出は毎日の糧です: awk '/ 500 / {print $7, $9}' access.log は URL を含むエラー ページをプルし、OFS では行を自分で書き換えることなく 1 つのフィールドを編集した後に $0 を再印刷できます。
  5. BEGIN ブロックと END ブロックは集計作業が行われる場所です。BEGIN は区切り文字を設定し、中間のルールは行ごとに実行され、END は合計を出力します。 3 つのブロックは正常に読み取れますが、5 つは変装したスクリプトです。
  6. クォートはシェルのワンライナーの本当の敵です。プログラムを一重引用符で囲み、その中のリテラルを二重引用符で囲みます。二重引用符で囲まれたシェル文字列内の $7 は awk にまったく到達しないことを覚えておいてください。
  7. 数値作業は LC_ALL=C になります。数値内のロケール カンマと奇数の照合順序により、比較と並べ替えが横向きになり、ロケールの固定は 1 行で午後の時間を節約できます。
  8. 上限を知ってください。CSV、ネストされた JSON、またはステートフルな複数行形式内の引用符で囲まれたカンマは Python に送られます。 awk はメスであり、メスのままです。

現場ノート

ロケールのカンマを含むログのドル列を合計する awk のワンライナーは、会計部門がレポートを公開するまで誰も疑問に思わなかった数値を生成しました。 LC_ALL=C はその週にエイリアス ライブラリに移動し、そのまま残りました。

よくある質問

不安ですか、コラム作業のためにカットしますか?

1 つの固定区切り文字と単純な列リストをカットします。条件、正規表現、算術演算、または集計が表示された瞬間は、とにかくカットがその深さから外れています。

列を合計または平均するにはどうすればよいですか?

END の集計: awk '{s += $5} END {print s, s/NR}' はフィールド 5 を行全体で加算して平均します。ロケールで数値にカンマが含まれる場合は、最初に千の区切り文字を削除します。

私の awk ワンライナーが macOS 上で異なる動作をするのはなぜですか?

macOS には、-i inplace や gensub のような GNU 拡張機能のない POSIX awk が同梱されています。 Linux 上で実行されるスクリプトはそこで静かに失敗する可能性があるため、ワンライナーを POSIX 形式にしておくか、gawk を持ち歩くようにしてください。

awk は JSON を解析できますか?

意味がありません: JSON には awk が理解できる列構造がなく、ネストされたオブジェクトでは正規表現ハックが機能しません。ジョブが大きくなった場合は、awk の JSON 形式である jq を使用するか、Python の json モジュールを使用します。

linux コマンドとシェル スキル に対するKinetikatechの支援

正直なところ、ほとんどのチームはまず自力で試してからご相談に来ます:管理者がサーバーを操作するかサーバーと戦うかを決定するコマンドとスクリプトの習慣。すべての基本インストールに存在するツールを使用して、テキストとプロセスを検索、変換、転送、監視します。 私たちのLinuxサーバーセキュリティとサーバー管理サービスは、linux コマンドとシェル スキルを苦い経験で学ぶ必要がないように存在します。セットアップ、監視、そして3時の驚きをすべてお任せください。

エンジニアに相談する

サーバーの障害?サイトの改ざん?表示が遅い?

重大な障害には30分以内に対応 — 24時間365日体制です。

緊急サポートを依頼する support@kinetikatech.com