サーバーの構築メモやドキュメント作成時に、「現在のディスク使用状況をサクッとMarkdownの表にしたい」と思ったのがこちらのワンライナーのきっかけ。

通常、df -h などのコマンドを使いますが、結果をブログやGitHubのIssueに貼り付けるには整形の手間がかかります。

今回は、lsblkjq を組み合わせて、実行するだけで綺麗なMarkdownテーブルを出力する魔法のワンライナーをご紹介します。

使用するコマンド

以下のワンライナーを使用しました。

{ echo -e "| デバイスパス | 全サイズ | 使用率 | 空き容量 | マウントポイント |"; echo -e "| --- | --- | --- | --- | --- |"; lsblk -lnpo NAME,SIZE,FSUSE%,FSAVAIL,MOUNTPOINT --json | jq -r '.blockdevices[] | select(.mountpoint != null and (.name | contains("loop") | not)) | "| \(.name) | \(.size) | \(.["fsuse%"] // "0%") | \(.fsavail // "-") | \(.mountpoint) |"'; }

出力結果のイメージ

実行すると、以下のようなMarkdown形式のテキストが得られます。

デバイスパス全サイズ使用率空き容量マウントポイント
/dev/vda1149G24%109.9G/
/dev/vda15106M6%98.2M/boot/efi
/dev/vda16913M13%702.4M/boot

このワンライナーの仕組み

このコマンドは大きく分けて3つのパートで構成されています。

1.ヘッダーの作成

echo -e を使って、Markdownの表の1行目(項目名)と2行目(区切り線)を出力しています。

2. lsblkによるデータ取得(JSON形式)

lsblk コマンドに複数のオプションを渡しています。

  • -l: リスト形式で表示
  • -n: ヘッダーを非表示にする
  • -p: フルデバイスパスを表示(/dev/vda1など)
  • -o ...: 必要な項目(名前、サイズ、使用率、空き容量、マウントポイント)を指定
  • --json: データを扱いやすいJSON形式で出力します。

3. jqによるフィルタリングと整形

JSONデータを jq で加工し、Markdownの行 | ... | ... | の形に変換しています。

  • select(.mountpoint != null): マウントされていないデバイスを除外します。
  • contains("loop") | not: Snapパッケージなどで増えがちな loop デバイス(仮想デバイス)を除外してスッキリさせています。
  • \(.name) | ...: JSONの値をMarkdownのパイプ記号で囲んで出力します。

まとめ

このワンライナーを使えば、サーバー調査の結果をそのままドキュメントに記録できるため、作業効率が大幅にアップします。特にファイルサーバやWebサーバの定点観測に役立つでしょう。