サーバーの構築メモやドキュメント作成時に、「現在のディスク使用状況をサクッとMarkdownの表にしたい」と思ったのがこちらのワンライナーのきっかけ。
通常、df -h などのコマンドを使いますが、結果をブログやGitHubのIssueに貼り付けるには整形の手間がかかります。
今回は、lsblk と jq を組み合わせて、実行するだけで綺麗な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/vda1 | 149G | 24% | 109.9G | / |
| /dev/vda15 | 106M | 6% | 98.2M | /boot/efi |
| /dev/vda16 | 913M | 13% | 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サーバの定点観測に役立つでしょう。