第4章 4-2 / システムを観察する

ディスクとメモリ ― df・du・free

このページで叩くコマンドと到達点

前提:4-1が完了し、ホームディレクトリにいる状態から始めます。前ページではプロセスという「動いている仕事」を観察しました。今度はサーバーの「体力」――ディスクの空き容量、メモリの使用量、CPUの性能――を確認します。Lightsailの最小プランのような小さなサーバーでは、これらのリソースは決して無限ではありません。「今どれだけ余裕があるか」を数字で把握できることは、サーバー管理者としての基礎体力そのものです。

このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。df -hfree -hなど、多くのコマンドに付ける-h(human-readable)は、これまでのページでも登場した「人間に読みやすい単位で表示する」おなじみのオプションです。

SET 1 ― df・duでディスク容量を見る

ubuntu@lightsail: ~
  1. $cd ~
  2. $df -h
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/xvda1 39G 4.8G 33G 13% /
  5. $df -h /
  6. $df -T /
  7. $du -sh ~
  8. 24K /home/ubuntu
  9. $du -sh ~/practice
  10. $sudo du -sh /var/log
  11. 38M /var/log
  12. $du -sh /home/*
  13. $du -h --max-depth=1 /var | sort -rh | head
  14. $df -h --total
解説 ― SET 1 で何をしたか

2行目のdf -h(disk freeの略)は、サーバーに接続されているディスク全体の使用状況を表示するコマンドです。出力例の/dev/xvda1の行を見ると、全体の容量(Size)・使用済み(Used)・空き(Avail)・使用率(Use%)・マウント先(Mounted on)が一覧できます。ここでの-hがなければ、サイズはバイト単位の桁数だらけの数字になってしまうので、必ずセットで覚えてください。3行目のdf -h /のように末尾にパスを指定すると、そのパスが乗っているディスクだけに絞って表示できます。4行目のdf -T /は、-T(Type)を付けてファイルシステムの種類(ext4など)も一緒に表示するオプションです。

5行目のdu -sh ~(disk usageの略)は、dfとは違い「特定のディレクトリがどれだけの容量を使っているか」を調べるコマンドです。-sはsummary(合計だけ表示する。付けないと配下のファイル1つ1つの内訳まで大量に出力されてしまいます)、-hはおなじみの人間向け単位です。ホームディレクトリ全体でもまだ数十Kバイト程度と、ごく小さいことが出力例からわかります。6行目では練習用ディレクトリ~/practice単体のサイズも確認しています(今は空なので数Kバイト程度です)。

7行目のsudo du -sh /var/logは、システム全体のログが溜め込まれている/var/logのサイズを確認しています。他ユーザー(root)が所有するログファイルも含めて正確に読み取るため、ここではsudo※1で管理者権限を借りています。出力例のように、稼働期間が長いサーバーほどこの数字は膨らんでいく傾向があります(ログの管理は第5章で詳しく扱います)。8行目のdu -sh /home/*のようにワイルドカード*を使うと、/home直下の各ユーザーディレクトリごとのサイズを一括で確認できます。

9行目のdu -h --max-depth=1 /var | sort -rh | headは、--max-depth=1で「1階層下まで」に絞って/var直下の各フォルダのサイズを表示し、それを第3章で学んだsort -rh(サイズの大きい順)につないで並べ替える実践的な組み合わせです。「サーバーのどこが重いのか」を調べるときによく使う型として覚えておくと役立ちます。最後の10行目df -h --totalは、複数のディスクがある場合に合計行を追加するオプションです。

POINT

dfはディスク全体、duは特定のフォルダと覚えてください。「サーバー全体、あとどれくらい空いてる?」ならdf -h、「このフォルダ、何であんなに重いの?」ならdu -shと使い分けるのがコツです。

ゆみちゃん
ゆみ

スマホの「空き容量が足りません」通知と同じで、サーバーもディスクがいっぱいになると新しいファイルが作れなくなったりサービスが止まったりするんだよ! Lightsailの最小プランだと全体で40GB前後しかないから、df -hでたまに残量をチェックする習慣、社会人になってからもすごく役立つよ!

SET 2 ― free・uptimeでメモリと稼働状況を見る

ubuntu@lightsail: ~
  1. $free -h
  2. total used free shared buff/cache available
  3. Mem: 957Mi 268Mi 95Mi 12Mi 593Mi 571Mi
  4. Swap: 512Mi 0B 512Mi
  5. $free -m
  6. $free -h --si
  7. $uptime
  8. 10:41:02 up 2 days, 3:12, 1 user, load average: 0.05, 0.03, 0.01
  9. $uptime -p
  10. $uptime -s
  11. $who
  12. $w
  13. $date
  14. $free -h -s 2 -c 3
解説 ― SET 2 で何をしたか

1行目のfree -hは、サーバーのメモリ※2使用状況を表示するコマンドです。出力例のMem行を見ると、搭載されている全体量(total)、使用中(used)、空き(free)、そして実際にはキャッシュなどを解放すれば使える見込み容量(available)がわかります。Lightsailの最小プランではメモリが1GB前後しかないことも多く、この数字の小ささが「無限にプロセスを立ち上げてはいけない」理由を体感させてくれます。Swap行は、メモリが足りなくなったときにディスクを間借りして代用する仕組みで、小さいサーバーほど重要な安全弁になります。2行目のfree -m-hの代わりにメガバイト単位に固定して表示するオプションで、3行目のfree -h --siは1000区切り(SI単位系)で表示するオプションです。普段は-hだけで十分ですが、他の数字と桁を揃えたいときに使い分けます。

4行目のuptimeは、サーバーが起動してからどれだけ時間が経ったか(稼働時間)と、直近の負荷(load average)※4を表示します。出力例のload average: 0.05, 0.03, 0.01は、直近1分・5分・15分の平均的な負荷を表す数値で、CPUのコア数に対してこの数字が高いほど「サーバーが忙しい」ことを意味します(第5章でさらに詳しく扱います)。5行目のuptime -pは、稼働時間だけを「up 2 days, 3 hours」のような読みやすい文章で表示するオプションです。6行目のuptime -sは逆に、サーバーが起動した日時そのものを表示するオプションで、「このサーバー、いつから動きっぱなしなんだっけ」を確認するときに便利です。

7行目のwhoは、現在サーバーにログインしているユーザーの一覧を表示します。8行目のwはそれに加えて、各ユーザーが何をしているか(実行中のコマンドなど)まで表示する、より詳しい版です。9行目のdateで現在時刻を確認し、これらの数字がいつ時点のものかを意識する習慣をつけます。最後の10行目free -h -s 2 -c 3は、-s 2(2秒おきに)-c 3(3回繰り返す)という指定で、メモリ使用量の推移を数秒だけ観察できる書き方です。3回表示し終えると自動的にプロンプトへ戻ります。

POINT

メモリのfree列が少なくても慌てる必要はありません。Linuxは空いているメモリを積極的にキャッシュとして使う設計なので、本当に見るべきはavailable列(実質的にすぐ使える量)です。

SET 3 ― lscpu・nprocでCPUを見る

ubuntu@lightsail: ~
  1. $lscpu
  2. Architecture: x86_64
  3. CPU(s): 2
  4. Model name: AMD EPYC 7571
  5. $lscpu | grep "Model name"
  6. $nproc
  7. 2
  8. $nproc --all
  9. $cat /proc/cpuinfo | head
  10. $cat /proc/cpuinfo | grep -c processor
  11. $cat /proc/meminfo | head
  12. MemTotal: 980632 kB
  13. $cat /proc/loadavg
  14. $hostnamectl
  15. $cd ~
解説 ― SET 3 で何をしたか

1行目のlscpu(list CPUの略)は、サーバーに割り当てられているCPUの詳細情報を表示します。出力例のCPU(s)はコア数(処理を同時に進められる数)、Model nameはそのCPUの型番です。Lightsailの最小プランではCPU(s): 2のように少ない数のコアが割り当てられているのが一般的で、この数がSET 2で見たload averageの数字を読み解く基準になります(コア数2に対してload averageが2を超えていれば、処理待ちが発生している状態です)。2行目のlscpu | grep "Model name"のようにgrepと組み合わせれば、大量の出力から型番の行だけを取り出せます。

3行目のnprocは、コア数だけをシンプルな数字1つで返してくれる、スクリプトなどで使いやすいコマンドです。4行目のnproc --allは、一部のコアが制限されている環境でも、物理的に存在するコア数の全体を表示するオプションです(Lightsailのような仮想サーバーでは通常nprocと同じ結果になります)。

5行目のcat /proc/cpuinfo | head6行目のcat /proc/cpuinfo | grep -c processorは、これまで見てきたlscpuコマンドが実は参照している「元データ」を直接覗いています。/proc※3は、Linuxがサーバーの状態をファイルの形で公開している特殊なディレクトリで、catheadで中身をそのまま読むことができます。grep -c processor(第3章3-4で学んだ-c=件数カウント)で数えると、nprocと同じコア数が得られることが確認できます。7行目のcat /proc/meminfo | headも同様に、freeコマンドの元データです。出力例のMemTotalの行は、SET 2でfree -hを使って見たtotalと同じ値をキロバイト単位の生の数字で示しています。8行目のcat /proc/loadavgも同様に、uptimeのload average部分だけを取り出したものです。

9行目hostnamectlは、ホスト名に加えてOSの種類(Ubuntu 24.04)やカーネルのバージョンなど、サーバー自身の基本情報をまとめて表示するコマンドです。ここまでのSET 1〜3で、ディスク・メモリ・CPU・OS情報という、サーバーの「体力診断書」に相当する情報を一通り読み取れるようになりました。最後の10行目cd ~は、次のページへ進む前にホームディレクトリへ戻っておく、このドリルの決まりごとです。

ゆみちゃん
ゆみ

/procってちょっと不思議なフォルダだよね。実際にディスクにファイルが保存されてるわけじゃなくて、今のサーバーの状態がリアルタイムでファイルの形に化けて見えてるだけなんだよ! lscpufreeみたいな便利コマンドは、結局この/procの中身を読みやすく整形してるだけ、って知っておくと仕組みの理解がぐっと深まるよ!

まとめ

4-2では、サーバーのディスク容量・メモリ・CPUという「体力」を確認するコマンドを一通り体験しました。このページで叩けるようになったコマンドを一覧にまとめます。

コマンド何をするか覚え方
df -hディスク全体の空き容量を表示するdisk free(ディスクの空き)
du -sh <パス>指定フォルダの使用容量の合計を表示するdisk usage(このフォルダの重さ)
free -hメモリとスワップの使用状況を表示する空いてる(free)メモリはどれだけ?
uptimeサーバーの稼働時間と負荷を表示するどれだけ起きっぱなし(up)か
lscpuCPUの詳細情報を表示するlist CPU(CPUを一覧する)
nprocCPUのコア数を数字だけで表示するnumber of processors
cat /proc/meminfoメモリ情報の生データを見るfreeコマンドの元ネタ
hostnamectlホスト名とOS・カーネル情報を表示するサーバーの身分証明書

次のページ「4-3. findとlocateで探す」では、サーバー全体の「体力」がわかったところで、今度はその中から目的のファイルをピンポイントで探し出す方法を学びます。

脚注 ─ 用語解説
  1. sudo … 一時的に管理者(root)権限を借りてコマンドを実行する仕組み。他ユーザー所有のファイルを正確に読むときなどに使う。第2章2-1で詳説。
  2. メモリ … プログラムが実行中に一時的にデータを置いておく作業スペース。ディスクより高速だが、電源を切ると内容は消える。
  3. /proc … 実際のファイルではなく、サーバーの現在の状態(CPU・メモリ・プロセス等)をリアルタイムにファイルの形で見せてくれる特殊なディレクトリ。
  4. 負荷(load average) … CPUの処理待ちがどれだけ発生しているかを表す指標。直近1分・5分・15分の平均値で示され、コア数と比較して忙しさを判断する。