このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

LinuC入門|コマンド演習04

LinuCコマンド演習04概要

LinuCコマンド演習04では、1章で登場したコマンドについて、実際にAlmaLinuxのターミナルを操作しながら理解を深めます。

今回扱うのは、プロセスやシステムの稼働状況を確認するための基本コマンドです。

コマンド主な役割情報の更新方法
ps実行中のプロセスを一覧表示する実行した時点の情報を表示
pgrepプロセス名などからPIDを検索する実行した時点の情報を表示
topプロセスやCPU、メモリの状況を監視する一定間隔で自動更新
uptime稼働時間とロードアベレージを表示する実行した時点の情報を表示
free物理メモリとスワップの使用状況を表示する実行した時点の情報を表示

この5つを組み合わせると、次のような確認ができます。

  • サーバーがどのくらい稼働しているか
  • システム全体にどの程度の負荷がかかっているか
  • CPUやメモリを多く使用しているプロセスは何か
  • 目的のプログラムが動いているか
  • メモリにどの程度の余裕があるか

表示されるPID、CPU使用率、メモリ使用量、時刻などは、使用している環境によって異なります。実行例と同じ数値にならなくても問題ありません。

psコマンド

psは、実行中のプロセスを表示するコマンドです。表示内容は自動更新されず、psを実行した時点のスナップショットとして表示されます。

基本書式

ps [オプション]

基本的な使用例

コマンド説明
ps現在の端末で動作している自分のプロセスを表示する
ps -fプロセスを詳しい形式で表示する
ps -eシステム上のすべてのプロセスを表示する
ps -efすべてのプロセスを詳しい形式で表示する
ps auxCPUやメモリの使用率を含めて、すべてのプロセスを表示する
ps -u suzukisuzukiが実行しているプロセスを表示する

psでは、ハイフンを付けるUNIX形式と、ハイフンを付けないBSD形式のオプションが利用されています。そのため、ps -efではハイフンを付けますが、ps auxではauxの前にハイフンを付けません。

psの主な表示項目

項目意味
USERまたはUIDプロセスを実行しているユーザー
PIDプロセスを識別する番号
PPID親プロセスのPID
%CPUCPU使用率
%MEM物理メモリ使用率
TTYプロセスが使用している端末
STATプロセスの状態
TIMEプロセスが使用したCPU時間
CMDまたはCOMMAND実行されたコマンド

STATで表示される代表的な状態

状態意味
R実行中または実行可能な状態
S割り込み可能な待機状態
D割り込みできない待機状態
T停止中の状態
Z終了したが、親プロセスに回収されていないゾンビ状態

pgrepコマンド

pgrepは、プロセス名やユーザー名などの条件を指定して、該当するプロセスのPIDを検索するコマンドです。

psで一覧全体を表示する方法に対し、pgrepは目的のプロセスを直接探す場合に便利です。

基本書式

pgrep [オプション] 検索パターン

基本的な使用例

コマンド説明
pgrep bashプロセス名にbashを含むプロセスのPIDを表示する
pgrep -l bashPIDとプロセス名を表示する
pgrep -a bashPIDと完全なコマンドラインを表示する
pgrep -c bash該当するプロセス数を表示する
pgrep -u suzuki bashsuzukiが実行しているbashを検索する
pgrep -u suzuki -a sleepsuzukiが実行しているsleepのPIDとコマンドラインを表示する

主なオプション

オプション説明
-lPIDとプロセス名を表示する
-aPIDと完全なコマンドラインを表示する
-c条件に一致したプロセス数を表示する
-u ユーザー名指定した実効ユーザーのプロセスに限定する
-fプロセス名だけでなく、完全なコマンドラインを検索する
-xプロセス名が完全に一致するものだけを検索する

条件に一致するプロセスが存在しない場合、pgrepは何も表示しません。エラーメッセージが表示されないため、何も表示されないこと自体が「該当するプロセスがない」という結果になります。

topコマンド

topは、システム全体の負荷、CPU、メモリ、プロセスの状態をリアルタイムに監視するコマンドです。表示内容は一定間隔で自動更新されます。

基本書式

top [オプション]

基本的な使用例

コマンド説明
topシステム全体をリアルタイムに監視する
top -u suzukisuzukiのプロセスに限定して表示する
top -d 55秒間隔で画面を更新する
top -b -n 1情報を1回だけ表示して終了する

top -b -n 1の-bはバッチモード、-n 1は更新回数を1回にする指定です。

topの上部に表示される情報

表示部分確認できる内容
top行現在時刻、稼働時間、ログインユーザー数、ロードアベレージ
Tasks行プロセスの総数、実行中、待機中、停止中、ゾンビ状態の数
%Cpu(s)行CPUの使用状況
Mem行物理メモリの使用状況
Swap行スワップ領域の使用状況

CPU欄の代表的な項目

