Linuxにおけるディスク管理とテキスト処理ツールawkの活用

ストレージデバイスの管理

Linuxシステムでは、ストレージデバイスの適切な設定が運用の基本となります。新しいディスクを追加し、利用可能な状態にするためには一連の手順が必要です。

物理的・仮想的なディスク追加

まず、ホストに新しいストレージデバイスが接続されているか確認します。仮想環境では、VM設定から新しい仮想ディスクを割り当てます。変更後、OS上でそのデバイスを認識できるかチェックします。

lsblk    # 接続中のブロックデバイス一覧表示
df -h    # ファイルシステム使用状況の確認

パーティション方式の選択

  • MBR(fdisk):最大2TBまでのディスクに対応。主に4つのプライマリパーティションまで作成可能。
  • GPT(gdisk):大容量ディスク対応。最大128のパーティションを作成でき、信頼性も高い。

gdiskは標準でインストールされていない場合があるため、必要に応じてパッケージを導入します。

yum install gdisk -y

ディスクの初期化手順

  1. パーティション分割fdisk /dev/sdb コマンドで対話的に操作します。
  2. ファイルシステム作成:フォーマットして利用可能な状態にします。
    mkfs.xfs /dev/sdb1
  3. マウントポイントへの接続mount /dev/sdb1 /mnt/data

テキスト処理エンジンawkの構造的理解

awkは強力なテキスト解析ツールであり、プログラミング言語としての機能も備えています。構造化されたデータ(例:ログファイル、CSV、設定ファイル)の抽出や変換に最適です。

基本構文

awk [オプション] 'パターン {アクション}' ファイル

フィールド区切りの指定

-F オプションまたは内部変数FSで区切り文字を定義できます。

awk -F: '{print $1, $3}' /etc/passwd     # カラム1と3を出力
awk 'BEGIN{FS=":"} {print $1}' /etc/passwd # FSで指定(優先度高)

重要な組み込み変数

  • $0:現在の行全体
  • $n:n番目のフィールド(例:$1, $2)
  • NF:現在の行のフィールド数
  • NR:処理中のレコード(行)番号
  • OFS:出力時のフィールド区切り文字(デフォルトはスペース)
awk 'BEGIN{OFS="-"} {print NR, $1, $NF}' /etc/passwd

実行ライフサイクル

  1. BEGINブロック:データ読み込み前に行う初期化処理
  2. 本体ループ:各行に対してパターンマッチとアクションを実行
  3. ENDブロック:全データ処理後に集計や後処理を行う

条件処理と制御構造

awkは条件分岐や繰り返し処理をサポートしており、複雑なロジックの記述が可能です。

比較演算子

awk -F: '$3 > $4 {print $1}' /etc/passwd       # UIDがGIDより大きいユーザー
awk -F: '$7 ~ /bash$/ {print $1}' /etc/passwd  # bashシェルを使用するユーザー
awk -F: 'NR % 2 == 0 {print $0}' /etc/passwd   # 偶数行のみ出力

論理演算

awk -F: '$3 > 1000 && $7 ~ /nologin/ {print}' /etc/passwd
awk -F: '$6 !~ /^\/home/ {print}' /etc/passwd

条件分岐(if文)

awk -F: '{if(NR % 5 == 0) print "-----"; print $0}' /etc/passwd

繰り返し処理

awk -F: '{for(i=1;i<=3;i++) print $i}' /etc/passwd
awk '{i=1; while(i<=3){print i; i++}}' file.txt

書式付き出力

printf関数を使うことで、整列された出力を生成できます。

awk -F: '{printf "%-15s | %d\n", $1, $3}' /etc/passwd

実践的な応用例

  • ログファイルからのエラーレコード抽出
  • CSVデータの集計処理
  • 設定ファイルの自動生成
  • システム情報の整形出力

特に、/etc/passwdのような構造化テキストに対するカラム操作やフィルタリングに威力を発揮します。

タグ: awk fstab fdisk gdisk shell-scripting

7月27日 02:17 投稿