
サーバを運用していると、「本格的な監視ツールを導入するほどではないけど、一時的にディスクの空き容量を10分間隔ぐらいで表示させたい」という場面があります。
(主に、ディスクフルでの障害対応とか。。。)
そういう偶に使うけど毎回ぐぐってるワンライナーを自分用にメモ。
ZabbixやPrometheusなどで継続的に監視するほどではなく、トラブルシューティング中やバッチ処理の実行中だけ様子を見たい場合に使える簡易的な方法です。
⚠ 注意事項
設定内容やプログラムの内容は、用途・環境に応じて適切なものが変わります。
各種設定値や環境情報についてよく理解を深め、壊れてもよい環境で十分に検証してください。
なるべく正確に書くよう心掛けていますが、本投稿内容を実施される際には自己責任の下でお願いいたします。
1時間ごとに空き容量を表示する
ターミナルで次のコマンドを実行します。
while true; do echo "$(date '+%Y-%m-%d %H:%M:%S') 空き容量: $(df -h / | awk 'NR==2 {print $4}')"; sleep 3600; done
実行すると、その時点の日時とルートパーティションの空き容量が表示されます。その後は1時間待機し、同じ処理を繰り返します。
2026-08-30 11:00:00 空き容量: 15G
2026-08-30 12:00:00 空き容量: 14G
2026-08-30 13:00:00 空き容量: 14G
停止する場合は、実行しているターミナルで Ctrl + C を押します。
コマンドの内容
このワンライナーは、いくつかの基本的なLinuxコマンドを組み合わせています。
while true; do ...; done
while true で無限ループを作り、do から done までの処理を繰り返しています。
今回は明示的な終了条件を用意していないため、Ctrl + C で停止するまで動作します。
date '+%Y-%m-%d %H:%M:%S'
現在のシステム日時を、YYYY-MM-DD HH:MM:SS の形式で取得しています。
空き容量だけではなく取得日時も一緒に出力しておくことで、後から変化を確認しやすくなります。
df -h /
df は、ファイルシステムの使用量と空き容量を確認するコマンドです。
-h を付けると、バイト数ではなくGBやMBなどの読みやすい単位で表示されます。最後の / は、確認対象をルートパーティションに限定する指定です。
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 25G 15G 63% /
awk 'NR==2 {print $4}'
df の出力から、2行目(NR==2)の4列目($4)だけを取り出しています。
上の実行例では、4列目の 15G が空き容量です。
sleep 3600
次の処理を実行するまで3600秒、つまり1時間待機します。
監視間隔を変更する
確認する間隔は、sleep の後ろにある秒数を変更します。
- 10分ごと:
sleep 600 - 5分ごと:
sleep 300 - 1分ごと:
sleep 60
たとえば、1分ごとに確認する場合は次のようになります。
while true; do echo "$(date '+%Y-%m-%d %H:%M:%S') 空き容量: $(df -h / | awk 'NR==2 {print $4}')"; sleep 60; done
確認間隔を短くしすぎると無駄な処理が増えるため、確認したい変化の速さに合わせて設定します。
ログファイルへ書き出す
ターミナルに表示する代わりに、結果をファイルへ残す場合は >> を使います。
while true; do echo "$(date '+%Y-%m-%d %H:%M:%S') 空き容量: $(df -h / | awk 'NR==2 {print $4}')" >> disk_monitor.log; sleep 3600; done
> ではなく >> を使っているため、実行結果は disk_monitor.log の末尾へ追記されます。
ログの内容は、次のコマンドでリアルタイムに確認できます。
tail -f disk_monitor.log
SSH切断後もバックグラウンドで動かす
SSH接続を切断した後も処理を続けたい場合は、nohup と組み合わせてバックグラウンドで実行します。
nohup bash -c 'while true; do echo "$(date '+"'"'+%Y-%m-%d %H:%M:%S'"'"') 空き容量: $(df -h / | awk "NR==2 {print \$4}")" >> disk_monitor.log; sleep 3600; done' >/dev/null 2>&1 &
末尾の & でバックグラウンド実行し、標準出力と標準エラー出力は /dev/null へ送っています。空き容量の記録は disk_monitor.log に追記されます。
起動した処理を停止するときに備えて、実行直後に表示されるジョブ番号やPIDを控えておくと便利です。別のSSH接続から確認する場合は、次のようにコマンドを検索できます。
pgrep -af 'disk_monitor.log'
対象のPIDを確認してから停止します。
kill PID
ルート以外の空き容量を確認する
確認対象を変更したい場合は、df -h / の最後にあるパスを書き換えます。
たとえば、/var が存在するファイルシステムの空き容量を確認する場合は次のようにします。
df -h /var
マウントポイントではなくディレクトリを指定した場合も、そのディレクトリが存在するファイルシステムの情報が表示されます。
まとめ
while、date、df、awk、sleep を組み合わせるだけで、ディスクの空き容量を定期確認する簡易的な監視コマンドを作れました。
常設の監視には向きませんが、一時的なトラブルシューティングや、容量を多く使う処理の実行中に推移を見たい場合には手軽に使えます。
ログへ残す場合は、長時間動かし続けると disk_monitor.log 自体も増えていくため、確認が終わったらプロセスを停止し、不要になったログを整理するところまで忘れないようにします。