項目意味
usユーザープロセスが使用したCPU時間
syカーネルが使用したCPU時間
idCPUが何もせず待機していた時間
waディスクなどのI/O完了を待っていた時間
st仮想環境でほかの仮想マシンに使用されたCPU時間

topの基本操作キー

キー動作
qtopを終了する
PCPU使用率順に並べる
Mメモリ使用率順に並べる
1CPUごとの表示を切り替える
hヘルプを表示する

topの上部には、稼働時間、ロードアベレージ、プロセス数、CPU、メモリなどが表示され、その下にプロセスの一覧が表示されます。

uptimeコマンド

uptimeは、システムの稼働時間とロードアベレージを1行で表示するコマンドです。

基本書式

uptime [オプション]

実行例

suzuki@AlmaLinux:~$ uptime
 10:20:15 up 2 days,  3:10,  1 user,  load average: 0.10, 0.20, 0.15
表示内容意味
10:20:15現在時刻
up 2 days, 3:10起動してから2日と3時間10分経過
1 userログインしているユーザー数
0.10過去1分間のロードアベレージ
0.20過去5分間のロードアベレージ
0.15過去15分間のロードアベレージ

ロードアベレージは、CPUを使用中または使用待ちのプロセスと、割り込みできないI/O待ち状態のプロセスの平均数です。単純なCPU使用率ではありません。

同じ1.00でも、論理CPUが1個の環境と4個の環境では意味が異なります。CPU数と負荷の推移を考えながら判断することが大切です。

主なオプション

コマンド説明
uptime -p稼働時間を読みやすい形式で表示する
uptime -sシステムを起動した日時を表示する

freeコマンド

freeは、物理メモリとスワップ領域の使用状況を表示するコマンドです。情報は主に/proc/meminfoから取得されます。

基本書式

free [オプション]

基本的な使用例

コマンド説明
freeメモリ容量をKiB単位で表示する
free -h容量に合わせてMiBやGiBなどの単位を自動選択する
free -mMiB単位で表示する
free -gGiB単位で表示する
free -s 55秒間隔で繰り返し表示する

free -hの実行例

suzuki@AlmaLinux:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.5Gi       2.5Gi       1.6Gi       200Mi       3.4Gi       5.0Gi
Swap:          2.0Gi          0B       2.0Gi

主な表示項目

項目意味
total使用可能なメモリの合計
used使用中またはすぐには使用できないメモリ
free完全に未使用のメモリ
shared主にtmpfsなどで共有されているメモリ
buff/cacheバッファやキャッシュに使用されているメモリ
availableスワップを使わず、新しい処理に割り当てられると推定されるメモリ
Swapスワップ領域の合計、使用量、空き容量

Linuxは、空いているメモリをキャッシュとして積極的に利用します。そのため、freeが少ないだけでメモリ不足とは判断できません。新しい処理に使用できるメモリを判断するときは、availableを重視します。

演習問題+模範解答例

演習01:psコマンド(現在の端末のプロセスを表示)

問題

現在の端末で動作している、自分のプロセスを表示してください。

模範解答例
suzuki@AlmaLinux:~$ ps
    PID TTY          TIME CMD
   2340 pts/0    00:00:00 bash
   2418 pts/0    00:00:00 ps
解説

オプションを付けずにpsを実行すると、基本的には現在のユーザーが現在の端末で実行しているプロセスが表示されます。

bashは現在操作しているシェルです。psも実行中のプロセスであるため、結果の中に表示されます。

演習02:psコマンド(すべてのプロセスを詳しく表示)

問題

システム上で動作しているすべてのプロセスを、PPIDなどを含む詳しい形式で表示してください。

模範解答例
suzuki@AlmaLinux:~$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 09:00 ?        00:00:02 /usr/lib/systemd/systemd
root         780       1  0 09:01 ?        00:00:00 /usr/sbin/sshd
suzuki      2340    2339  0 10:15 pts/0    00:00:00 /usr/bin/bash
suzuki      2450    2340  0 10:25 pts/0    00:00:00 ps -ef
解説

-eはすべてのプロセスを選択し、-fは詳しい形式で表示するオプションです。

PPIDを見ると、どのプロセスから起動されたのかが分かります。例えばbashからpsを実行した場合、psのPPIDにはbashのPIDが表示されます。

演習03:psコマンド(CPUとメモリの使用率を表示)

問題

システム上のすべてのプロセスについて、CPU使用率とメモリ使用率を含む一覧を表示してください。

模範解答例
suzuki@AlmaLinux:~$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1  24100 14200 ?        Ss   09:00   0:02 /usr/lib/systemd/systemd
suzuki      2340  0.0  0.0  15200  4100 pts/0    Ss   10:15   0:00 bash
suzuki      2500  0.0  0.0  16200  3800 pts/0    R+   10:28   0:00 ps aux
解説

ps auxでは、すべてのプロセスとCPU、メモリの使用率を確認できます。

この書式ではauxの前にハイフンを付けません。負荷の高いプロセスを調査するときは、%CPU、%MEM、COMMANDを確認します。

演習04:pgrepコマンド(プロセス名からPIDを検索)

問題

300秒間待機するsleepプロセスをバックグラウンドで起動してください。その後、suzukiが実行しているsleepプロセスのPIDと完全なコマンドラインを表示してください。

確認後は、表示されたPIDを指定してsleepプロセスを終了してください。

模範解答例
suzuki@AlmaLinux:~$ sleep 300 &
[1] 3521
suzuki@AlmaLinux:~$ pgrep -u suzuki -a sleep
3521 sleep 300
suzuki@AlmaLinux:~$ kill 3521
解説

sleep 300 &の末尾にある&は、コマンドをバックグラウンドで実行する指定です。

pgrepでは次の条件を指定しています。

  • -u suzukiで、suzukiのプロセスに限定する
  • -aで、PIDと完全なコマンドラインを表示する
  • sleepで、検索するプロセス名を指定する

3521は実行例のPIDです。実際には環境ごとに異なる番号が表示されます。最後のkillは、演習用に起動したsleepを終了するための後片付けです。

演習05:topコマンド(システムをリアルタイム監視)

問題

プロセス、CPU、メモリの状態をリアルタイムに表示してください。表示内容を確認した後、qキーで終了してください。

模範解答例
suzuki@AlmaLinux:~$ top
top - 10:30:15 up 2 days,  3:20,  1 user,  load average: 0.10, 0.15, 0.12
Tasks: 180 total,   1 running, 179 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.5 sy,  0.0 ni, 98.0 id,  0.5 wa
MiB Mem :  7680.0 total,  1600.0 free,  2500.0 used,  3580.0 buff/cache
MiB Swap:  2048.0 total,  2048.0 free,     0.0 used

確認が終わったらqキーを押します。

解説

topは、終了するまで情報を繰り返し更新します。

最初にロードアベレージ、CPUのidとwa、メモリのavailable相当の情報を確認します。その後、プロセス一覧の%CPUや%MEMを見ると、負荷の原因を調べやすくなります。

演習06:topコマンド(情報を1回だけ表示)

問題

topの情報を1回だけ表示し、自動的にコマンドを終了させてください。

模範解答例
suzuki@AlmaLinux:~$ top -b -n 1
解説

-bは、対話操作を行わないバッチモードにするオプションです。-n 1は、表示回数を1回に指定します。

通常のtopとは異なり、qキーを押さなくても自動的に終了します。現在の状態を一度だけ確認したい場合や、結果をファイルへ保存したい場合の基本形です。

演習07:uptimeコマンド(稼働時間と負荷を表示)

問題

システムの稼働時間、ログインユーザー数、過去1分、5分、15分のロードアベレージを表示してください。

続けて、稼働時間だけを読みやすい形式で表示してください。

模範解答例
suzuki@AlmaLinux:~$ uptime
 10:35:20 up 2 days,  3:25,  1 user,  load average: 0.10, 0.20, 0.15
suzuki@AlmaLinux:~$ uptime -p
up 2 days, 3 hours, 25 minutes
解説

通常のuptimeでは、現在時刻、稼働時間、ログインユーザー数、ロードアベレージが1行で表示されます。

ロードアベレージは左から過去1分、5分、15分です。短期的な変化を確認するときは過去1分、長い傾向を見るときは過去15分の値を確認します。

uptime -pでは、稼働時間を人が読みやすい形式で表示できます。

演習08:freeコマンド(メモリ使用状況を表示)

問題

物理メモリとスワップ領域の使用状況を、読みやすい単位で表示してください。

模範解答例
suzuki@AlmaLinux:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.5Gi       2.5Gi       1.6Gi       200Mi       3.4Gi       5.0Gi
Swap:          2.0Gi          0B       2.0Gi
解説

-hを指定すると、容量に合わせてMiBやGiBなどの読みやすい単位が使われます。

確認するときは、freeだけでなくavailableにも注目します。freeが少なくても、buff/cacheとして再利用可能なメモリが多く、availableに余裕があれば、直ちにメモリ不足とは判断できません。

まとめ

LinuCコマンド演習04では、1章で登場したコマンドについて、プロセスとシステムリソースを確認する基本操作を演習しました。psでプロセスの一覧を確認し、pgrepで目的のPIDを検索し、topで変化をリアルタイムに監視できます。さらに、uptimeで稼働時間と負荷を確認し、freeでメモリの余裕を調べられます。まずuptimeとfreeで全体を確認し、top、ps、pgrepを使って詳しく調査する流れを身に付けておくと、サーバー管理や障害調査で役立ちます。